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