1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien.c-types alien.syntax kernel layouts
4 math math.rectangles arrays ;
5 IN: core-graphics.types
7 << cell 4 = "float" "double" ? "CGFloat" typedef >>
9 : <CGFloat> ( x -- alien )
10 cell 4 = [ <float> ] [ <double> ] if ; inline
12 : *CGFloat ( alien -- x )
13 cell 4 = [ *float ] [ *double ] if ; inline
19 : <CGPoint> ( x y -- point )
21 [ set-CGPoint-y ] keep
22 [ set-CGPoint-x ] keep ;
28 : <CGSize> ( w h -- size )
31 [ set-CGSize-w ] keep ;
34 { "CGPoint" "origin" }
37 : CGPoint>loc ( CGPoint -- loc )
38 [ CGPoint-x ] [ CGPoint-y ] bi 2array ;
40 : CGSize>dim ( CGSize -- dim )
41 [ CGSize-w ] [ CGSize-h ] bi 2array ;
43 : CGRect>rect ( CGRect -- rect )
44 [ CGRect-origin CGPoint>loc ]
45 [ CGRect-size CGSize>dim ]
48 : CGRect-x ( CGRect -- x )
49 CGRect-origin CGPoint-x ; inline
50 : CGRect-y ( CGRect -- y )
51 CGRect-origin CGPoint-y ; inline
52 : CGRect-w ( CGRect -- w )
53 CGRect-size CGSize-w ; inline
54 : CGRect-h ( CGRect -- h )
55 CGRect-size CGSize-h ; inline
57 : set-CGRect-x ( x CGRect -- )
58 CGRect-origin set-CGPoint-x ; inline
59 : set-CGRect-y ( y CGRect -- )
60 CGRect-origin set-CGPoint-y ; inline
61 : set-CGRect-w ( w CGRect -- )
62 CGRect-size set-CGSize-w ; inline
63 : set-CGRect-h ( h CGRect -- )
64 CGRect-size set-CGSize-h ; inline
66 : <CGRect> ( x y w h -- rect )
71 [ set-CGRect-x ] keep ;
73 : CGRect-x-y ( alien -- origin-x origin-y )
74 [ CGRect-x ] [ CGRect-y ] bi ;
76 : CGRect-top-left ( alien -- x y )
77 [ CGRect-x ] [ [ CGRect-y ] [ CGRect-h ] bi + ] bi ;
79 C-STRUCT: CGAffineTransform
87 TYPEDEF: void* CGColorRef
88 TYPEDEF: void* CGColorSpaceRef
89 TYPEDEF: void* CGContextRef
90 TYPEDEF: uint CGBitmapInfo
94 TYPEDEF: uint CGDirectDisplayID
95 TYPEDEF: int boolean_t
96 TYPEDEF: void* CGLContextObj
97 TYPEDEF: int CGLContextParameter