initial refactoring to prepare for grid lines in pianoroll
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 ();
|
||||
|
||||
|
||||
@@ -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*);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user