3 (defcfun gdk-rectangle-intersect
:boolean
4 (src-1 (g-boxed-foreign rectangle
))
5 (src-2 (g-boxed-foreign rectangle
))
6 (dest (g-boxed-foreign rectangle
)))
8 (defun rectangle-intersect (rectangle-1 rectangle-2
)
9 (let ((dest (make-rectangle)))
10 (when (gdk-rectangle-intersect rectangle-1 rectangle-2 dest
)
13 (export 'rectangle-intersect
)
15 (defcfun gdk-rectangle-union
:boolean
16 (src-1 (g-boxed-foreign rectangle
))
17 (src-2 (g-boxed-foreign rectangle
))
18 (dest (g-boxed-foreign rectangle
)))
20 (defun rectangle-union (rectangle-1 rectangle-2
)
21 (let ((dest (make-rectangle)))
22 (when (gdk-rectangle-union rectangle-1 rectangle-2 dest
)
25 (export 'rectangle-union
)
27 (defcfun gdk-region-polygon
(g-boxed-foreign region
:return
)
30 (fill-rule gdk-fill-rule
))
32 (defun region-from-polygon (points fill-rule
)
33 (let ((n (length points
)))
34 (with-foreign-object (pts 'point-cstruct n
)
37 (gobject::copy-slots-to-native
39 (inc-pointer pts
(* i
(foreign-type-size 'point-cstruct
)))
40 (gobject::g-boxed-cstruct-wrapper-info-cstruct-description
(gobject::get-g-boxed-foreign-info
'point
)))
43 (gdk-region-polygon pts n fill-rule
))))
45 (export 'region-from-polygon
)
47 (defcfun (region-from-rectangle "gdk_region_rectangle") (g-boxed-foreign region
:return
)
48 (rectangle (g-boxed-foreign rectangle
)))
50 (export 'region-from-rectangle
)
52 (defcfun gdk-region-get-clipbox
:void
53 (region (g-boxed-foreign region
))
54 (rectangle (g-boxed-foreign rectangle
)))
56 (defun region-get-clipbox (region)
57 (let ((clipbox (make-rectangle)))
58 (gdk-region-get-clipbox region clipbox
)
61 (export 'region-get-clipbox
)
63 (defcfun gdk-region-get-rectangles
:void
64 (region (g-boxed-foreign region
))
66 (n-rectangles :pointer
))
68 (defun region-get-rectangles (region)
69 (with-foreign-objects ((rectangles-ptr :pointer
) (n-rectangles-ptr :int
))
70 (gdk-region-get-rectangles region rectangles-ptr n-rectangles-ptr
)
71 (let ((n (mem-ref n-rectangles-ptr
:int
))
72 (rectangles (mem-ref rectangles-ptr
:pointer
)))
74 (iter (for i from
0 below n
)
75 (for rect
= (convert-from-foreign (inc-pointer rectangles
(* i
(foreign-type-size 'rectangle-cstruct
)))
76 '(g-boxed-foreign rectangle
)))
78 (glib:g-free rectangles
)))))
80 (export 'region-get-rectangles
)
82 (defcfun (region-is-empty "gdk_region_empty") :boolean
83 (region (g-boxed-foreign region
)))
85 (export 'region-is-empty
)
87 (defcfun (region= "gdk_region_equal") :boolean
88 (region-1 (g-boxed-foreign region
))
89 (region-2 (g-boxed-foreign region
)))
93 (defcfun (region-point-in "gdk_region_point_in") :boolean
94 (region (g-boxed-foreign region
))
98 (export 'region-point-in
)
100 (defcfun (region-rect-in "gdk_region_rect_in") overlap-type
101 (region (g-boxed-foreign region
))
102 (rectangle (g-boxed-foreign rectangle
)))
104 (export 'region-rect-in
)
106 (defcfun (region-offset "gdk_region_offset") :void
107 (region (g-boxed-foreign region
))
111 (export 'region-offset
)
113 (defcfun (region-shrink "gdk_region_shrink") :void
114 (region (g-boxed-foreign region
))
118 (export 'region-shrink
)
120 (defcfun (region-union-with-rect "gdk_region_union_with_rect") :void
121 (region (g-boxed-foreign region
))
122 (rect (g-boxed-foreign rectangle
)))
124 (export 'region-union-with-rect
)
126 (defcfun (region-intersect "gdk_region_intersect") :void
127 (target (g-boxed-foreign region
))
128 (source (g-boxed-foreign region
)))
130 (export 'region-intersect
)
132 (defcfun (region-union "gdk_region_union") :void
133 (target (g-boxed-foreign region
))
134 (source (g-boxed-foreign region
)))
136 (export 'region-union
)
138 (defcfun (region-subtract "gdk_region_subtract") :void
139 (target (g-boxed-foreign region
))
140 (source (g-boxed-foreign region
)))
142 (export 'region-subtract
)
144 (defcfun (region-xor "gdk_region_xor") :void
145 (target (g-boxed-foreign region
))
146 (source (g-boxed-foreign region
)))
150 (defcallback gdk-span-func-callback
:void
151 ((span (g-boxed-foreign span
)) (data :pointer
))
152 (let ((fn (stable-pointer-value data
)))
155 (defcfun gdk-region-spans-intersect-foreach
:void
156 (region (g-boxed-foreign region
))
163 (defun region-spans-intersect-foreach (region spans sorted fn
)
164 (let ((n (length spans
)))
165 (with-stable-pointer (ptr fn
)
166 (with-foreign-object (spans-ptr 'span-cstruct n
)
170 (gobject::copy-slots-to-native
172 (inc-pointer spans-ptr
(* i
(foreign-type-size 'span-cstruct
)))
173 (gobject::g-boxed-cstruct-wrapper-info-cstruct-description
(gobject::get-g-boxed-foreign-info
'span
)))
176 (gdk-region-spans-intersect-foreach region spans-ptr n sorted
(callback gdk-region-spans-intersect-foreach
) ptr
)))))
178 (export 'region-spans-intersect-foreach
)