diff options
author | Mark Wielaard <mark@klomp.org> | 2006-03-18 20:14:54 +0000 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2006-03-18 20:14:54 +0000 |
commit | 42398a2cb14fa41fe355dd877168cf4cf161148a (patch) | |
tree | d7cb72d7116405fdfe5ddd893adc83b71822ff9e /native | |
parent | 72d3b4000c6328573a18cb14c13b11989c94e3ed (diff) | |
download | classpath-42398a2cb14fa41fe355dd877168cf4cf161148a.tar.gz |
* java/awt/Component.java (eventTypeEnabled): Handle
MouseEvent.MOUSE_WHEEL.
* gnu/java/awt/peer/gtk/GtkComponentPeer.java (postMouseWheelEvent):
New callback method.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(AWT_MOUSE_WHEEL): New constant.
(AWT_WHEEL_UNIT_SCROLL): Likewise.
(postMouseWheelEventID): New static variable.
(cp_gtk_component_init_jni): Record postMouseWheelEventID.
(cp_gtk_component_connect_mouse_signals): Connect scroll-event.
(button_number): Renamed to ...
(button_number_direction): variable to hold button number or scroll
direction.
(component_button_press_cb): Use button_number_direction.
(component_scroll_cb): New static callback function.
Diffstat (limited to 'native')
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c | 64 |
1 files changed, 59 insertions, 5 deletions
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c index 6839f684b..6805ae690 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c @@ -1,5 +1,5 @@ /* gtkcomponentpeer.c -- Native implementation of GtkComponentPeer - Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2002, 2004, 2006 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -67,6 +67,9 @@ exception statement from your version. */ #define AWT_MOUSE_ENTERED 504 #define AWT_MOUSE_EXITED 505 #define AWT_MOUSE_DRAGGED 506 +#define AWT_MOUSE_WHEEL 507 + +#define AWT_WHEEL_UNIT_SCROLL 0 #define AWT_FOCUS_GAINED 1004 #define AWT_FOCUS_LOST 1005 @@ -76,6 +79,7 @@ static GtkWidget *find_bg_color_widget (GtkWidget *widget); static GtkWidget *get_widget (GtkWidget *widget); static jmethodID postMouseEventID; +static jmethodID postMouseWheelEventID; static jmethodID setCursorID; static jmethodID postExposeEventID; static jmethodID postFocusEventID; @@ -91,6 +95,11 @@ cp_gtk_component_init_jni (void) postMouseEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkcomponentpeer, "postMouseEvent", "(IJIIIIZ)V"); + postMouseWheelEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), + gtkcomponentpeer, + "postMouseWheelEvent", + "(IJIIIIZIII)V"); + setCursorID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkcomponentpeer, "setCursor", "()V"); @@ -110,6 +119,9 @@ static gboolean component_button_release_cb (GtkWidget *widget, static gboolean component_motion_notify_cb (GtkWidget *widget, GdkEventMotion *event, jobject peer); +static gboolean component_scroll_cb (GtkWidget *widget, + GdkEventScroll *event, + jobject peer); static gboolean component_enter_notify_cb (GtkWidget *widget, GdkEventCrossing *event, jobject peer); @@ -932,6 +944,9 @@ cp_gtk_component_connect_mouse_signals (GObject *ptr, jobject *gref) g_signal_connect (G_OBJECT (ptr), "motion-notify-event", G_CALLBACK (component_motion_notify_cb), *gref); + + g_signal_connect (G_OBJECT (ptr), "scroll-event", + G_CALLBACK (component_scroll_cb), *gref); } void @@ -944,11 +959,11 @@ cp_gtk_component_connect_signals (GObject *ptr, jobject *gref) /* These variables are used to keep track of click counts. The AWT allows more than a triple click to occur but GTK doesn't report - more-than-triple clicks. */ + more-than-triple clicks. Also used for keeping track of scroll events.*/ static jint click_count = 1; static guint32 button_click_time = 0; static GdkWindow *button_window = NULL; -static guint button_number = -1; +static guint button_number_direction = -1; static int hasBeenDragged; static gboolean @@ -963,14 +978,14 @@ component_button_press_cb (GtkWidget *widget __attribute__((unused)), if ((event->time < (button_click_time + MULTI_CLICK_TIME)) && (event->window == button_window) - && (event->button == button_number)) + && (event->button == button_number_direction)) click_count++; else click_count = 1; button_click_time = event->time; button_window = event->window; - button_number = event->button; + button_number_direction = event->button; (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, postMouseEventID, @@ -1069,6 +1084,45 @@ component_motion_notify_cb (GtkWidget *widget __attribute__((unused)), } static gboolean +component_scroll_cb (GtkWidget *widget __attribute__((unused)), + GdkEventScroll *event, + jobject peer) +{ + int rotation; + /** Record click count for specific direction. */ + if ((event->time < (button_click_time + MULTI_CLICK_TIME)) + && (event->window == button_window) + && (event->direction == button_number_direction)) + click_count++; + else + click_count = 1; + + button_click_time = event->time; + button_window = event->window; + button_number_direction = event->direction; + + if (event->direction == GDK_SCROLL_UP + || event->direction == GDK_SCROLL_LEFT) + rotation = -1; + else + rotation = 1; + + (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, + postMouseWheelEventID, + AWT_MOUSE_WHEEL, + (jlong)event->time, + cp_gtk_state_to_awt_mods (event->state), + (jint)event->x, + (jint)event->y, + click_count, + JNI_FALSE, + AWT_WHEEL_UNIT_SCROLL, + 1 /* amount */, + rotation); + return FALSE; +} + +static gboolean component_enter_notify_cb (GtkWidget *widget __attribute__((unused)), GdkEventCrossing *event, jobject peer) |