diff options
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui2.cc | 25 | ||||
-rw-r--r-- | gtk2_ardour/audio_clock.cc | 81 | ||||
-rw-r--r-- | gtk2_ardour/audio_clock.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/editor.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_canvas_events.cc | 28 | ||||
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 17 | ||||
-rw-r--r-- | gtk2_ardour/time_axis_view.cc | 57 | ||||
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/pixscroller.h | 1 | ||||
-rw-r--r-- | libs/gtkmm2ext/pixscroller.cc | 27 |
11 files changed, 189 insertions, 55 deletions
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 9f4d8de8d9..bca41f6ca7 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -408,6 +408,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI gint shuttle_box_button_press (GdkEventButton*); gint shuttle_box_button_release (GdkEventButton*); + gint shuttle_box_scroll (GdkEventScroll*); gint shuttle_box_motion (GdkEventMotion*); gint shuttle_box_expose (GdkEventExpose*); gint mouse_shuttle (double x, bool force); diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index c55ba08f8f..47b457e594 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -306,11 +306,12 @@ ARDOUR_UI::setup_transport () ARDOUR_UI::instance()->tooltips().set_tip (speed_display_box, _("Current transport speed")); shuttle_box.set_flags (CAN_FOCUS); - shuttle_box.add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::POINTER_MOTION_MASK); + shuttle_box.add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK); shuttle_box.set_size_request (100, 15); shuttle_box.signal_button_press_event().connect (mem_fun(*this, &ARDOUR_UI::shuttle_box_button_press)); shuttle_box.signal_button_release_event().connect (mem_fun(*this, &ARDOUR_UI::shuttle_box_button_release)); + shuttle_box.signal_scroll_event().connect (mem_fun(*this, &ARDOUR_UI::shuttle_box_scroll)); shuttle_box.signal_motion_notify_event().connect (mem_fun(*this, &ARDOUR_UI::shuttle_box_motion)); shuttle_box.signal_expose_event().connect (mem_fun(*this, &ARDOUR_UI::shuttle_box_expose)); @@ -684,6 +685,28 @@ ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev) } gint +ARDOUR_UI::shuttle_box_scroll (GdkEventScroll* ev) +{ + if (!session) { + return true; + } + + switch (ev->direction) { + + case GDK_SCROLL_UP: + shuttle_fract += 0.005; + break; + case GDK_SCROLL_DOWN: + shuttle_fract -= 0.005; + break; + } + + use_shuttle_fract (true); + + return true; +} + +gint ARDOUR_UI::shuttle_box_motion (GdkEventMotion* ev) { if (!session || !shuttle_grabbed) { diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc index 8ecc160e1a..fc9b510753 100644 --- a/gtk2_ardour/audio_clock.cc +++ b/gtk2_ardour/audio_clock.cc @@ -186,7 +186,7 @@ AudioClock::AudioClock (const string& name, bool allow_edit, bool duration, bool stays disabled. */ - clock_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); + clock_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK); clock_base.signal_button_release_event().connect (bind (mem_fun (*this, &AudioClock::field_button_release_event), SMPTE_Hours)); if (editable) { @@ -201,17 +201,17 @@ AudioClock::setup_events () { clock_base.set_flags (Gtk::CAN_FOCUS); - hours_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK); - minutes_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK); - seconds_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK); - frames_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK); - bars_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK); - beats_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK); - ticks_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK); - ms_hours_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK); - ms_minutes_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK); - ms_seconds_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK); - audio_frames_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK); + hours_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK); + minutes_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK); + seconds_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK); + frames_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK); + bars_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK); + beats_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK); + ticks_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK); + ms_hours_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK); + ms_minutes_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK); + ms_seconds_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK); + audio_frames_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK); hours_ebox.set_flags (Gtk::CAN_FOCUS); minutes_ebox.set_flags (Gtk::CAN_FOCUS); @@ -261,6 +261,18 @@ AudioClock::setup_events () ms_minutes_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), MS_Minutes)); ms_seconds_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), MS_Seconds)); + hours_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), SMPTE_Hours)); + minutes_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), SMPTE_Minutes)); + seconds_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), SMPTE_Seconds)); + frames_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), SMPTE_Frames)); + audio_frames_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), AudioFrames)); + bars_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), Bars)); + beats_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), Beats)); + ticks_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), Ticks)); + ms_hours_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), MS_Hours)); + ms_minutes_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), MS_Minutes)); + ms_seconds_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), MS_Seconds)); + hours_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Hours)); minutes_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Minutes)); seconds_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Seconds)); @@ -985,6 +997,51 @@ AudioClock::field_button_press_event (GdkEventButton *ev, Field field) } bool +AudioClock::field_button_scroll_event (GdkEventScroll *ev, Field field) +{ + if (session == 0) return FALSE; + + jack_nframes_t frames = 0; + + switch (ev->direction) { + + case GDK_SCROLL_UP: + frames = get_frames (field); + if (frames != 0) { + if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) { + frames *= 10; + } + set (current_time() + frames, true); + ValueChanged (); /* EMIT_SIGNAL */ + } + break; + + case GDK_SCROLL_DOWN: + frames = get_frames (field); + if (frames != 0) { + if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) { + frames *= 10; + } + + if ((double)current_time() - (double)frames < 0.0) { + set (0, true); + } else { + set (current_time() - frames, true); + } + + ValueChanged (); /* EMIT_SIGNAL */ + } + break; + + default: + return FALSE; + break; + } + + return TRUE; +} + +bool AudioClock::field_motion_notify_event (GdkEventMotion *ev, Field field) { if (session == 0 || !dragging) { diff --git a/gtk2_ardour/audio_clock.h b/gtk2_ardour/audio_clock.h index dd06f7cf44..a0733e7de3 100644 --- a/gtk2_ardour/audio_clock.h +++ b/gtk2_ardour/audio_clock.h @@ -153,6 +153,7 @@ class AudioClock : public Gtk::HBox bool field_motion_notify_event (GdkEventMotion *ev, Field); bool field_button_press_event (GdkEventButton *ev, Field); bool field_button_release_event (GdkEventButton *ev, Field); + bool field_button_scroll_event (GdkEventScroll *ev, Field); bool field_key_release_event (GdkEventKey *, Field); bool field_focus_in_event (GdkEventFocus *, Field); bool field_focus_out_event (GdkEventFocus *, Field); diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 5cae99e369..2b0bbee1ae 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -966,7 +966,7 @@ Editor::control_scroll (float fraction) } else if ((fraction > 0.0f) && (max_frames - session->transport_frame() < step)) { target = (max_frames - (current_page_frames()*2)); // allow room for slop in where the PH is on the screen } else { - target = (session->transport_frame() + (fraction * current_page_frames())); + target = (session->transport_frame() + (jack_nframes_t)(fraction * current_page_frames())); } /* move visuals, we'll catch up with it later */ diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index 824b547938..256920d32f 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -49,7 +49,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) { int x, y; double wx, wy; - + switch (ev->direction) { case GDK_SCROLL_UP: if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) { @@ -72,6 +72,16 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) jack_nframes_t where = event_frame (&event, 0, 0); temporal_zoom_to_frame (true, where); return true; + } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) { + if (!current_stepping_trackview) { + step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500); + if (!(current_stepping_trackview = dynamic_cast<AudioTimeAxisView*> (trackview_by_y_position (ev->y)))) { + return false; + } + } + gettimeofday (&last_track_height_step_timestamp, 0); + current_stepping_trackview->step_height (true); + return true; } else { scroll_tracks_up_line (); return true; @@ -94,15 +104,15 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) temporal_zoom_to_frame (false, where); return true; } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) { - if (clicked_trackview) { - if (!current_stepping_trackview) { - step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500); - current_stepping_trackview = clicked_trackview; - } - gettimeofday (&last_track_height_step_timestamp, 0); - current_stepping_trackview->step_height (true); + if (!current_stepping_trackview) { + step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500); + if (!(current_stepping_trackview = dynamic_cast<AudioTimeAxisView*> (trackview_by_y_position (ev->y)))) { + return false; + } } - return true; + gettimeofday (&last_track_height_step_timestamp, 0); + current_stepping_trackview->step_height (false); + return true; } else { scroll_tracks_down_line (); return true; diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 4569b39182..efb6f9efe8 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -3609,11 +3609,13 @@ Editor::start_selection_grab (ArdourCanvas::Item* item, GdkEvent* event) void Editor::cancel_selection () { - for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { + for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { (*i)->hide_selection (); } + begin_reversible_command (_("cancel selection")); selection->clear (); clicked_selection = 0; + commit_reversible_command (); } void diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index e5e16381ab..192269eb15 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -984,7 +984,12 @@ Editor::scroll_tracks_down () cnt = (int) floor (prefix); } - vertical_adjustment.set_value (vertical_adjustment.get_value() + (cnt * vertical_adjustment.get_page_size())); + double vert_value = vertical_adjustment.get_value() + (cnt * + vertical_adjustment.get_page_size()); + if (vert_value > vertical_adjustment.get_upper() - canvas_height) { + vert_value = vertical_adjustment.get_upper() - canvas_height; + } + vertical_adjustment.set_value (vert_value); } void @@ -1006,15 +1011,21 @@ Editor::scroll_tracks_up () void Editor::scroll_tracks_down_line () { + Gtk::Adjustment* adj = edit_vscrollbar.get_adjustment(); - adj->set_value (adj->get_value() + 10); + double vert_value = adj->get_value() + 20; + + if (vert_value>adj->get_upper() - canvas_height) { + vert_value = adj->get_upper() - canvas_height; + } + adj->set_value (vert_value); } void Editor::scroll_tracks_up_line () { Gtk::Adjustment* adj = edit_vscrollbar.get_adjustment(); - adj->set_value (adj->get_value() - 10); + adj->set_value (adj->get_value() - 20); } /* ZOOM */ diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index fc467bee3d..1b6c1f390c 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -244,14 +244,14 @@ TimeAxisView::controls_ebox_scroll (GdkEventScroll* ev) { switch (ev->direction) { case GDK_SCROLL_UP: - if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) { + if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) { step_height (true); return true; } break; case GDK_SCROLL_DOWN: - if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) { + if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) { step_height (false); return true; } @@ -328,30 +328,35 @@ TimeAxisView::hide () void TimeAxisView::step_height (bool bigger) { - switch (height) { - case Largest: - if (!bigger) set_height (Large); - break; - case Large: - if (bigger) set_height (Largest); - else set_height (Larger); - break; - case Larger: - if (bigger) set_height (Large); - else set_height (Normal); - break; - case Normal: - if (bigger) set_height (Larger); - else set_height (Smaller); - break; - case Smaller: - if (bigger) set_height (Normal); - else set_height (Small); - break; - case Small: - if (bigger) set_height (Smaller); - break; - } + + if (height == hLargest) { + if (!bigger) set_height (Large); + return; + } + if (height == hLarge) { + if (bigger) set_height (Largest); + else set_height (Larger); + return; + } + if (height == hLarger) { + if (bigger) set_height (Large); + else set_height (Normal); + return; + } + if (height == hNormal) { + if (bigger) set_height (Larger); + else set_height (Smaller); + return; + } + if (height == hSmaller) { + if (bigger) set_height (Normal); + else set_height (Small); + return; + } + if (height == hSmall) { + if (bigger) set_height (Smaller); + return; + } } void 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; |