diff options
author | Nick Mainsbridge <beatroute@iprimus.com.au> | 2006-01-21 00:11:03 +0000 |
---|---|---|
committer | Nick Mainsbridge <beatroute@iprimus.com.au> | 2006-01-21 00:11:03 +0000 |
commit | 897d071e97bf87ef7f759b985b67331623314bf4 (patch) | |
tree | c392e777bd96cfd2d4465137e78ea471a0c8835e /gtk2_ardour/editor_canvas_events.cc | |
parent | a54169c198f9c81113239f6d346074af48220a3a (diff) |
fix setting sync point crash, reinstate keymouse zoom tentatively
git-svn-id: svn://localhost/trunk/ardour2@284 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_canvas_events.cc')
-rw-r--r-- | gtk2_ardour/editor_canvas_events.cc | 57 |
1 files changed, 54 insertions, 3 deletions
diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index ac4eafc9e6..824b547938 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -47,16 +47,67 @@ using namespace Gtk; bool 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)) { + //if (ev->state == GDK_CONTROL_MASK) { + /* XXX + the ev->x will be out of step with the canvas + if we're in mid zoom, so we have to get the damn mouse + pointer again + */ + track_canvas.get_pointer (x, y); + track_canvas.window_to_world (x, y, wx, wy); + wx += horizontal_adjustment.get_value(); + wy += vertical_adjustment.get_value(); + + GdkEvent event; + event.type = GDK_BUTTON_RELEASE; + event.button.x = wx; + event.button.y = wy; + + jack_nframes_t where = event_frame (&event, 0, 0); + temporal_zoom_to_frame (true, where); + return true; + } else { scroll_tracks_up_line (); return true; - break; - + } + break; case GDK_SCROLL_DOWN: + if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) { + //if (ev->state == GDK_CONTROL_MASK) { + track_canvas.get_pointer (x, y); + track_canvas.window_to_world (x, y, wx, wy); + wx += horizontal_adjustment.get_value(); + wy += vertical_adjustment.get_value(); + + GdkEvent event; + event.type = GDK_BUTTON_RELEASE; + event.button.x = wx; + event.button.y = wy; + + jack_nframes_t where = event_frame (&event, 0, 0); + 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); + } + return true; + } else { scroll_tracks_down_line (); return true; - + } + break; default: /* no left/right handling yet */ break; |