diff options
author | 2013-08-20 22:21:04 +0200 | |
---|---|---|
committer | 2013-08-21 19:58:40 +0200 | |
commit | cea06159836ce8fa3618564c93c5327da0c7eca9 (patch) | |
tree | 3c3ff49c454ecd7c97e442e93c8c528d5d5b4f8c /plugins | |
parent | 95a1a7cbc67c2fba61af35e2272f2ac72b3d3949 (diff) |
gtkui: gtk3 smooth scrolling
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/gtkui/ddblistview.c | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/plugins/gtkui/ddblistview.c b/plugins/gtkui/ddblistview.c index 19c826db..9ae0db19 100644 --- a/plugins/gtkui/ddblistview.c +++ b/plugins/gtkui/ddblistview.c @@ -828,28 +828,38 @@ ddb_listview_vscroll_event (GtkWidget *widget, gpointer user_data) { DdbListview *ps = DDB_LISTVIEW (g_object_get_data (G_OBJECT (widget), "owner")); + GdkEventScroll *ev = (GdkEventScroll*)event; - GtkWidget *range = ps->scrollbar; - GtkWidget *list = ps->list; -#if GTK_CHECK_VERSION(3,4,0) - if (((GdkEventScroll *)event)->direction == GDK_SCROLL_SMOOTH) { - gdouble x, y; - gboolean res = gdk_event_get_scroll_deltas(event, &x, &y); - trace ("scroll delta %f\n", (float)y); - } - else { - trace ("scrolldir: %d\n", (int)((GdkEventScroll *)event)->direction); - } -#endif + + GtkWidget *rangeh = ps->hscrollbar; + GtkWidget *rangev = ps->scrollbar; + + gdouble deltah = SCROLL_STEP * 2; + gdouble deltav = SCROLL_STEP * 2; + gdouble scrollh = gtk_range_get_value (GTK_RANGE (rangeh)); + gdouble scrollv = gtk_range_get_value (GTK_RANGE (rangev)); // pass event to scrollbar - int newscroll = gtk_range_get_value (GTK_RANGE (range)); if (ev->direction == GDK_SCROLL_UP) { - newscroll -= SCROLL_STEP * 2; + gtk_range_set_value (GTK_RANGE (rangev), scrollv - deltav); } else if (ev->direction == GDK_SCROLL_DOWN) { - newscroll += SCROLL_STEP * 2; + gtk_range_set_value (GTK_RANGE (rangev), scrollv + deltav); + } + else if (ev->direction == GDK_SCROLL_LEFT) { + gtk_range_set_value (GTK_RANGE (rangeh), scrollh - deltah); } - gtk_range_set_value (GTK_RANGE (range), newscroll); + else if (ev->direction == GDK_SCROLL_RIGHT) { + gtk_range_set_value (GTK_RANGE (rangeh), scrollh + deltah); + } +#if GTK_CHECK_VERSION(3,4,0) + else if (ev->direction == GDK_SCROLL_SMOOTH) { + gdouble x, y; + if (gdk_event_get_scroll_deltas(event, &x, &y)) { + gtk_range_set_value (GTK_RANGE (rangeh), scrollh + deltah * x); + gtk_range_set_value (GTK_RANGE (rangev), scrollv + deltav * y); + } + } +#endif return FALSE; } |