summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2006-12-19 15:42:42 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2006-12-19 15:42:42 +0000
commit434f3e6296f3b31bd6cca588f97f14c94c3af119 (patch)
tree47b5d7db960cbb0c0948a6cf36bed48f5baad266
parent8adae13ad3615c0e63129fa96d72102dae91b882 (diff)
make shift-scrollwheel work in any TimeAxisView
git-svn-id: svn://localhost/ardour2/trunk@1230 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/editor.cc13
-rw-r--r--gtk2_ardour/editor_canvas_events.cc4
-rw-r--r--gtk2_ardour/editor_mouse.cc2
-rw-r--r--gtk2_ardour/time_axis_view.cc22
-rw-r--r--gtk2_ardour/time_axis_view.h8
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.
*