[gtk+] gtkscalebutton: Use scroll event controller
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] gtkscalebutton: Use scroll event controller
- Date: Tue, 19 Sep 2017 17:20:07 +0000 (UTC)
commit 9a204921aec90a1dcc7e8d1502473e4a3c904ca2
Author: Carlos Garnacho <carlosg gnome org>
Date: Fri Sep 15 13:54:20 2017 +0200
gtkscalebutton: Use scroll event controller
gtk/gtkscalebutton.c | 70 ++++++++++++++++++++-----------------------------
1 files changed, 29 insertions(+), 41 deletions(-)
---
diff --git a/gtk/gtkscalebutton.c b/gtk/gtkscalebutton.c
index e9ef4f2..7e78735 100644
--- a/gtk/gtkscalebutton.c
+++ b/gtk/gtkscalebutton.c
@@ -115,6 +115,8 @@ struct _GtkScaleButtonPrivate
gchar **icon_list;
GtkAdjustment *adjustment; /* needed because it must be settable in init() */
+
+ GtkEventController *scroll_controller;
};
static void gtk_scale_button_constructed (GObject *object);
@@ -130,8 +132,6 @@ static void gtk_scale_button_get_property (GObject *object,
GParamSpec *pspec);
static void gtk_scale_button_set_orientation_private (GtkScaleButton *button,
GtkOrientation orientation);
-static gboolean gtk_scale_button_scroll (GtkWidget *widget,
- GdkEventScroll *event);
static void gtk_scale_button_clicked (GtkButton *button);
static void gtk_scale_button_popup (GtkWidget *widget);
static void gtk_scale_button_popdown (GtkWidget *widget);
@@ -149,6 +149,11 @@ static void cb_scale_value_changed (GtkRange *range,
static void cb_popup_mapped (GtkWidget *popup,
gpointer user_data);
+static void gtk_scale_button_scroll_controller_scroll (GtkEventControllerScroll *scroll,
+ gdouble dx,
+ gdouble dy,
+ GtkScaleButton *button);
+
G_DEFINE_TYPE_WITH_CODE (GtkScaleButton, gtk_scale_button, GTK_TYPE_BUTTON,
G_ADD_PRIVATE (GtkScaleButton)
G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE,
@@ -170,8 +175,6 @@ gtk_scale_button_class_init (GtkScaleButtonClass *klass)
gobject_class->set_property = gtk_scale_button_set_property;
gobject_class->get_property = gtk_scale_button_get_property;
- widget_class->scroll_event = gtk_scale_button_scroll;
-
button_class->clicked = gtk_scale_button_clicked;
/**
@@ -367,6 +370,13 @@ gtk_scale_button_init (GtkScaleButton *button)
context = gtk_widget_get_style_context (GTK_WIDGET (button));
gtk_style_context_add_class (context, "scale");
+
+ priv->scroll_controller =
+ gtk_event_controller_scroll_new (GTK_WIDGET (button),
+ GTK_EVENT_CONTROLLER_SCROLL_VERTICAL);
+ g_signal_connect (priv->scroll_controller, "scroll",
+ G_CALLBACK (gtk_scale_button_scroll_controller_scroll),
+ button);
}
static void
@@ -469,6 +479,8 @@ gtk_scale_button_finalize (GObject *object)
priv->adjustment = NULL;
}
+ g_object_unref (priv->scroll_controller);
+
G_OBJECT_CLASS (gtk_scale_button_parent_class)->finalize (object);
}
@@ -768,55 +780,31 @@ gtk_scale_button_set_orientation_private (GtkScaleButton *button,
}
}
-/*
- * button callbacks.
- */
-
-static gboolean
-gtk_scale_button_scroll (GtkWidget *widget,
- GdkEventScroll *event)
+static void
+gtk_scale_button_scroll_controller_scroll (GtkEventControllerScroll *scroll,
+ gdouble dx,
+ gdouble dy,
+ GtkScaleButton *button)
{
- GtkScaleButton *button;
GtkScaleButtonPrivate *priv;
GtkAdjustment *adjustment;
- GdkScrollDirection direction;
gdouble d;
- button = GTK_SCALE_BUTTON (widget);
priv = button->priv;
adjustment = priv->adjustment;
- if (gdk_event_get_event_type ((GdkEvent *) event) != GDK_SCROLL ||
- !gdk_event_get_scroll_direction ((GdkEvent *) event, &direction))
- return FALSE;
+ d = CLAMP (gtk_scale_button_get_value (button) -
+ (dy * gtk_adjustment_get_step_increment (adjustment)),
+ gtk_adjustment_get_lower (adjustment),
+ gtk_adjustment_get_upper (adjustment));
- d = gtk_scale_button_get_value (button);
- if (direction == GDK_SCROLL_UP)
- {
- d += gtk_adjustment_get_step_increment (adjustment);
- if (d > gtk_adjustment_get_upper (adjustment))
- d = gtk_adjustment_get_upper (adjustment);
- }
- else if (direction == GDK_SCROLL_DOWN)
- {
- d -= gtk_adjustment_get_step_increment (adjustment);
- if (d < gtk_adjustment_get_lower (adjustment))
- d = gtk_adjustment_get_lower (adjustment);
- }
- else if (direction == GDK_SCROLL_SMOOTH)
- {
- gdouble delta_y;
-
- gdk_event_get_scroll_deltas ((GdkEvent *) event, NULL, &delta_y);
- d -= delta_y * gtk_adjustment_get_step_increment (adjustment);
- d = CLAMP (d, gtk_adjustment_get_lower (adjustment),
- gtk_adjustment_get_upper (adjustment));
- }
gtk_scale_button_set_value (button, d);
-
- return TRUE;
}
+/*
+ * button callbacks.
+ */
+
static gboolean
gtk_scale_popup (GtkWidget *widget)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]