From 434f3e6296f3b31bd6cca588f97f14c94c3af119 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 19 Dec 2006 15:42:42 +0000 Subject: [PATCH] make shift-scrollwheel work in any TimeAxisView git-svn-id: svn://localhost/ardour2/trunk@1230 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor.cc | 13 +++---------- gtk2_ardour/editor_canvas_events.cc | 4 ++-- gtk2_ardour/editor_mouse.cc | 2 ++ gtk2_ardour/time_axis_view.cc | 22 ++++++++++++++++++++++ gtk2_ardour/time_axis_view.h | 8 ++++++++ 5 files changed, 37 insertions(+), 12 deletions(-) diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index ef507740ff..23995529e4 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -2284,18 +2284,11 @@ Editor::get_state () TimeAxisView * Editor::trackview_by_y_position (double y) { - TrackViewList::iterator iter; - TimeAxisView *tv; + for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) { - for (iter = track_views.begin(); iter != track_views.end(); ++iter) { + TimeAxisView *tv; - tv = *iter; - - if (tv->hidden()) { - continue; - } - - if (tv->y_position <= y && y < ((tv->y_position + tv->height + track_spacing))) { + if ((tv = (*iter)->covers_y_position (y)) != 0) { return tv; } } diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index 19c83e01cc..b2c7554a2a 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -76,7 +76,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) } 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 (trackview_by_y_position (ev->y)))) { + if (!(current_stepping_trackview = trackview_by_y_position (ev->y))) { return false; } } @@ -107,7 +107,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) } 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 (trackview_by_y_position (ev->y)))) { + if (!(current_stepping_trackview = trackview_by_y_position (ev->y))) { return false; } } diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 8868c1a88c..1df4910d8c 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -2705,6 +2705,8 @@ Editor::start_region_grab (ArdourCanvas::Item* item, GdkEvent* event) void Editor::start_region_copy_grab (ArdourCanvas::Item* item, GdkEvent* event) { + cerr << "start region copy grab, selected regions = " << selection->regions.size() << endl; + if (selection->regions.empty() || clicked_regionview == 0) { return; } diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index 17a011baa7..2909fa46e9 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -1067,3 +1067,25 @@ TimeAxisView::color_handler (ColorID id, uint32_t val) break; } } + +TimeAxisView* +TimeAxisView::covers_y_position (double y) +{ + if (hidden()) { + return 0; + } + + if (y_position <= y && y < (y_position + height)) { + return this; + } + + for (vector::iterator i = children.begin(); i != children.end(); ++i) { + TimeAxisView* tv; + + if ((tv = (*i)->covers_y_position (y)) != 0) { + return tv; + } + } + + return 0; +} diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h index 0700954a54..31a6e07a80 100644 --- a/gtk2_ardour/time_axis_view.h +++ b/gtk2_ardour/time_axis_view.h @@ -159,6 +159,14 @@ class TimeAxisView : public virtual AxisView virtual void set_height (TrackHeight h); void reset_height(); + /** + * Returns a TimeAxisView* if this object covers y, or one of its children does. + * If the covering object is a child axis, then the child is returned. + * Returns 0 otherwise. + */ + + TimeAxisView* covers_y_position (double y); + /** * Steps through the defined heights for this TrackView. * Sets bigger to true to step up in size, set to fals eot step smaller.