ardour has a new ruler

The mapping bar is where tempo mapping operations will take place
This commit is contained in:
Paul Davis 2023-02-26 12:26:11 -07:00
parent 38bb89c110
commit 18249f7395
20 changed files with 87 additions and 8 deletions

View File

@ -526,6 +526,7 @@
<menuitem action="toggle-samples-ruler"/>
<menuitem action="toggle-bbt-ruler"/>
<separator/>
<menuitem action="toggle-mapping-ruler"/>
<menuitem action="toggle-meter-ruler"/>
<menuitem action="toggle-tempo-ruler"/>
<menuitem action="toggle-range-ruler"/>

View File

@ -332,6 +332,7 @@ Editor::Editor ()
, timecode_label (_("Timecode"))
, samples_label (_("Samples"))
, tempo_label (_("Tempo"))
, mapping_label (_("Tempo Mapping"))
, meter_label (_("Time Signature"))
, mark_label (_("Location Markers"))
, range_mark_label (_("Range Markers"))
@ -543,6 +544,13 @@ Editor::Editor ()
tempo_label.hide();
tempo_label.set_no_show_all();
mapping_label.set_name ("EditorRulerLabel");
mapping_label.set_size_request (-1, (int)timebar_height);
mapping_label.set_alignment (1.0, 0.5);
mapping_label.set_padding (5,0);
mapping_label.hide();
mapping_label.set_no_show_all();
meter_label.set_name ("EditorRulerLabel");
meter_label.set_size_request (-1, (int)timebar_height);
meter_label.set_alignment (1.0, 0.5);

View File

@ -915,6 +915,7 @@ private:
Gtk::VBox time_bars_vbox;
ArdourCanvas::Container* tempo_group;
ArdourCanvas::Container* mapping_group;
ArdourCanvas::Container* meter_group;
ArdourCanvas::Container* marker_group;
ArdourCanvas::Container* range_marker_group;
@ -961,6 +962,7 @@ private:
Glib::RefPtr<Gtk::ToggleAction> ruler_bbt_action;
Glib::RefPtr<Gtk::ToggleAction> ruler_meter_action;
Glib::RefPtr<Gtk::ToggleAction> ruler_tempo_action;
Glib::RefPtr<Gtk::ToggleAction> ruler_mapping_action;
Glib::RefPtr<Gtk::ToggleAction> ruler_range_action;
Glib::RefPtr<Gtk::ToggleAction> ruler_loop_punch_action;
Glib::RefPtr<Gtk::ToggleAction> ruler_cd_marker_action;
@ -1049,6 +1051,7 @@ private:
Gtk::Menu* editor_ruler_menu;
ArdourCanvas::Rectangle* tempo_bar;
ArdourCanvas::Rectangle* mapping_bar;
ArdourCanvas::Rectangle* meter_bar;
ArdourCanvas::Rectangle* marker_bar;
ArdourCanvas::Rectangle* range_marker_bar;
@ -1064,6 +1067,7 @@ private:
Gtk::Label timecode_label;
Gtk::Label samples_label;
Gtk::Label tempo_label;
Gtk::Label mapping_label;
Gtk::Label meter_label;
Gtk::Label mark_label;
Gtk::Label range_mark_label;

View File

@ -177,6 +177,7 @@ Editor::register_actions ()
ActionManager::register_action (editor_menu_actions, X_("Subframes"), _("Subframes"));
ActionManager::register_action (editor_menu_actions, X_("SyncMenu"), _("Sync"));
ActionManager::register_action (editor_menu_actions, X_("TempoMenu"), _("Tempo"));
ActionManager::register_action (editor_menu_actions, X_("MappingMenu"), _("Mapping"));
ActionManager::register_action (editor_menu_actions, X_("Timecode"), _("Timecode fps"));
ActionManager::register_action (editor_menu_actions, X_("LayerDisplay"), _("Region Layers"));
@ -709,6 +710,7 @@ Editor::register_actions ()
ruler_bbt_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-bbt-ruler"), _("Bars:Beats"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility)));
ruler_meter_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-meter-ruler"), _("Time Signature"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility)));
ruler_tempo_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-tempo-ruler"), _("Tempo"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility)));
ruler_mapping_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-mapping-ruler"), _("Tempo Mapping"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility)));
ruler_range_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-range-ruler"), _("Range Markers"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility)));
ruler_loop_punch_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-loop-punch-ruler"), _("Loop/Punch Ranges"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility)));
ruler_cd_marker_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-cd-marker-ruler"), _("CD Markers"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility)));

View File

@ -142,6 +142,12 @@ Editor::initialize_canvas ()
_time_markers_group = new ArdourCanvas::Container (h_scroll_group);
CANVAS_DEBUG_NAME (_time_markers_group, "time bars");
/* Note that because of ascending-y-axis coordinates, this order is
* bottom-to-top. But further note that the actual order is set in
* ::update_ruler_visibility()
*/
cd_marker_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, 0.0));
CANVAS_DEBUG_NAME (cd_marker_group, "cd marker group");
/* the vide is temporarily placed a the same location as the
@ -159,6 +165,8 @@ Editor::initialize_canvas ()
CANVAS_DEBUG_NAME (tempo_group, "tempo group");
meter_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 5.0) + 1.0));
CANVAS_DEBUG_NAME (meter_group, "meter group");
mapping_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 6.0) + 1.0));
CANVAS_DEBUG_NAME (mapping_group, "mapping group");
float timebar_thickness = timebar_height; //was 4
float timebar_top = (timebar_height - timebar_thickness)/2;
@ -174,6 +182,12 @@ Editor::initialize_canvas ()
tempo_bar->set_outline(false);
tempo_bar->set_outline_what(ArdourCanvas::Rectangle::BOTTOM);
mapping_bar = new ArdourCanvas::Rectangle (mapping_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
CANVAS_DEBUG_NAME (tempo_bar, "Tempo Bar");
mapping_bar->set_fill(true);
mapping_bar->set_outline(false);
mapping_bar->set_outline_what(ArdourCanvas::Rectangle::BOTTOM);
range_marker_bar = new ArdourCanvas::Rectangle (range_marker_group, ArdourCanvas::Rect (0.0, timebar_top, ArdourCanvas::COORD_MAX, timebar_btm));
CANVAS_DEBUG_NAME (range_marker_bar, "Range Marker Bar");
@ -234,6 +248,7 @@ Editor::initialize_canvas ()
transport_punchout_line->hide();
tempo_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), tempo_bar, TempoBarItem, "tempo bar"));
mapping_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), tempo_bar, MappingBarItem, "mapping bar"));
meter_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), meter_bar, MeterBarItem, "meter bar"));
marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), marker_bar, MarkerBarItem, "marker bar"));
cd_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), cd_marker_bar, CdMarkerBarItem, "cd marker bar"));
@ -1041,6 +1056,8 @@ Editor::color_handler()
tempo_bar->set_fill_color (UIConfiguration::instance().color_mod ("tempo bar", "marker bar"));
mapping_bar->set_fill_color (UIConfiguration::instance().color_mod ("mapping bar", "marker bar"));
marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("marker bar", "marker bar"));
marker_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator"));

View File

@ -43,6 +43,7 @@ enum ItemType {
TempoMarkerItem,
MeterBarItem,
TempoBarItem,
MappingBarItem,
RegionViewNameHighlight,
RegionViewName,
StartSelectionTrimItem,

View File

@ -816,6 +816,9 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
return true;
break;
case MappingBarItem:
break;
case TempoBarItem:
case TempoCurveItem:
if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)
@ -1690,6 +1693,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
case TransportMarkerBarItem:
case CdMarkerBarItem:
case TempoBarItem:
case MappingBarItem:
case TempoCurveItem:
case MeterBarItem:
case VideoBarItem:
@ -1815,6 +1819,9 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
mouse_add_new_marker (where, Location::IsCueMarker);
}
return true;
case MappingBarItem:
return true;
case TempoBarItem:
case TempoCurveItem:
if (!_dragging_playhead && Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {

View File

@ -173,8 +173,9 @@ Editor::initialize_rulers ()
lab_children.push_back (Element(timecode_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(samples_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(bbt_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(meter_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(mapping_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(tempo_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(meter_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(range_mark_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(transport_mark_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(cd_mark_label, PACK_SHRINK, PACK_START));
@ -253,6 +254,11 @@ Editor::popup_ruler_menu (timepos_t const & where, ItemType t)
}
break;
case MappingBarItem:
ruler_items.push_back (MenuElem (_("New BBT Marker"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_add_new_tempo_event), where)));
ruler_items.push_back (MenuElem (_("New Tempo Marker"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_add_new_tempo_event), where)));
break;
case TempoBarItem:
case TempoCurveItem:
ruler_items.push_back (MenuElem (_("New Tempo"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_add_new_tempo_event), where)));
@ -328,6 +334,7 @@ Editor::store_ruler_visibility ()
node->set_property (X_("bbt"), ruler_bbt_action->get_active());
node->set_property (X_("meter"), ruler_meter_action->get_active());
node->set_property (X_("tempo"), ruler_tempo_action->get_active());
node->set_property (X_("mapping"), ruler_mapping_action->get_active());
node->set_property (X_("rangemarker"), ruler_range_action->get_active());
node->set_property (X_("transportmarker"), ruler_loop_punch_action->get_active());
node->set_property (X_("cdmarker"), ruler_cd_marker_action->get_active());
@ -362,6 +369,9 @@ Editor::restore_ruler_visibility ()
if (node->get_property ("tempo", yn)) {
ruler_tempo_action->set_active (yn);
}
if (node->get_property ("mapping", yn)) {
ruler_mapping_action->set_active (yn);
}
if (node->get_property ("meter", yn)) {
ruler_meter_action->set_active (yn);
}
@ -441,6 +451,7 @@ Editor::update_ruler_visibility ()
/* gtk update probs require this (damn) */
meter_label.hide();
tempo_label.hide();
mapping_label.hide();
range_mark_label.hide();
transport_mark_label.hide();
cd_mark_label.hide();
@ -509,19 +520,19 @@ Editor::update_ruler_visibility ()
bbt_label.hide();
}
if (ruler_meter_action->get_active()) {
old_unit_pos = meter_group->position().y;
if (ruler_mapping_action->get_active()) {
old_unit_pos = mapping_group->position().y;
if (tbpos != old_unit_pos) {
meter_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
mapping_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
}
meter_group->show();
meter_label.show();
mapping_group->show();
mapping_label.show();
tbpos += timebar_height;
tbgpos += timebar_height;
visible_timebars++;
} else {
meter_group->hide();
meter_label.hide();
mapping_group->hide();
mapping_label.hide();
}
if (ruler_tempo_action->get_active()) {
@ -539,6 +550,21 @@ Editor::update_ruler_visibility ()
tempo_label.hide();
}
if (ruler_meter_action->get_active()) {
old_unit_pos = meter_group->position().y;
if (tbpos != old_unit_pos) {
meter_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
}
meter_group->show();
meter_label.show();
tbpos += timebar_height;
tbgpos += timebar_height;
visible_timebars++;
} else {
meter_group->hide();
meter_label.hide();
}
if (ruler_range_action->get_active()) {
old_unit_pos = range_marker_group->position().y;
if (tbpos != old_unit_pos) {

View File

@ -161,6 +161,7 @@ setup_gtk_ardour_enums ()
REGISTER_ENUM (BBTMarkerItem);
REGISTER_ENUM (MeterBarItem);
REGISTER_ENUM (TempoBarItem);
REGISTER_ENUM (MappingBarItem);
REGISTER_ENUM (RegionViewNameHighlight);
REGISTER_ENUM (RegionViewName);
REGISTER_ENUM (StartSelectionTrimItem);

View File

@ -33,6 +33,7 @@ RulerDialog::RulerDialog ()
get_vbox()->pack_start (timecode_button);
get_vbox()->pack_start (samples_button);
get_vbox()->pack_start (bbt_button);
get_vbox()->pack_start (mapping_button);
get_vbox()->pack_start (meter_button);
get_vbox()->pack_start (tempo_button);
get_vbox()->pack_start (range_button);
@ -48,6 +49,7 @@ RulerDialog::RulerDialog ()
connect_action (timecode_button, "timecode-ruler");
connect_action (minsec_button, "minsec-ruler");
connect_action (bbt_button, "bbt-ruler");
connect_action (mapping_button, "mapping-ruler");
connect_action (tempo_button, "tempo-ruler");
connect_action (meter_button, "meter-ruler");
connect_action (loop_punch_button, "loop-punch-ruler");

View File

@ -40,6 +40,7 @@ private:
Gtk::CheckButton minsec_button;
Gtk::CheckButton bbt_button;
Gtk::CheckButton tempo_button;
Gtk::CheckButton mapping_button;
Gtk::CheckButton meter_button;
Gtk::CheckButton loop_punch_button;
Gtk::CheckButton range_button;

View File

@ -178,6 +178,7 @@
<ColorAlias name="lock button: fill active" alias="widget:bg"/>
<ColorAlias name="lock button: led active" alias="alert:red"/>
<ColorAlias name="lua action button: fill" alias="widget:bg"/>
<ColorAlias name="mapping bar" alias="neutral:background2"/>
<ColorAlias name="marker bar" alias="neutral:background2"/>
<ColorAlias name="marker bar separator" alias="theme:bg2"/>
<ColorAlias name="marker drag line" alias="theme:contrasting clock"/>

View File

@ -179,6 +179,7 @@
<ColorAlias name="lock button: fill active" alias="widget:bg"/>
<ColorAlias name="lock button: led active" alias="alert:red"/>
<ColorAlias name="lua action button: fill" alias="widget:bg"/>
<ColorAlias name="mapping bar" alias="neutral:background2"/>
<ColorAlias name="marker bar" alias="neutral:background2"/>
<ColorAlias name="marker bar separator" alias="theme:bg2"/>
<ColorAlias name="marker drag line" alias="theme:contrasting clock"/>

View File

@ -179,6 +179,7 @@
<ColorAlias name="lock button: fill active" alias="widget:bg"/>
<ColorAlias name="lock button: led active" alias="alert:red"/>
<ColorAlias name="lua action button: fill" alias="widget:bg"/>
<ColorAlias name="mapping bar" alias="neutral:background2"/>
<ColorAlias name="marker bar" alias="neutral:background2"/>
<ColorAlias name="marker bar separator" alias="theme:bg2"/>
<ColorAlias name="marker drag line" alias="theme:contrasting clock"/>

View File

@ -180,6 +180,7 @@
<ColorAlias name="lock button: led active" alias="alert:red"/>
<ColorAlias name="lua action button: fill" alias="widget:bg"/>
<ColorAlias name="marker bar" alias="neutral:foreground2"/>
<ColorAlias name="mapping bar" alias="neutral:background2"/>
<ColorAlias name="marker bar separator" alias="theme:bg2"/>
<ColorAlias name="marker drag line" alias="theme:contrasting clock"/>
<ColorAlias name="marker label" alias="neutral:backgroundest"/>

View File

@ -180,6 +180,7 @@
<ColorAlias name="lock button: fill active" alias="widget:bg"/>
<ColorAlias name="lock button: led active" alias="alert:red"/>
<ColorAlias name="lua action button: fill" alias="widget:bg"/>
<ColorAlias name="mapping bar" alias="neutral:background2"/>
<ColorAlias name="marker bar" alias="neutral:background2"/>
<ColorAlias name="marker bar separator" alias="theme:bg2"/>
<ColorAlias name="marker drag line" alias="theme:contrasting clock"/>

View File

@ -180,6 +180,7 @@
<ColorAlias name="lock button: fill active" alias="widget:bg"/>
<ColorAlias name="lock button: led active" alias="alert:red"/>
<ColorAlias name="lua action button: fill" alias="widget:bg"/>
<ColorAlias name="mapping bar" alias="neutral:background2"/>
<ColorAlias name="marker bar" alias="neutral:background2"/>
<ColorAlias name="marker bar separator" alias="theme:bg2"/>
<ColorAlias name="marker drag line" alias="theme:contrasting clock"/>

View File

@ -180,6 +180,7 @@
<ColorAlias name="lock button: fill active" alias="widget:bg"/>
<ColorAlias name="lock button: led active" alias="alert:red"/>
<ColorAlias name="lua action button: fill" alias="widget:bg"/>
<ColorAlias name="mapping bar" alias="neutral:background2"/>
<ColorAlias name="marker bar" alias="neutral:background2"/>
<ColorAlias name="marker bar separator" alias="theme:bg2"/>
<ColorAlias name="marker drag line" alias="theme:contrasting clock"/>

View File

@ -178,6 +178,7 @@
<ColorAlias name="lock button: fill active" alias="widget:bg"/>
<ColorAlias name="lock button: led active" alias="alert:red"/>
<ColorAlias name="lua action button: fill" alias="widget:bg"/>
<ColorAlias name="mapping bar" alias="neutral:background2"/>
<ColorAlias name="marker bar" alias="neutral:background2"/>
<ColorAlias name="marker bar separator" alias="theme:bg2"/>
<ColorAlias name="marker drag line" alias="theme:contrasting clock"/>

View File

@ -179,6 +179,7 @@
<ColorAlias name="lock button: fill active" alias="widget:bg"/>
<ColorAlias name="lock button: led active" alias="alert:red"/>
<ColorAlias name="lua action button: fill" alias="widget:bg"/>
<ColorAlias name="mapping bar" alias="neutral:background2"/>
<ColorAlias name="marker bar" alias="neutral:background2"/>
<ColorAlias name="marker bar separator" alias="theme:bg2"/>
<ColorAlias name="marker drag line" alias="theme:contrasting clock"/>