initial refactoring to prepare for grid lines in pianoroll

This commit is contained in:
Paul Davis
2025-01-28 14:34:03 -07:00
parent 5bb814a281
commit ef6502d88d
6 changed files with 68 additions and 50 deletions

View File

@@ -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();
}

View File

@@ -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<ArdourCanvas::Ruler::Mark> 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<ArdourCanvas::Ruler::Mark>&, int64_t, int64_t, gint) {}
virtual void metric_get_bbt (std::vector<ArdourCanvas::Ruler::Mark>&, int64_t, int64_t, gint) {}
virtual void metric_get_samples (std::vector<ArdourCanvas::Ruler::Mark>&, int64_t, int64_t, gint) {}
virtual void metric_get_minsec (std::vector<ArdourCanvas::Ruler::Mark>&, int64_t, int64_t, gint) {}
virtual void set_entered_track (TimeAxisView*) {};
virtual std::pair<Temporal::timepos_t,Temporal::timepos_t> max_zoom_extent() const = 0;

View File

@@ -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 ();

View File

@@ -1639,15 +1639,9 @@ private:
/// true if we are in fullscreen mode
bool _maximised;
std::vector<ArdourCanvas::Ruler::Mark> 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*);

View File

@@ -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

View File

@@ -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");