1 "Many functions that deal with cairo_surface_t* are problematic.
2 Ex: cairo_set_source_surface. Do not attempt to add additional
3 bindings to this code if you don't understand why, otherwise
4 Cairo will write into freed memory."
6 lobby ensureNamespace: #Cairo &delegate: True.
9 &builder: [ExternalInterface newForLibrary: 'slate-cairo' primitives:
11 "Construction / Destruction"
12 (Pointer image_surface_create_for_data(Pointer Int Int Int Int))
13 (Void surface_destroy(Pointer))
14 (Pointer create(Pointer))
15 (Void destroy(Pointer))
19 (Void clip_preserve(Pointer))
21 (Void fill_preserve(Pointer))
22 (Void restore(Pointer))
24 (Float get_line_width(Pointer))
25 (Void set_line_width(Pointer Float))
26 (Void set_source_rgb(Pointer Float Float Float))
27 (Void set_source_rgba(Pointer Float Float Float Float))
28 (Void stroke(Pointer))
29 (Void stroke_preserve(Pointer))
32 (Void close_path(Pointer))
33 (Void line_to(Pointer Float Float))
34 (Void move_to(Pointer Float Float))
35 (Void new_path(Pointer))
36 (Void rectangle(Pointer Float Float Float Float))
39 (Void translate(Pointer Float Float))
40 (Void scale(Pointer Float Float))
43 (Void select_font_face(Pointer CString Int Int))
44 (Void set_font_size(Pointer Float))
45 (Void show_text(Pointer CString))
46 } "&leader: 'cairo_'"].
50 Cairo ensureNamespace: #formats.
51 [| :entry | Cairo formats addSlot: entry key valued: entry value] for: #{
58 Cairo define: #Context &slots: {#surfacePointer. #contextPointer. #bitmapAddress. #bitmapHandle}.
60 Cairo define: #FormContext &slots: {#form} &parents: {Cairo Context}.
62 _@(Cairo FormContext traits) newForm: form@(Form traits)
65 ifFalse: [error: 'Only depth-32 currently supported'].
66 surface := Cairo FormContext clone.
68 surface bitmapAddress := form bits bytes address.
69 surface bitmapHandle := form bits bytes handle.
70 ByteArray noteNewReferenceTo: surface bitmapHandle.
71 (surface surfacePointer := Cairo Lib primitives image_surface_create_for_data applyTo:
72 {surface bitmapAddress. Cairo formats argb32. form width. form height. form width * 4})
73 ifNil: [error: 'image_surface_create_for_data_failed'].
74 (surface contextPointer := Cairo Lib primitives create applyTo: {surface surfacePointer})
75 ifNil: [error: 'create_failed'].
79 surface@(Cairo Context traits) destroy
81 surface contextPointer ifNil: [ContextIsInvalid].
82 surface surfacePointer ifNil: [ContextIsInvalid].
83 Cairo Lib primitives destroy applyTo: {surface contextPointer.}.
84 Cairo Lib primitives surface_destroy applyTo: {surface surfacePointer}.
85 ByteArray close: surface bitmapHandle.
86 surface contextPointer := Nil.
87 surface surfacePointer := Nil.
91 "============================================================================"
93 surface@(Cairo Context traits) clip
95 Cairo Lib primitives clip applyTo: {surface contextPointer.}.
98 surface@(Cairo Context traits) clip_preserve
100 Cairo Lib primitives clip_preserve applyTo: {surface contextPointer.}.
103 surface@(Cairo Context traits) fill
105 Cairo Lib primitives fill applyTo: {surface contextPointer.}.
108 surface@(Cairo Context traits) fill_preserve
110 Cairo Lib primitives fill_preserve applyTo: {surface contextPointer.}.
113 surface@(Cairo Context traits) restore
115 Cairo Lib primitives restore applyTo: {surface contextPointer.}.
118 surface@(Cairo Context traits) save
120 Cairo Lib primitives save applyTo: {surface contextPointer.}.
123 surface@(Cairo Context traits) lineWidth
125 Cairo Lib primitives get_line_width applyTo: {surface contextPointer.}.
128 surface@(Cairo Context traits) lineWidth: width
130 Cairo Lib primitives set_line_width applyTo: {surface contextPointer. width.}.
133 surface@(Cairo Context traits) sourceRGB: color@(RGBColor traits)
135 Cairo Lib primitives set_source_rgb applyTo: {surface contextPointer. color red. color green. color blue.}.
138 surface@(Cairo Context traits) sourceRGB: color@(RGBColor traits) alpha: alpha
140 Cairo Lib primitives set_source_rgba applyTo: {surface contextPointer. color red. color green. color blue. alpha.}.
143 surface@(Cairo Context traits) stroke
145 Cairo Lib primitives stroke applyTo: {surface contextPointer.}.
148 surface@(Cairo Context traits) stroke_preserve
150 Cairo Lib primitives stroke_preserve applyTo: {surface contextPointer.}.
154 "============================================================================"
156 surface@(Cairo Context traits) closePath
158 Cairo Lib primitives close_path applyTo: {surface contextPointer.}.
161 surface@(Cairo Context traits) lineTo: point@(Point traits)
163 Cairo Lib primitives line_to applyTo: {surface contextPointer. point x. point y.}.
166 surface@(Cairo Context traits) moveTo: point@(Point traits)
168 Cairo Lib primitives move_to applyTo: {surface contextPointer. point x. point y.}.
171 surface@(Cairo Context traits) newPath
173 Cairo Lib primitives new_path applyTo: {surface contextPointer.}.
176 surface@(Cairo Context traits) rectangle: rectangle@(Rectangle traits)
178 Cairo Lib primitives rectangle applyTo: {surface contextPointer. rectangle left. rectangle top. rectangle width. rectangle height.}.
182 "============================================================================"
184 surface@(Cairo Context traits) translate: offset@(Point traits)
186 Cairo Lib primitives translate applyTo: {surface contextPointer. offset x. offset y.}.
189 surface@(Cairo Context traits) scale: offset@(Point traits)
191 Cairo Lib primitives scale applyTo: {surface contextPointer. offset x. offset y.}.
195 "============================================================================"
197 surface@(Cairo Context traits) font: font &italic: italic &bold: bold
199 italic `defaultsTo: False.
200 bold `defaultsTo: False.
201 Cairo Lib primitives select_font_face applyTo: {
202 surface contextPointer.
204 italic ifTrue: [1] ifFalse: [0].
205 bold ifTrue: [1] ifFalse: [0]}.
208 surface@(Cairo Context traits) fontSize: size
210 Cairo Lib primitives set_font_size applyTo: {surface contextPointer. size}.
213 surface@(Cairo Context traits) showText: text
215 Cairo Lib primitives show_text applyTo: {surface contextPointer. text}.