diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2006-12-19 15:42:42 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2006-12-19 15:42:42 +0000 |
commit | 434f3e6296f3b31bd6cca588f97f14c94c3af119 (patch) | |
tree | 47b5d7db960cbb0c0948a6cf36bed48f5baad266 /gtk2_ardour | |
parent | 8adae13ad3615c0e63129fa96d72102dae91b882 (diff) |
make shift-scrollwheel work in any TimeAxisView
git-svn-id: svn://localhost/ardour2/trunk@1230 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor.cc | 13 | ||||
-rw-r--r-- | gtk2_ardour/editor_canvas_events.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/time_axis_view.cc | 22 | ||||
-rw-r--r-- | 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 (iter = track_views.begin(); iter != track_views.end(); ++iter) { - - tv = *iter; + for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) { - if (tv->hidden()) { - continue; - } + TimeAxisView *tv; - 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<AudioTimeAxisView*> (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<AudioTimeAxisView*> (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<TimeAxisView*>::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 @@ -160,6 +160,14 @@ class TimeAxisView : public virtual AxisView 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. * |