X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=src%2Fui%2Fdrawing_area.c;h=16448474091ed73e66c535cb5477e5ef3a713bbd;hb=HEAD;hp=491906e9002a7fbfd00e2fe3ca0a45f5d39222c3;hpb=53d9ddd557f5c7543a14402a2a01b0119eadbbfa;p=familia.git diff --git a/src/ui/drawing_area.c b/src/ui/drawing_area.c index 491906e..1644847 100644 --- a/src/ui/drawing_area.c +++ b/src/ui/drawing_area.c @@ -5,6 +5,7 @@ #include #include "../debug.h" +#include "../familia.h" #include "drawing_area.h" #include "../math/3d.h" #include "../graphics/constants.h" @@ -150,18 +151,46 @@ void drawing_area_unrealize (GtkWidget *widget, gpointer data) /* Code */ } -void drawing_area_event_scroll (GtkWidget *widget, GdkEventScroll *event, gpointer user_data) +/** + * The "scroll-event" signal handler. Responsible for correctly scrolling + * drawing area using mouse or touchpad. + */ +void drawing_area_event_scroll (GtkWidget *widget, + GdkEvent *event, FamiliaData *data) { + GtkAdjustment *adjustment = NULL; + gdouble value = 0; + gdouble step = 0; + assert(event->type == GDK_SCROLL); - switch(event->direction) { + switch(event->scroll.direction) { case GDK_SCROLL_UP: - camera_pos_y++; - gtk_widget_queue_draw(widget); + adjustment = data->vadjustment; + step = 1; break; case GDK_SCROLL_DOWN: - camera_pos_y--; - gtk_widget_queue_draw(widget); + adjustment = data->vadjustment; + step = -1; + break; + case GDK_SCROLL_LEFT: + adjustment = data->hadjustment; + step = -1; + break; + case GDK_SCROLL_RIGHT: + adjustment = data->hadjustment; + step = 1; break; + default: + break; + } + + if (adjustment != NULL) { + value = gtk_adjustment_get_value (adjustment); + step = step * gtk_adjustment_get_step_increment(adjustment); + value += step; + + gtk_adjustment_set_value (adjustment, value); + gtk_adjustment_value_changed (adjustment); } }