guile-gtk-general
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/4] Implement GdkScroll.


From: Jan Nieuwenhuizen
Subject: [PATCH 2/4] Implement GdkScroll.
Date: Sat, 19 Jul 2014 15:41:00 +0200

        * gtk/gnome/gw/gdk-support.c ("gdk-event->vector",
          "vector->gdk-event"): Implement GdkScroll.
---
 gtk/gnome/gtk/gdk-event.scm | 14 ++++++++++++++
 gtk/gnome/gw/gdk-support.c  | 47 ++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 58 insertions(+), 3 deletions(-)

diff --git a/gtk/gnome/gtk/gdk-event.scm b/gtk/gnome/gtk/gdk-event.scm
index 44a668d..bf9369d 100644
--- a/gtk/gnome/gtk/gdk-event.scm
+++ b/gtk/gnome/gtk/gdk-event.scm
@@ -100,6 +100,20 @@
 (define-gdk-event-accessor (expose) expose area 3
   val)
 
+(define-gdk-event-accessor (scroll) scroll time 3
+  val)
+(define-gdk-event-accessor (scroll) scroll x 4
+  val)
+(define-gdk-event-accessor (scroll) scroll y 5
+  val)
+(define-gdk-event-accessor (scroll) scroll modifiers 6
+  (gflags->symbol-list (make <gdk-modifier-type> #:value val)))
+(define-gdk-event-accessor (scroll) scroll direction 7
+  val)
+(define-gdk-event-accessor (scroll) scroll x-root 9
+  val)
+(define-gdk-event-accessor (scroll) scroll y-root 10
+  val)
 
 ;;
 ;; Update this list with the following bit of perl:
diff --git a/gtk/gnome/gw/gdk-support.c b/gtk/gnome/gw/gdk-support.c
index a383829..df28fe9 100644
--- a/gtk/gnome/gw/gdk-support.c
+++ b/gtk/gnome/gw/gdk-support.c
@@ -107,6 +107,29 @@ gdk_event_to_vector (GdkEvent *event)
             VSET (ret, 12, scm_from_int (ecrossing.state));
             return ret;
         }
+    case GDK_SCROLL:
+        {
+            GdkEventScroll escroll = event->scroll;
+            SCM ret;
+
+            /* 11 fields (we ignore axes) */
+            ret = scm_c_make_vector (11, SCM_BOOL_F);
+            
+            VSET (ret, 0, type);
+            VSET (ret, 1, scm_c_gtype_instance_to_scm (escroll.window));
+            VSET (ret, 2, escroll.send_event ? SCM_BOOL_T : SCM_BOOL_F);
+            VSET (ret, 3, scm_from_ulong (escroll.time));
+            VSET (ret, 4, scm_from_double (escroll.x));
+            VSET (ret, 5, scm_from_double (escroll.y));
+            VSET (ret, 6, scm_from_int (escroll.state));
+           SCM direction = scm_c_make_gvalue (GDK_TYPE_SCROLL_DIRECTION);
+           g_value_set_enum (scm_c_gvalue_peek_value (direction), 
escroll.direction);
+            VSET (ret, 7, direction);
+            VSET (ret, 8, scm_c_gtype_instance_to_scm (escroll.device));
+            VSET (ret, 9, scm_from_double (escroll.x_root));
+            VSET (ret, 10, scm_from_double (escroll.y_root));
+            return ret;
+        }
     case GDK_SELECTION_CLEAR:
     case GDK_SELECTION_NOTIFY:
     case GDK_SELECTION_REQUEST:
@@ -244,9 +267,27 @@ vector_to_gdk_event (SCM vec)
          break;
          
        case GDK_SCROLL:
-         event->scroll.time = scm_to_uint32 (scm_c_vector_ref (vec, 3));
-         event->scroll.state = scm_to_uint (scm_c_vector_ref (vec, 4));
-         break;
+         {
+           SCM d = scm_c_vector_ref (vec, 7);
+           GdkScrollDirection dir = GDK_SCROLL_UP;
+           if (scm_c_gvalue_holds (d, GDK_TYPE_SCROLL_DIRECTION))
+             {
+               GValue *gvalue = scm_c_gvalue_peek_value (d);
+               dir = g_value_get_enum (gvalue);
+             }
+           else if (scm_is_signed_integer (d, 0, GDK_EVENT_LAST))
+             dir = (GdkScrollDirection) scm_to_int (d);
+           
+           event->scroll.time = scm_to_uint32 (scm_c_vector_ref (vec, 3));
+           event->scroll.x = scm_to_double (scm_c_vector_ref (vec, 4));
+           event->scroll.y = scm_to_double (scm_c_vector_ref (vec, 5));
+           event->scroll.state = scm_to_uint (scm_c_vector_ref (vec, 6));
+           event->scroll.direction = dir;
+           event->scroll.device = NULL;
+           event->scroll.x_root = scm_to_double (scm_c_vector_ref (vec, 9));
+           event->scroll.y_root = scm_to_double (scm_c_vector_ref (vec, 10));
+           break;
+         }
          
        case GDK_EXPOSE:
          {
-- 
Jan Nieuwenhuizen <address@hidden> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | AvatarĀ®  http://AvatarAcademy.nl  




reply via email to

[Prev in Thread] Current Thread [Next in Thread]