3 (define-g-enum "GdkGrabStatus" grab-status () :success :already-grabbed :invalid-time :not-viewable :frozen)
5 (defcenum crossing-mode :normal :grab :ungrab :gtk-grab :gtk-ungrab :state-changed)
6 (export 'crossing-mode)
8 (defcenum notify-type (:ancestor 0) :virtual :inferior :nonlinear :nonlinear-virtual :unknown)
11 (define-g-object-class "GdkDisplay" display () ())
13 (define-g-object-class "GdkDisplayManager" display-manager ()
14 ((default-display display-manager-default-display "default-display" "GdkDisplay" t t)))
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)))
20 (define-g-object-class "GdkGC" graphics-context () ())
22 (define-g-object-class "GdkDrawable" drawable () ())
24 (define-g-object-class "GdkPixmap" pixmap (:superclass drawable) ())
26 (define-g-object-class "GdkWindow" gdk-window (:superclass drawable) ())
28 (define-g-object-class "GdkKeymap" keymap () ())
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))
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))
60 (define-g-enum "GdkExtensionMode" gdk-extension-mode (:export t :type-initializer "gdk_extension_mode_get_type")
61 (:none 0) (:all 1) (:cursor 2))
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))
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))
80 (define-g-enum "GdkScrollDirection" scroll-direction ()
84 (define-g-enum "GdkVisibilityState" visibility-state ()
86 (:partial 1) (:fully-obscured 2))
88 (define-g-enum "GdkPropertyState" property-state ()
91 (define-g-flags "GdkWindowState" window-state ()
93 (:iconified 2) (:maximized 4) (:sticky 8) (:fullscreen 16)
94 (:above 32) (:below 64))
96 (define-g-enum "GdkSettingAction" setting-action ()
100 (define-g-enum "GdkOwnerChange" owner-change ()
102 (:destroy 1) (:close 2))
104 (define-g-flags "GdkEventMask" event-mask ()
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))
119 (define-g-enum "GdkFontType" font-type () :font :fontset)
121 (define-g-enum "GdkGravity" gravity ()
133 (define-g-boxed-cstruct rectangle "GdkRectangle"
136 (width :int :initform 0)
137 (height :int :initform 0))
139 (export (boxed-related-symbols 'rectangle))
141 (define-g-boxed-cstruct font "GdkFont"
142 (type font-type :initform :font)
143 (ascent :int :initform 0)
144 (descent :int :initform 0))
146 (export (boxed-related-symbols 'font))
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))
154 (export (boxed-related-symbols 'color))
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))
169 (export (boxed-related-symbols 'geometry))
171 (defctype gdk-atom :pointer)
173 (define-foreign-type gdk-atom-as-string-type ()
175 (:actual-type :pointer)
176 (:simple-parser gdk-atom-as-string))
178 (defmethod translate-from-foreign (value (type gdk-atom-as-string-type))
179 (gdk-atom-name value))
181 (defmethod translate-to-foreign (value (type gdk-atom-as-string-type))
182 (gdk-atom-intern value nil))
184 ;;;FIXME: Check correct type
185 (defctype native-window :uint32)
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)
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)."))
194 (define-parse-method fixed-array (element-type array-size)
195 (make-instance 'fixed-array :element-type element-type :array-size array-size))
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)))
202 for i from 0 below (fixed-array-array-size type)
203 do (setf (aref result i) (mem-aref ptr el-type i)))
206 (define-g-boxed-variant-cstruct event "GdkEvent"
208 (window (g-object gdk-window))
209 (send-event (:boolean :int8))
211 ((:key-press :key-release) event-key
213 (state modifier-type)
216 (string (:string :free-from-foreign nil
217 :free-to-foreign nil))
218 (hardware-keycode :uint16)
224 :button-release) event-button
228 (axes (fixed-array :double 2))
231 (device (g-object device))
234 ((:scroll) event-scroll
238 (state modifier-type)
239 (direction scroll-direction)
240 (device (g-object device))
243 ((:motion-notify) event-motion
247 (axes (fixed-array :double 2))
248 (state modifier-type)
250 (device (g-object device))
253 ((:expose) event-expose
254 (area rectangle :inline t)
257 ((:visibility-notify) event-visibility
258 (state visibility-state))
259 ((:enter-notify :leave-notify) event-crossing
260 (sub-window (g-object gdk-window))
270 ((:focus-change) event-focus
272 ((:configure) event-configure
277 ((:property-notify) event-property
280 (state property-state))
283 :selection-request) event-selection
288 (requestor native-window))
294 :drop-finished) event-dnd
295 (drag-context :pointer)
300 :proximity-out) event-proximity
302 (device (g-object device)))
303 ((:client-event) event-client
304 (message-time gdk-atom)
305 (data-format :ushort)
306 (:variant data-format
308 (data :uchar :count 20))
310 (data :ushort :count 10))
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)
325 (selection-time :uint32))
326 ((:grab-broken) event-grab-broken
329 (grab-window (g-object gdk-window)))))
331 (export (boxed-related-symbols 'event))
333 (define-g-object-class "GdkDragContext" drag-context () ())
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)
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))
343 (define-g-enum "GdkColorspace" colorspace ()
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)))
356 (define-g-object-class "GdkPixbufAnimation" pixbuf-animation ()