diff --git a/gtk2_ardour/editing_context.cc b/gtk2_ardour/editing_context.cc index e781193d93..8913d14847 100644 --- a/gtk2_ardour/editing_context.cc +++ b/gtk2_ardour/editing_context.cc @@ -41,6 +41,7 @@ #include "editing_context.h" #include "editing_convert.h" #include "editor_drag.h" +#include "grid_lines.h" #include "gui_thread.h" #include "keyboard.h" #include "midi_region_view.h" @@ -166,6 +167,7 @@ EditingContext::EditingContext (std::string const & name) , entered_track (nullptr) , entered_regionview (nullptr) , clear_entered_track (false) + , grid_lines (nullptr) { using namespace Gtk::Menu_Helpers; @@ -3301,3 +3303,48 @@ EditingContext::load_shared_bindings () get_canvas()->set_data ("ardour-bindings", midi_bindings); get_canvas_viewport()->set_data ("ardour-bindings", shared_bindings); } + +void +EditingContext::drop_grid () +{ + hide_grid_lines (); + delete grid_lines; + grid_lines = nullptr; +} + +void +EditingContext::hide_grid_lines () +{ + if (grid_lines) { + grid_lines->hide(); + } +} + +void +EditingContext::maybe_draw_grid_lines (ArdourCanvas::Container* group) +{ + if ( _session == 0 ) { + return; + } + + if (!grid_lines) { + grid_lines = new GridLines (group, ArdourCanvas::LineSet::Vertical); + } + + grid_marks.clear(); + samplepos_t rightmost_sample = _leftmost_sample + current_page_samples(); + + if (grid_musical()) { + metric_get_bbt (grid_marks, _leftmost_sample, rightmost_sample, 12); + } else if (_grid_type== GridTypeTimecode) { + metric_get_timecode (grid_marks, _leftmost_sample, rightmost_sample, 12); + } else if (_grid_type == GridTypeCDFrame) { + metric_get_minsec (grid_marks, _leftmost_sample, rightmost_sample, 12); + } else if (_grid_type == GridTypeMinSec) { + metric_get_minsec (grid_marks, _leftmost_sample, rightmost_sample, 12); + } + + grid_lines->draw (grid_marks); + grid_lines->show(); +} + diff --git a/gtk2_ardour/editing_context.h b/gtk2_ardour/editing_context.h index a3508db970..6f54d53065 100644 --- a/gtk2_ardour/editing_context.h +++ b/gtk2_ardour/editing_context.h @@ -40,6 +40,8 @@ #include "ardour/session_handle.h" #include "ardour/types.h" +#include "canvas/ruler.h" + #include "widgets/ardour_button.h" #include "widgets/ardour_dropdown.h" #include "widgets/ardour_spacer.h" @@ -63,6 +65,7 @@ class CursorContext; class DragManager; class EditorCursor; class EditNoteDialog; +class GridLines; class MidiRegionView; class MidiView; class MouseCursors; @@ -760,6 +763,18 @@ class EditingContext : public ARDOUR::SessionHandlePtr, public AxisViewProvider bool clear_entered_track; + std::vector grid_marks; + GridLines* grid_lines; + + void drop_grid (); + void hide_grid_lines (); + void maybe_draw_grid_lines (ArdourCanvas::Container*); + + virtual void metric_get_timecode (std::vector&, int64_t, int64_t, gint) {} + virtual void metric_get_bbt (std::vector&, int64_t, int64_t, gint) {} + virtual void metric_get_samples (std::vector&, int64_t, int64_t, gint) {} + virtual void metric_get_minsec (std::vector&, int64_t, int64_t, gint) {} + virtual void set_entered_track (TimeAxisView*) {}; virtual std::pair max_zoom_extent() const = 0; diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 767cb7362c..45c476b4ac 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -317,7 +317,6 @@ Editor::Editor () , ignore_map_change (false) , _stationary_playhead (false) , _maximised (false) - , grid_lines (0) , global_rect_group (0) , time_line_group (0) , tempo_marker_menu (0) @@ -3422,9 +3421,9 @@ Editor::update_grid () if (bbt_ruler_scale != bbt_show_many) { compute_current_bbt_points (grid, _leftmost_sample, _leftmost_sample + current_page_samples()); } - maybe_draw_grid_lines (); + maybe_draw_grid_lines (time_line_group); } else { - maybe_draw_grid_lines (); + maybe_draw_grid_lines (time_line_group); } } @@ -5485,9 +5484,7 @@ Editor::session_going_away () remove_metric_marks (); clear_marker_display (); - hide_grid_lines (); - delete grid_lines; - grid_lines = 0; + drop_grid (); stop_step_editing (); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 95a5281f47..e351554ab2 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1639,15 +1639,9 @@ private: /// true if we are in fullscreen mode bool _maximised; - std::vector grid_marks; - GridLines* grid_lines; - ArdourCanvas::Container* global_rect_group; ArdourCanvas::Container* time_line_group; - void hide_grid_lines (); - void maybe_draw_grid_lines (); - void new_tempo_section (); void remove_tempo_marker (ArdourCanvas::Item*); diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc index 58906dc47a..432396e9a5 100644 --- a/gtk2_ardour/editor_tempodisplay.cc +++ b/gtk2_ardour/editor_tempodisplay.cc @@ -305,7 +305,7 @@ Editor::tempo_map_changed () update_tempo_based_rulers (); update_section_rects(); update_all_marker_lanes (); - maybe_draw_grid_lines (); + maybe_draw_grid_lines (time_line_group); } void @@ -433,42 +433,6 @@ Editor::compute_current_bbt_points (Temporal::TempoMapPoints& grid, samplepos_t } } -void -Editor::hide_grid_lines () -{ - if (grid_lines) { - grid_lines->hide(); - } -} - -void -Editor::maybe_draw_grid_lines () -{ - if ( _session == 0 ) { - return; - } - - if (grid_lines == 0) { - grid_lines = new GridLines (time_line_group, ArdourCanvas::LineSet::Vertical); - } - - grid_marks.clear(); - samplepos_t rightmost_sample = _leftmost_sample + current_page_samples(); - - if ( grid_musical() ) { - metric_get_bbt (grid_marks, _leftmost_sample, rightmost_sample, 12); - } else if (_grid_type== GridTypeTimecode) { - metric_get_timecode (grid_marks, _leftmost_sample, rightmost_sample, 12); - } else if (_grid_type == GridTypeCDFrame) { - metric_get_minsec (grid_marks, _leftmost_sample, rightmost_sample, 12); - } else if (_grid_type == GridTypeMinSec) { - metric_get_minsec (grid_marks, _leftmost_sample, rightmost_sample, 12); - } - - grid_lines->draw (grid_marks); - grid_lines->show(); -} - void Editor::mouse_add_new_tempo_event (timepos_t pos) { @@ -943,7 +907,7 @@ Editor::mid_tempo_change (MidTempoChanges what_changed) } update_tempo_based_rulers (); - maybe_draw_grid_lines (); + maybe_draw_grid_lines (time_line_group); if (!(what_changed & (MappingChanged|BBTChanged))) { /* Nothing changes in tracks when it is a tempo mapping diff --git a/gtk2_ardour/pianoroll.cc b/gtk2_ardour/pianoroll.cc index 25a3b328b0..edd312a6d3 100644 --- a/gtk2_ardour/pianoroll.cc +++ b/gtk2_ardour/pianoroll.cc @@ -413,6 +413,7 @@ Pianoroll::build_canvas () bbt_ruler->set_outline_color (text); CANVAS_DEBUG_NAME (bbt_ruler, "cue bbt ruler"); + data_group = new ArdourCanvas::Container (hv_scroll_group); CANVAS_DEBUG_NAME (data_group, "cue data group");