From: Dmitry Kalyanov Date: Thu, 12 Nov 2009 21:35:47 +0000 (+0300) Subject: Add Gdk/Events X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=f928ba6ec4ec5b4f6cb300103fa06f24a362987a;p=cl-gtk2.git Add Gdk/Events --- diff --git a/gdk/cl-gtk2-gdk.asd b/gdk/cl-gtk2-gdk.asd index d64bdaa..66da341 100644 --- a/gdk/cl-gtk2-gdk.asd +++ b/gdk/cl-gtk2-gdk.asd @@ -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 index 0000000..8fd27f6 --- /dev/null +++ b/gdk/gdk.events.lisp @@ -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) diff --git a/gdk/gdk.objects.lisp b/gdk/gdk.objects.lisp index f3eb67a..88c6ae6 100644 --- a/gdk/gdk.objects.lisp +++ b/gdk/gdk.objects.lisp @@ -370,28 +370,6 @@ (: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") @@ -460,6 +438,18 @@ (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 diff --git a/gdk/gdk.windows.lisp b/gdk/gdk.windows.lisp index c352116..2dd57fd 100644 --- a/gdk/gdk.windows.lisp +++ b/gdk/gdk.windows.lisp @@ -499,15 +499,15 @@ (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)