Add Gdk/Events
authorDmitry Kalyanov <Kalyanov.Dmitry@gmail.com>
Thu, 12 Nov 2009 21:35:47 +0000 (00:35 +0300)
committerDmitry Kalyanov <Kalyanov.Dmitry@gmail.com>
Thu, 12 Nov 2009 21:35:47 +0000 (00:35 +0300)
gdk/cl-gtk2-gdk.asd
gdk/gdk.events.lisp [new file with mode: 0644]
gdk/gdk.objects.lisp
gdk/gdk.windows.lisp

index d64bdaa..66da341 100644 (file)
@@ -19,5 +19,7 @@
                (:file "gdk.pixbufs")
                (:file "gdk.colors")
                (:file "gdk.visual")
-               (:file "gdk.cursor"))
+               (:file "gdk.cursor")
+               (:file "gdk.windows")
+               (:file "gdk.events"))
   :depends-on (:cl-gtk2-glib :cffi :cl-gtk2-pango))
\ No newline at end of file
diff --git a/gdk/gdk.events.lisp b/gdk/gdk.events.lisp
new file mode 100644 (file)
index 0000000..8fd27f6
--- /dev/null
@@ -0,0 +1,151 @@
+(in-package :gdk)
+
+(defconstant +gdk-current-time+ 0)
+
+(export '+gdk-current-time+)
+
+(defconstant +gdk-priority-redraw+ (+ glib:+g-priority-high-idle+ 20))
+
+(export '+gdk-priority-redraw+)
+
+(defcfun (events-pending "gdk_events_pending") :boolean)
+
+(export 'events-pending)
+
+(defcfun (event-peek "gdk_event_peek") (g-boxed-foreign event :return))
+
+(export 'event-peek)
+
+(defcfun (event-get "gdk_event_get") (g-boxed-foreign event :return))
+
+;; ignored
+;; GdkEvent*           gdk_event_get_graphics_expose       (GdkWindow *window);
+
+(defcfun (event-put "gdk_event_put") :void
+  (event (g-boxed-foreign event)))
+
+(export 'event-put)
+
+(defcfun (event-get-time "gdk_event_get_time") :uint32
+  (event (g-boxed-foreign event)))
+
+(export 'event-get-time)
+
+(defcfun gdk_event_get_state :boolean
+  (event (g-boxed-foreign event))
+  (state (:pointer modifier-type)))
+
+(defun event-get-state (event)
+  (with-foreign-object (state 'modifier-type)
+    (when (gdk_event_get_state event state)
+      (mem-ref state 'modifier-type))))
+
+(export 'event-get-state)
+
+(defcfun gdk_event_get_axis :boolean
+  (event (g-boxed-foreign event))
+  (axis-use axis-use)
+  (value (:pointer :double)))
+
+(defun event-get-axis (event axis)
+  (with-foreign-object (value :double)
+    (when (gdk_event_get_axis event axis value)
+      (mem-ref value :double))))
+
+(export 'event-get-axis)
+
+(defcfun gdk_event_get_coords :boolean
+  (event (g-boxed-foreign event))
+  (x-win (:pointer :double))
+  (y-win (:pointer :double)))
+
+(defun event-get-coords (event)
+  (with-foreign-objects ((x :double) (y :double))
+    (when (gdk_event_get_coords event x y)
+      (values (mem-ref x :double) (mem-ref y :double)))))
+
+(export 'event-get-coords)
+
+(defcfun gdk_event_get_root_coords :boolean
+  (event (g-boxed-foreign event))
+  (x-win (:pointer :double))
+  (y-win (:pointer :double)))
+
+(defun event-get-root-coords (event)
+  (with-foreign-objects ((x :double) (y :double))
+    (when (gdk_event_get_root_coords event x y)
+      (values (mem-ref x :double) (mem-ref y :double)))))
+
+(export 'event-get-root-coords)
+
+(defcfun (event-request-motions "gdk_event_request_motions") :void
+  (event (g-boxed-foreign event)))
+
+(export 'event-request-motions)
+
+(defcallback gdk-event-func-callback :void
+    ((event (g-boxed-foreign event)) (user-data :pointer))
+  (restart-case
+      (funcall (get-stable-pointer-value user-data) event)
+    (return-from-callback () nil)))
+
+(defcfun gdk_event_handler_set :void
+  (func :pointer)
+  (data :pointer)
+  (destroy-notify :pointer))
+
+(defun event-handler-set (fn)
+  (gdk_event_handler_set (callback gdk-event-func-callback)
+                         (allocate-stable-pointer fn)
+                         (callback stable-pointer-free-destroy-notify-callback)))
+
+(export 'event-handler-set)
+
+(defcfun (event-send-client-message "gdk_event_send_client_message") :boolean
+  (event (g-boxed-foreign event))
+  (window-id native-window))
+
+(export 'event-send-client-message)
+
+(defcfun (event-send-client-message-for-display "gdk_event_send_client_message_for_display") :boolean
+  (display (g-object display))
+  (event (g-boxed-foreign event))
+  (window-id native-window))
+
+(export 'event-send-client-message-for-display)
+
+(defcfun (event-send-client-message-to-all "gdk_event_send_clientmessage_toall") :void
+  (event (g-boxed-foreign event)))
+
+(export 'event-send-client-message-to-all)
+
+;; void                gdk_add_client_message_filter       (GdkAtom message_type,
+;;                                                          GdkFilterFunc func,
+;;                                                          gpointer data);
+
+(defcfun gdk-get-show-events :boolean)
+
+(export 'gdk-get-show-events)
+
+(defcfun gdk-set-show-events :void
+  (show-events :boolean))
+
+(export 'gdk-set-show-events)
+
+;; ignored:
+;; void                gdk_event_set_screen                (GdkEvent *event,
+;;                                                          GdkScreen *screen);
+;; GdkScreen *         gdk_event_get_screen                (const GdkEvent *event);
+
+(defcfun gdk_setting_get :boolean
+  (name :string)
+  (value (:pointer g-value)))
+
+(defun gdk-get-setting (name)
+  (with-foreign-object (value 'g-value)
+    (g-value-zero value)
+    (when (gdk_setting_get name value)
+      (prog1 (parse-g-value value)
+        (g-value-unset value)))))
+
+(export 'gdk-get-setting)
index f3eb67a..88c6ae6 100644 (file)
   (:translate 1)
   (:remove 2))
 
-(define-g-flags "GdkModifierType"
-    gdk-modifier-type
-    (:export t :type-initializer "gdk_modifier_type_get_type")
-  (:shift-mask 1)
-  (:lock-mask 2)
-  (:control-mask 4)
-  (:mod1-mask 8)
-  (:mod2-mask 16)
-  (:mod3-mask 32)
-  (:mod4-mask 64)
-  (:mod5-mask 128)
-  (:button1-mask 256)
-  (:button2-mask 512)
-  (:button3-mask 1024)
-  (:button4-mask 2048)
-  (:button5-mask 4096)
-  (:super-mask 67108864)
-  (:hyper-mask 134217728)
-  (:meta-mask 268435456)
-  (:release-mask 1073741824)
-  (:modifier-mask 1543512063))
-
 (define-g-flags "GdkWMDecoration"
     gdk-w-m-decoration
     (:export t :type-initializer "gdk_wm_decoration_get_type")
 (define-g-enum "GdkColorspace" colorspace ()
   :rgb)
 
+(define-g-enum "GdkAxisUse"
+    axis-use
+    (:export t :type-initializer "gdk_axis_use_get_type")
+  (:ignore 0)
+  (:x 1)
+  (:y 2)
+  (:pressure 3)
+  (:xtilt 4)
+  (:ytilt 5)
+  (:wheel 6)
+  (:last 7))
+
 (export 'cursor-type)
 
 (define-g-boxed-cstruct geometry nil
index c352116..2dd57fd 100644 (file)
   (window (g-object gdk-window))
   (x (:pointer :int))
   (y (:pointer :int))
-  (mask (:pointer gdk-modifier-type)))
+  (mask (:pointer modifier-type)))
 
 (defun gdk-window-get-pointer (window)
-  (with-foreign-objects ((x :int) (y :int) (mask 'gdk-modifier-type))
+  (with-foreign-objects ((x :int) (y :int) (mask 'modifier-type))
     (let ((w (gdk_window_get_pointer window x y mask)))
       (values w
               (mem-ref x :int)
               (mem-ref y :int)
-              (mem-ref mask 'gdk-modifier-type)))))
+              (mem-ref mask 'modifier-type)))))
 
 (export 'gdk-window-get-pointer)