summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSampo Savolainen <v2@iki.fi>2008-11-02 20:26:33 +0000
committerSampo Savolainen <v2@iki.fi>2008-11-02 20:26:33 +0000
commit91b04d231921e6269b6bdb7189b40fae3cfaa3a5 (patch)
tree25e971c7464016df04e0ffc10c38103c6f037b00
parent985d09e41159d2b6883800875ceeb55a7a702946 (diff)
Ensure that the newly selected track is visible on the canvas when scrolling through tracks with prev/next. Plus a cleaner check for wiimote deps.
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@4082 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--SConstruct16
-rw-r--r--gtk2_ardour/editor.h1
-rw-r--r--gtk2_ardour/editor_ops.cc39
3 files changed, 52 insertions, 4 deletions
diff --git a/SConstruct b/SConstruct
index d841472956..e82bcdcca8 100644
--- a/SConstruct
+++ b/SConstruct
@@ -907,13 +907,21 @@ if conf.CheckHeader('linux/input.h'):
else:
have_linux_input = False
-# let's continue checking, check for libcwiid
-if not conf.CheckHeader('cwiid.h'):
- if env['WIIMOTE']:
+libraries['usb'] = conf.Finish ()
+
+#
+# Check for wiimote dependencies
+
+if env['WIIMOTE']:
+ wiimoteConf = env.Configure ( )
+ if not wiimoteConf.CheckHeader('cwiid.h'):
print 'WIIIMOTE configured but you are missing libcwiid!'
sys.exit(1)
+ if not wiimoteConf.CheckHeader('bluetooth/bluetooth.h'):
+ print 'WIIMOTE configured, but you are libbluetooth headers, which you need for libcwiid!'
+ sys.exit(1)
+ wiimoteConf.Finish()
-libraries['usb'] = conf.Finish ()
#
# Check for FLAC
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 7e0126bb04..137108dcdd 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -2128,6 +2128,7 @@ public:
bool entered_track_canvas (GdkEventCrossing*);
void set_entered_track (TimeAxisView*);
void set_entered_regionview (RegionView*);
+ void ensure_track_visible (TimeAxisView*);
gint left_automation_track ();
bool _new_regionviews_show_envelope;
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 43dd06780c..6c99f03bdd 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -5147,17 +5147,23 @@ Editor::select_next_route()
TimeAxisView* current = selection->tracks.front();
+ TimeAxisView* selected;
+
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
if (*i == current) {
++i;
if (i != track_views.end()) {
+ selected = (*i);
selection->set (*i);
} else {
+ selected = (*(track_views.begin()));
selection->set (*(track_views.begin()));
}
break;
}
}
+
+ ensure_track_visible(selected);
}
void
@@ -5170,17 +5176,50 @@ Editor::select_prev_route()
TimeAxisView* current = selection->tracks.front();
+ TimeAxisView* selected;
+
for (TrackViewList::reverse_iterator i = track_views.rbegin(); i != track_views.rend(); ++i) {
if (*i == current) {
++i;
if (i != track_views.rend()) {
+ selected = (*i);
selection->set (*i);
} else {
+ selected = *(track_views.rbegin());
selection->set (*(track_views.rbegin()));
}
break;
}
}
+
+ ensure_track_visible(selected);
+}
+
+void
+Editor::ensure_track_visible(TimeAxisView *track)
+{
+ double current_view_min_y = vertical_adjustment.get_value();
+ double current_view_max_y = vertical_adjustment.get_value() + vertical_adjustment.get_page_size() - canvas_timebars_vsize;
+
+ double track_min_y = track->y_position;
+ double track_max_y = track->y_position + (double)track->effective_height;
+
+ if (track_min_y >= current_view_min_y &&
+ track_max_y <= current_view_max_y) {
+ return;
+ }
+
+ double new_value;
+
+ if (track_min_y < current_view_min_y) {
+ // Track is above the current view
+ new_value = track_min_y;
+ } else {
+ // Track is below the current view
+ new_value = track->y_position + (double)track->effective_height + canvas_timebars_vsize - vertical_adjustment.get_page_size();
+ }
+
+ vertical_adjustment.set_value(new_value);
}
void