diff options
author | Sampo Savolainen <v2@iki.fi> | 2008-11-02 20:26:33 +0000 |
---|---|---|
committer | Sampo Savolainen <v2@iki.fi> | 2008-11-02 20:26:33 +0000 |
commit | 91b04d231921e6269b6bdb7189b40fae3cfaa3a5 (patch) | |
tree | 25e971c7464016df04e0ffc10c38103c6f037b00 | |
parent | 985d09e41159d2b6883800875ceeb55a7a702946 (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-- | SConstruct | 16 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 39 |
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 |