summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-03-24 19:46:45 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2014-03-24 19:46:45 -0400
commit95f81e2d24a51539f7f28228873d97c3e9465527 (patch)
treed782063d5cc9f18145479195886b78d326f18bea /gtk2_ardour
parent6f3ebba3b60963b01edabd1deffc4ddffead842f (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.h2
-rw-r--r--gtk2_ardour/editor_canvas.cc15
-rw-r--r--gtk2_ardour/editor_routes.cc4
-rw-r--r--gtk2_ardour/public_editor.h7
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__