added cffi type translator for GdkAtom
[cl-gtk2.git] / gdk / gdk.objects.lisp
1 (in-package :gdk)
2
3 (define-g-enum "GdkGrabStatus" grab-status () :success :already-grabbed :invalid-time :not-viewable :frozen)
4
5 (define-g-object-class "GdkDisplay" display () ())
6
7 (define-g-object-class "GdkDisplayManager" display-manager ()
8   ((default-display display-manager-default-display "default-display" "GdkDisplay" t t)))
9
10 (define-g-object-class "GdkScreen" screen ()
11   ((font-options screen-font-options "font-options" "gpointer" t t)
12    (resolution screen-resolution "resolution" "gdouble" t t)))
13
14 (define-g-object-class "GdkGC" graphics-context () ())
15
16 (define-g-object-class "GdkDrawable" drawable () ())
17
18 (define-g-object-class "GdkPixmap" pixmap (:superclass drawable) ())
19
20 (define-g-object-class "GdkWindow" gdk-window (:superclass drawable) ())
21
22 (define-g-object-class "GdkKeymap" keymap () ())
23
24 (define-g-enum "GdkEventType" event-type ()
25   (:nothing -1) (:delete 0)
26   (:destroy 1) (:expose 2) (:motion-notify 3)
27   (:button-press 4) (:2button-press 5) (:3button-press 6)
28   (:button-release 7) (:key-press 8) (:key-release 9)
29   (:enter-notify 10) (:leave-notify 11) (:focus-change 12)
30   (:configure 13) (:map 14) (:unmap 15) (:property-notify 16)
31   (:selection-clear 17) (:selection-request 18)
32   (:selection-notify 19) (:proximity-in 20)
33   (:proximity-out 21) (:drag-enter 22) (:drag-leave 23)
34   (:drag-motion 24) (:drag-status 25) (:drop-start 26)
35   (:drop-finished 27) (:client-event 28)
36   (:visibility-notify 29) (:no-expose 30) (:scroll 31)
37   (:window-state 32) (:setting 33) (:owner-change 34)
38   (:grab-broken 35) (:damage 36)) 
39
40 (gobject::define-g-flags "GdkModifierType" modifier-type ()
41   (:shift-mask 1) (:lock-mask 2) (:control-mask 4)
42   (:mod1-mask 8) (:mod2-mask 16) (:mod3-mask 32)
43   (:mod4-mask 64) (:mod5-mask 128)
44   (:button1-mask 256) (:button2-mask 512)
45   (:button3-mask 1024) (:button4-mask 2048)
46   (:button5-mask 4096) (:super-mask 67108864)
47   (:hyper-mask 134217728) (:meta-mask 268435456)
48   (:release-mask 1073741824)
49   (:modifier-mask 1543512063))
50
51 (define-g-enum "GdkScrollDirection" scroll-direction ()
52   (:up 0) (:down 1)
53   (:left 2) (:right 3))
54
55 (define-g-enum "GdkVisibilityState" visibility-state ()
56   (:unobscured 0)
57   (:partial 1) (:fully-obscured 2))
58
59 (define-g-enum "GdkPropertyState" property-state ()
60   :new-value :delete)
61
62 (define-g-flags "GdkWindowState" window-state ()
63   (:withdrawn 1)
64   (:iconified 2) (:maximized 4) (:sticky 8) (:fullscreen 16)
65   (:above 32) (:below 64))
66
67 (define-g-enum "GdkSettingAction" setting-action ()
68   (:new 0) (:changed 1)
69   (:deleted 2))
70
71 (define-g-enum "GdkOwnerChange" owner-change ()
72   (:new-owner 0)
73   (:destroy 1) (:close 2))
74
75 (define-g-flags "GdkEventMask" event-mask ()
76   (:exposure-mask 2)
77   (:pointer-motion-mask 4) (:pointer-motion-hint-mask 8)
78   (:button-motion-mask 16) (:button1-motion-mask 32)
79   (:button2-motion-mask 64) (:button3-motion-mask 128)
80   (:button-press-mask 256) (:button-release-mask 512)
81   (:key-press-mask 1024) (:key-release-mask 2048)
82   (:enter-notify-mask 4096) (:leave-notify-mask 8192)
83   (:focus-change-mask 16384) (:structure-mask 32768)
84   (:property-change-mask 65536)
85   (:visibility-notify-mask 131072)
86   (:proximity-in-mask 262144) (:proximity-out-mask 524288)
87   (:substructure-mask 1048576) (:scroll-mask 2097152)
88   (:all-events-mask 4194302))
89
90 (define-g-boxed-class ("GdkEvent" event-struct) event ()
91   (type event-type)
92   (window (g-object gdk-window))
93   (send-event (:boolean :int8)))
94
95 (define-g-boxed-class nil event-key ((event type (:key-press :key-release)))
96   (time :uint32)
97   (state modifier-type)
98   (keyval :uint)
99   (length :int)
100   (string (:string :free-from-foreign nil :free-to-foreign nil))
101   (hardware-keycode :uint16)
102   (group :uint8)
103   (is-modifier :uint))
104
105 (define-g-boxed-class nil event-button ((event type (:button-press :2button-press :3button-press :button-release)))
106   (time :uint32)
107   (x :double)
108   (y :double)
109   (axes (fixed-array :double 2))
110   (state :uint)
111   (button :uint)
112   (device (g-object device))
113   (x-root :double)
114   (y-root :double))
115
116 (define-g-boxed-class nil event-scroll ((event type :scroll))
117   (time :uint32)
118   (x :double)
119   (y :double)
120   (state modifier-type)
121   (direction scroll-direction)
122   (device (g-object device))
123   (x-root :double)
124   (y-root :double))
125
126 (define-g-boxed-class nil event-motion ((event type :motion-notify))
127   (time :uint32)
128   (x :double)
129   (y :double)
130   (axes (fixed-array :double 2))
131   (state modifier-type)
132   (is-hint :int)
133   (device (g-object device))
134   (x-root :double)
135   (y-root :double))
136
137 (define-g-boxed-class "GdkRectangle" rectangle ()
138   (x :int)
139   (y :int)
140   (width :int)
141   (height :int))
142
143 (define-g-boxed-class nil event-expose ((event type :expose))
144   (area (g-boxed-inline rectangle))
145   (region :pointer)
146   (count :int))
147
148 (define-g-boxed-class nil event-visibility ((event type :visibility-notify))
149   (state visibility-state))
150
151 (define-g-boxed-class nil event-crossing ((event type (:enter-notify :leave-notify)))
152   (sub-window (g-object gdk-window))
153   (time :uint32)
154   (x :double)
155   (y :double)
156   (x-root :double)
157   (y-root :double))
158
159 (define-g-boxed-class nil event-focus ((event type :focus-change))
160   (in :int16))
161
162 (define-g-boxed-class nil event-configure ((event type :configure))
163   (x :int)
164   (y :int)
165   (width :int)
166   (height :int))
167
168 (defctype gdk-atom :pointer)
169
170 (define-foreign-type gdk-atom-as-string-type ()
171   ()
172   (:actual-type :pointer)
173   (:simple-parser gdk-atom-as-string))
174
175 (defmethod translate-from-foreign (value (type gdk-atom-as-string-type))
176   (gdk-atom-name value))
177
178 (defmethod translate-to-foreign (value (type gdk-atom-as-string-type))
179   (gdk-atom-intern value nil))
180
181 (define-g-boxed-class nil event-property ((event type :property-notify))
182   (atom gdk-atom)
183   (time :uint32)
184   (state property-state))
185
186 ;;;FIXME: Check correct type
187 (defctype native-window :uint32)
188
189 (define-g-boxed-class nil event-selection ((event type (:selection-clear :selection-notify :selection-request)))
190   (selection gdk-atom)
191   (target gdk-atom)
192   (property gdk-atom)
193   (time :uint32)
194   (requestor native-window))
195
196 (define-g-object-class "GdkDragContext" drag-context () ())
197
198 (define-g-boxed-class nil event-dnd ((event type (:drag-enter :drag-leave :drag-motion :drag-status :drop-start :drop-finished)))
199   (drag-context :pointer)
200   (time :uint32)
201   (x-root :short)
202   (y-root :short))
203
204 (define-g-boxed-class nil event-proximity ((event type (:proximity-in :proximity-out)))
205   (time :uint32)
206   (device (g-object device)))
207
208 (defcunion event-client-data-union
209   (b :char :count 20)
210   (s :short :count 10)
211   (l :long :count 5))
212
213 (define-g-boxed-class nil event-client ((event type :client-event))
214   (message-time gdk-atom)
215   (data-format :ushort)
216   (data event-client-data-union :parser 'event-client-data-union-parser :unparser 'event-client-data-union-unparser))
217
218 (defun event-client-data-union-parser (name pointer)
219   (declare (ignore name))
220   (ecase (foreign-slot-value pointer 'event-client 'data-format)
221     (8 (convert-from-foreign (foreign-slot-pointer pointer 'event-client 'data) '(fixed-array :uchar 20)))
222     (16 (convert-from-foreign (foreign-slot-pointer pointer 'event-client 'data) '(fixed-array :ushort 20)))
223     (32 (convert-from-foreign (foreign-slot-pointer pointer 'event-client 'data) '(fixed-array :ulong 20)))))
224
225 (defun event-client-data-union-unparser (name pointer object)
226   (declare (ignore name))
227   (ecase (event-client-data-format object)
228     (8 (loop
229           with array-ptr = (foreign-slot-pointer pointer 'event-client 'data)
230           for i from 0 below 20
231           do (setf (mem-aref array-ptr :uchar i) (aref (event-client-data object) i))))
232     (16 (loop
233           with array-ptr = (foreign-slot-pointer pointer 'event-client 'data)
234           for i from 0 below 20
235           do (setf (mem-aref array-ptr :ushort i) (aref (event-client-data object) i))))
236     (32 (loop
237           with array-ptr = (foreign-slot-pointer pointer 'event-client 'data)
238           for i from 0 below 20
239           do (setf (mem-aref array-ptr :ulong i) (aref (event-client-data object) i))))))
240
241 (define-g-boxed-class nil event-no-expose ((event type :no-expose)))
242
243 (define-g-boxed-class nil event-window-state ((event type :window-state))
244   (changed-mask window-state)
245   (new-window-state window-state))
246
247 (define-g-boxed-class nil event-setting ((event type :setting))
248   (action setting-action)
249   (name (:string :free-from-foreign nil :free-to-foreign nil)))
250
251 (define-g-boxed-class nil event-owner-change ((event type :owner-change))
252   (owner native-window)
253   (reason owner-change)
254   (selection gdk-atom)
255   (time :uint32)
256   (selection-time :uint32))
257
258 (define-g-boxed-class nil event-grab-broken ((event type :grab-broken))
259   (keyboard :boolean)
260   (implicit :boolean)
261   (grab-window (g-object gdk-window)))
262
263 (define-g-enum "GdkFontType" font-type () :font :fontset)
264
265 (define-g-boxed-class "GdkFont" font ()
266   (type font-type)
267   (ascent :int)
268   (descent :int))
269
270 (define-g-boxed-class "GdkColor" color ()
271   (pixel :uint32 :initform 0)
272   (red :uint16 :initform 0)
273   (green :uint16 :initform 0)
274   (blue :uint16 :initform 0))
275
276 (define-g-enum "GdkGravity" gravity ()
277   (:north-west 1)
278   :north
279   :north-east
280   :west
281   :center
282   :east
283   :south-west
284   :south
285   :south-east
286   :static)
287
288 (define-g-boxed-class "GdkGeometry" geometry ()
289   (min-width :int :initform 0)
290   (min-height :int :initform 0)
291   (max-width :int :initform 0)
292   (max-height :int :initform 0)
293   (base-width :int :initform 0)
294   (base-height :int :initform 0)
295   (width-increment :int :initform 0)
296   (height-increment :int :initform 0)
297   (min-aspect :double :initform 0.0d0)
298   (max-aspect :double :initform 0.0d0)
299   (gravity gravity :initform :north-west))
300
301 (define-g-flags "GdkWindowHints" window-hints ()
302   :pos :min-size :max-size :base-size :aspect
303   :resize-inc :win-gravity :user-pos :user-size)
304
305 (define-g-enum "GdkWindowEdge" window-edge ()
306   (:north-west 0) (:north 1) (:north-east 2) (:west 3)
307   (:east 4) (:south-west 5) (:south 6) (:south-east 7))
308
309 (define-g-object-class "GdkPixbuf" pixbuf ()
310     ((colorspace pixbuf-colorspace "colorspace" "GdkColorspace" t nil)
311      (n-channels pixbuf-n-channels "n-channels" "gint" t nil)
312      (has-alpha pixbuf-has-alpha "has-alpha" "gboolean" t nil)
313      (bits-per-sample pixbuf-bits-per-sample "bits-per-sample" "gint" t nil)
314      (width pixbuf-width "width" "gint" t nil)
315      (height pixbuf-height "height" "gint" t nil)
316      (rowstride pixbuf-rowstride "rowstride" "gint" t nil)
317      (pixels pixbuf-pixels "pixels" "gpointer" t nil)))
318
319 (define-g-object-class "GdkPixbufAnimation" pixbuf-animation ()
320     nil)