From 897d071e97bf87ef7f759b985b67331623314bf4 Mon Sep 17 00:00:00 2001 From: Nick Mainsbridge Date: Sat, 21 Jan 2006 00:11:03 +0000 Subject: [PATCH] fix setting sync point crash, reinstate keymouse zoom tentatively git-svn-id: svn://localhost/trunk/ardour2@284 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor.cc | 2 +- gtk2_ardour/editor_canvas_events.cc | 57 +++++++++++++++++++++++++++-- gtk2_ardour/regionview.cc | 21 +++-------- 3 files changed, 61 insertions(+), 19 deletions(-) diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 0ae2ad94fb..4e400601e8 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -870,7 +870,7 @@ Editor::set_frames_per_unit (double fpu) which will do the same updates. */ - if (session) { + if (session && !no_zoom_repos_update) { horizontal_adjustment.set_upper (session->current_end_frame() / frames_per_unit); } 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; diff --git a/gtk2_ardour/regionview.cc b/gtk2_ardour/regionview.cc index 672f0a5291..5da65dead7 100644 --- a/gtk2_ardour/regionview.cc +++ b/gtk2_ardour/regionview.cc @@ -875,24 +875,15 @@ AudioRegionView::region_sync_changed () Points points; - points = sync_mark->property_points().get_value(); + //points = sync_mark->property_points().get_value(); double offset = sync_offset / samples_per_unit; - - points[0].set_x(offset - ((sync_mark_width-1)/2)); - points[0].set_y(1); - - points[1].set_x(offset + (sync_mark_width-1)/2); - points[1].set_y(1); - - points[2].set_x(offset); - points[2].set_y(sync_mark_width - 1); - - points[3].set_x(offset - ((sync_mark_width-1)/2)); - points[3].set_y(1); - + points.push_back (Gnome::Art::Point (offset - ((sync_mark_width-1)/2), 1)); + points.push_back (Gnome::Art::Point (offset + ((sync_mark_width-1)/2), 1)); + points.push_back (Gnome::Art::Point (offset, sync_mark_width - 1)); + points.push_back (Gnome::Art::Point (offset - ((sync_mark_width-1)/2), 1)); + sync_mark->property_points().set_value (points); sync_mark->show(); - sync_mark->property_points() = points; } } -- 2.30.2