diff options
Diffstat (limited to 'libs/gtkmm2ext')
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/pixscroller.h | 1 | ||||
-rw-r--r-- | libs/gtkmm2ext/pixscroller.cc | 27 |
2 files changed, 26 insertions, 2 deletions
diff --git a/libs/gtkmm2ext/gtkmm2ext/pixscroller.h b/libs/gtkmm2ext/gtkmm2ext/pixscroller.h index 4bc13ef173..8739478a8f 100644 --- a/libs/gtkmm2ext/gtkmm2ext/pixscroller.h +++ b/libs/gtkmm2ext/gtkmm2ext/pixscroller.h @@ -18,6 +18,7 @@ class PixScroller : public Gtk::DrawingArea bool on_motion_notify_event (GdkEventMotion*); bool on_button_press_event (GdkEventButton*); bool on_button_release_event (GdkEventButton*); + bool on_scroll_event (GdkEventScroll*); void on_size_request (GtkRequisition*); protected: diff --git a/libs/gtkmm2ext/pixscroller.cc b/libs/gtkmm2ext/pixscroller.cc index 813b4fd7f6..f459726f27 100644 --- a/libs/gtkmm2ext/pixscroller.cc +++ b/libs/gtkmm2ext/pixscroller.cc @@ -176,11 +176,34 @@ PixScroller::on_button_release_event (GdkEventButton* ev) } } break; - case 4: + default: + break; + } + return false; +} + +bool +PixScroller::on_scroll_event (GdkEventScroll* ev) +{ + double scale; + + if (ev->state & GDK_CONTROL_MASK) { + if (ev->state & GDK_MOD1_MASK) { + scale = 0.05; + } else { + scale = 0.1; + } + } else { + scale = 0.5; + } + + switch (ev->direction) { + + case GDK_SCROLL_UP: /* wheel up */ adj.set_value (adj.get_value() + (adj.get_page_increment() * scale)); break; - case 5: + case GDK_SCROLL_DOWN: /* wheel down */ adj.set_value (adj.get_value() - (adj.get_page_increment() * scale)); break; |