diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-03-24 19:46:45 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-03-24 19:46:45 -0400 |
commit | 95f81e2d24a51539f7f28228873d97c3e9465527 (patch) | |
tree | d782063d5cc9f18145479195886b78d326f18bea /gtk2_ardour | |
parent | 6f3ebba3b60963b01edabd1deffc4ddffead842f (diff) |
add optional arg to Editor::ensure_time_axis_view_is_visible() to "force" "make it visible as the top track" behaviour
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_canvas.cc | 15 | ||||
-rw-r--r-- | gtk2_ardour/editor_routes.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/public_editor.h | 7 |
4 files changed, 20 insertions, 8 deletions
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 3bc094d165..e93afebea3 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -178,6 +178,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void set_internal_edit (bool yn); bool toggle_internal_editing_from_double_click (GdkEvent*); + void _ensure_time_axis_view_is_visible (const TimeAxisView& tav, bool at_top); void foreach_time_axis_view (sigc::slot<void,TimeAxisView&>); void add_to_idle_resize (TimeAxisView*, int32_t); @@ -350,7 +351,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void show_window (); - void ensure_time_axis_view_is_visible (const TimeAxisView& tav); void scroll_tracks_down_line (); void scroll_tracks_up_line (); bool scroll_up_one_track (); diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index 2303f50ece..4c0ca25eb5 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -731,19 +731,26 @@ Editor::entered_track_canvas (GdkEventCrossing */*ev*/) } void -Editor::ensure_time_axis_view_is_visible (const TimeAxisView& tav) +Editor::_ensure_time_axis_view_is_visible (const TimeAxisView& tav, bool at_top) { double begin = tav.y_position(); - double v = vertical_adjustment.get_value (); - if (begin < v || begin + tav.current_height() > v + _visible_canvas_height) { + if (!at_top && (begin < v || begin + tav.current_height() > v + _visible_canvas_height)) { /* try to put the TimeAxisView roughly central */ if (begin >= _visible_canvas_height/2.0) { begin -= _visible_canvas_height/2.0; } - vertical_adjustment.set_value (begin); } + + /* Clamp the y pos so that we do not extend beyond the canvas full + * height. + */ + if (_full_canvas_height - begin < _visible_canvas_height){ + begin = _full_canvas_height - _visible_canvas_height; + } + + vertical_adjustment.set_value (begin); } /** Called when the main vertical_adjustment has changed */ diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc index c9514e81c3..38706a6525 100644 --- a/gtk2_ardour/editor_routes.cc +++ b/gtk2_ardour/editor_routes.cc @@ -1293,7 +1293,7 @@ EditorRoutes::button_press (GdkEventButton* ev) TimeAxisView *tv = row[_columns.tv]; if (tv) { - _editor->ensure_time_axis_view_is_visible (*tv); + _editor->ensure_time_axis_view_is_visible (*tv, true); } } @@ -1322,7 +1322,7 @@ EditorRoutes::selection_changed () } _editor->get_selection().set (selected); - _editor->ensure_time_axis_view_is_visible (*(selected.front())); + _editor->ensure_time_axis_view_is_visible (*(selected.front()), true); } else { _editor->get_selection().clear_tracks (); diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index 47d08af7f1..66f8ca9aa0 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -267,7 +267,9 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi virtual framecnt_t current_page_samples() const = 0; virtual double visible_canvas_height () const = 0; virtual void temporal_zoom_step (bool coarser) = 0; - virtual void ensure_time_axis_view_is_visible (const TimeAxisView& tav) = 0; + virtual void ensure_time_axis_view_is_visible (const TimeAxisView& tav, bool at_top = false) { + _ensure_time_axis_view_is_visible (tav, at_top); + } virtual void scroll_tracks_down_line () = 0; virtual void scroll_tracks_up_line () = 0; virtual bool scroll_down_one_track () = 0; @@ -409,6 +411,9 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi PBD::Signal0<void> SnapChanged; PBD::Signal0<void> MouseModeChanged; + + protected: + virtual void _ensure_time_axis_view_is_visible (const TimeAxisView& tav, bool at_top) = 0; }; #endif // __gtk_ardour_public_editor_h__ |