Marker Rulers: changes to match mini-timeline aesthetic

Highlight ruler lanes when you enter, instead of showing many lines
This commit is contained in:
Ben Loftis 2022-01-20 14:44:29 -06:00
parent 16c809986d
commit 60cbe57a6e
9 changed files with 268 additions and 120 deletions

View File

@ -160,34 +160,32 @@ Editor::initialize_canvas ()
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");
meter_bar = new ArdourCanvas::Rectangle (meter_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
float timebar_thickness = timebar_height; //was 4
float timebar_top = (timebar_height - timebar_thickness)/2;
float timebar_btm = timebar_height - timebar_top;
meter_bar = new ArdourCanvas::Rectangle (meter_group, ArdourCanvas::Rect (0.0, 0., ArdourCanvas::COORD_MAX, timebar_height));
CANVAS_DEBUG_NAME (meter_bar, "meter Bar");
meter_bar->set_outline_what (ArdourCanvas::Rectangle::BOTTOM);
meter_bar->set_outline(false);
tempo_bar = new ArdourCanvas::Rectangle (tempo_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
CANVAS_DEBUG_NAME (tempo_bar, "Tempo Bar");
tempo_bar->set_outline_what (ArdourCanvas::Rectangle::BOTTOM);
range_marker_bar = new ArdourCanvas::Rectangle (range_marker_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
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");
range_marker_bar->set_outline_what (ArdourCanvas::Rectangle::BOTTOM);
transport_marker_bar = new ArdourCanvas::Rectangle (transport_marker_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
transport_marker_bar = new ArdourCanvas::Rectangle (transport_marker_group, ArdourCanvas::Rect (0.0, timebar_top, ArdourCanvas::COORD_MAX, timebar_btm));
CANVAS_DEBUG_NAME (transport_marker_bar, "transport Marker Bar");
transport_marker_bar->set_outline_what (ArdourCanvas::Rectangle::BOTTOM);
marker_bar = new ArdourCanvas::Rectangle (marker_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
marker_bar = new ArdourCanvas::Rectangle (marker_group, ArdourCanvas::Rect (0.0, timebar_top, ArdourCanvas::COORD_MAX, timebar_btm));
CANVAS_DEBUG_NAME (marker_bar, "Marker Bar");
marker_bar->set_outline_what (ArdourCanvas::Rectangle::BOTTOM);
cd_marker_bar = new ArdourCanvas::Rectangle (cd_marker_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
cd_marker_bar = new ArdourCanvas::Rectangle (cd_marker_group, ArdourCanvas::Rect (0.0, timebar_top, ArdourCanvas::COORD_MAX, timebar_btm));
CANVAS_DEBUG_NAME (cd_marker_bar, "CD Marker Bar");
cd_marker_bar->set_outline_what (ArdourCanvas::Rectangle::BOTTOM);
cue_marker_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, 0.0));
cue_marker_bar = new ArdourCanvas::Rectangle (cue_marker_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
CANVAS_DEBUG_NAME (cd_marker_bar, "Cue Marker Bar");
cue_marker_bar->set_outline_what (ArdourCanvas::Rectangle::BOTTOM);
cue_marker_bar = new ArdourCanvas::Rectangle (cue_marker_group, ArdourCanvas::Rect (0.0, timebar_top, ArdourCanvas::COORD_MAX, timebar_btm));
CANVAS_DEBUG_NAME (cue_marker_bar, "Cue Marker Bar");
ARDOUR_UI::instance()->video_timeline = new VideoTimeLine(this, videotl_group, (timebar_height * videotl_bar_height));
@ -1028,26 +1026,14 @@ Editor::color_handler()
_playhead_cursor->set_color (UIConfiguration::instance().color ("play head"));
meter_bar->set_fill_color (UIConfiguration::instance().color_mod ("meter bar", "marker bar"));
meter_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator"));
tempo_bar->set_fill_color (UIConfiguration::instance().color_mod ("tempo bar", "marker bar"));
tempo_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator"));
marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("marker bar", "marker bar"));
marker_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator"));
cd_marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("cd marker bar", "marker bar"));
cd_marker_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator"));
cue_marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("cd marker bar", "marker bar"));
cue_marker_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator"));
range_marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("range marker bar", "marker bar"));
range_marker_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator"));
transport_marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("transport marker bar", "marker bar"));
transport_marker_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator"));
//these have no color (transparent) until moused-over
meter_bar->set_fill_color (0);
tempo_bar->set_fill_color (0);
cd_marker_bar->set_fill_color (0);
cue_marker_bar->set_fill_color (0);
range_marker_bar->set_fill_color (0);
marker_bar->set_fill_color (0);
transport_marker_bar->set_fill_color (0);
cd_marker_bar_drag_rect->set_fill_color (UIConfiguration::instance().color ("range drag bar rect"));
cd_marker_bar_drag_rect->set_outline_color (UIConfiguration::instance().color ("range drag bar rect"));

View File

@ -981,30 +981,105 @@ Editor::canvas_marker_event (GdkEvent *event, ArdourCanvas::Item* item, ArdourMa
bool
Editor::canvas_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* item)
{
switch (event->type) {
case GDK_ENTER_NOTIFY:
if (event->crossing.detail != GDK_NOTIFY_INFERIOR) {
marker_bar->set_fill_color (0xFFFFFF20);
}
break;
case GDK_LEAVE_NOTIFY:
if (event->crossing.detail != GDK_NOTIFY_INFERIOR) {
marker_bar->set_fill_color (0);
}
break;
default:
break;
};
return typed_event (item, event, MarkerBarItem);
}
bool
Editor::canvas_range_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* item)
{
switch (event->type) {
case GDK_ENTER_NOTIFY:
if (event->crossing.detail != GDK_NOTIFY_INFERIOR) {
range_marker_bar->set_fill_color (0xFFFFFF20);
}
break;
case GDK_LEAVE_NOTIFY:
if (event->crossing.detail != GDK_NOTIFY_INFERIOR) {
range_marker_bar->set_fill_color (0);
}
break;
default:
break;
};
return typed_event (item, event, RangeMarkerBarItem);
}
bool
Editor::canvas_transport_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* item)
{
switch (event->type) {
case GDK_ENTER_NOTIFY:
if (event->crossing.detail != GDK_NOTIFY_INFERIOR) {
transport_marker_bar->set_fill_color (0xFFFFFF20);
}
break;
case GDK_LEAVE_NOTIFY:
if (event->crossing.detail != GDK_NOTIFY_INFERIOR) {
transport_marker_bar->set_fill_color (0);
}
break;
default:
break;
};
return typed_event (item, event, TransportMarkerBarItem);
}
bool
Editor::canvas_cd_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* item)
{
switch (event->type) {
case GDK_ENTER_NOTIFY:
if (event->crossing.detail != GDK_NOTIFY_INFERIOR) {
cd_marker_bar->set_fill_color (0xFFFFFF20); //TODO: theme these
}
break;
case GDK_LEAVE_NOTIFY:
if (event->crossing.detail != GDK_NOTIFY_INFERIOR) {
cd_marker_bar->set_fill_color (0);
}
break;
default:
break;
};
return typed_event (item, event, CdMarkerBarItem);
}
bool
Editor::canvas_cue_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* item)
{
switch (event->type) {
case GDK_ENTER_NOTIFY:
if (event->crossing.detail != GDK_NOTIFY_INFERIOR) {
cue_marker_bar->set_fill_color (0xFFFFFF20);
}
break;
case GDK_LEAVE_NOTIFY:
if (event->crossing.detail != GDK_NOTIFY_INFERIOR) {
cue_marker_bar->set_fill_color (0);
}
break;
default:
break;
};
return typed_event (item, event, CueMarkerBarItem);
}
@ -1099,12 +1174,42 @@ Editor::canvas_ruler_event (GdkEvent *event, ArdourCanvas::Item* item, ItemType
bool
Editor::canvas_tempo_bar_event (GdkEvent *event, ArdourCanvas::Item* item)
{
switch (event->type) {
case GDK_ENTER_NOTIFY:
if (event->crossing.detail != GDK_NOTIFY_INFERIOR) {
tempo_bar->set_fill_color (0xFFFFFF20); //TODO: theme these
}
break;
case GDK_LEAVE_NOTIFY:
if (event->crossing.detail != GDK_NOTIFY_INFERIOR) {
tempo_bar->set_fill_color (0);
}
break;
default:
break;
};
return typed_event (item, event, TempoBarItem);
}
bool
Editor::canvas_meter_bar_event (GdkEvent *event, ArdourCanvas::Item* item)
{
switch (event->type) {
case GDK_ENTER_NOTIFY:
if (event->crossing.detail != GDK_NOTIFY_INFERIOR) {
meter_bar->set_fill_color (0xFFFFFF20); //TODO: theme these
}
break;
case GDK_LEAVE_NOTIFY:
if (event->crossing.detail != GDK_NOTIFY_INFERIOR) {
meter_bar->set_fill_color (0);
}
break;
default:
break;
};
return typed_event (item, event, MeterBarItem);
}

View File

@ -123,6 +123,7 @@ Editor::add_new_location_internal (Location* location)
group = cd_marker_group;
} else if (location->is_cue_marker() && ruler_cue_marker_action->get_active()) {
lam->start = new ArdourMarker (*this, *cue_marker_group, color, location->name(), ArdourMarker::Cue, location->start());
lam->start->set_cue_index(location->cue_id());
group = cue_marker_group;
} else {
lam->start = new ArdourMarker (*this, *marker_group, color, location->name(), ArdourMarker::Mark, location->start());

View File

@ -1762,7 +1762,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
case CueMarkerBarItem:
if (!_dragging_playhead) {
/* if we get here then a dragged range wasn't done */
snap_to_with_modifier (where, event, Temporal::RoundNearest, SnapToGrid_Scaled);
snap_to_with_modifier (where, event, Temporal::RoundNearest, SnapToGrid_Scaled); //TODO: force to-measure?
mouse_add_new_marker (where, Location::IsCueMarker);
}
return true;

View File

@ -178,8 +178,8 @@ Editor::initialize_rulers ()
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));
lab_children.push_back (Element(cue_mark_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(mark_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(cue_mark_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(videotl_label, PACK_SHRINK, PACK_START));
/* 1 event handler to bind them all ... */
@ -538,6 +538,8 @@ Editor::update_ruler_visibility ()
tempo_label.hide();
}
ArdourCanvas::Rectangle *last_marker_bar = 0;
if (ruler_range_action->get_active()) {
old_unit_pos = range_marker_group->position().y;
if (tbpos != old_unit_pos) {
@ -546,6 +548,9 @@ Editor::update_ruler_visibility ()
range_marker_group->show();
range_mark_label.show();
range_marker_bar->set_outline(false);
last_marker_bar = range_marker_bar;
tbpos += timebar_height;
tbgpos += timebar_height;
visible_timebars++;
@ -561,6 +566,10 @@ Editor::update_ruler_visibility ()
}
transport_marker_group->show();
transport_mark_label.show();
transport_marker_bar->set_outline(false);
last_marker_bar = transport_marker_bar;
tbpos += timebar_height;
tbgpos += timebar_height;
visible_timebars++;
@ -576,6 +585,10 @@ Editor::update_ruler_visibility ()
}
cd_marker_group->show();
cd_mark_label.show();
cd_marker_bar->set_outline(false);
last_marker_bar = cd_marker_bar;
tbpos += timebar_height;
tbgpos += timebar_height;
visible_timebars++;
@ -588,6 +601,25 @@ Editor::update_ruler_visibility ()
update_cd_marker_display();
}
if (ruler_marker_action->get_active()) {
old_unit_pos = marker_group->position().y;
if (tbpos != old_unit_pos) {
marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
}
marker_group->show();
mark_label.show();
marker_bar->set_outline(false);
last_marker_bar = marker_bar;
tbpos += timebar_height;
tbgpos += timebar_height;
visible_timebars++;
} else {
marker_group->hide();
mark_label.hide();
}
if (ruler_cue_marker_action->get_active()) {
old_unit_pos = cue_marker_group->position().y;
if (tbpos != old_unit_pos) {
@ -595,6 +627,10 @@ Editor::update_ruler_visibility ()
}
cue_marker_group->show();
cue_mark_label.show();
cue_marker_bar->set_outline(false);
last_marker_bar = cue_marker_bar;
tbpos += timebar_height;
tbgpos += timebar_height;
visible_timebars++;
@ -607,19 +643,10 @@ Editor::update_ruler_visibility ()
update_cue_marker_display();
}
if (ruler_marker_action->get_active()) {
old_unit_pos = marker_group->position().y;
if (tbpos != old_unit_pos) {
marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
}
marker_group->show();
mark_label.show();
tbpos += timebar_height;
tbgpos += timebar_height;
visible_timebars++;
} else {
marker_group->hide();
mark_label.hide();
//the bottom ruler needs a black outline to separate it from the editor canvas
if ( last_marker_bar ) {
last_marker_bar->set_outline(true);
last_marker_bar->set_outline_what(ArdourCanvas::Rectangle::BOTTOM);
}
if (ruler_video_action->get_active()) {

View File

@ -90,11 +90,13 @@ ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Item& parent, guint3
, _label_offset (0)
, _line_height (-1)
, _region_view (rv)
, _cue_index (-1)
{
const double scale = UIConfiguration::instance ().get_ui_scale ();
const double MH = marker_height - .5;
const double M3 = std::max(1.f, rintf(3.f * UIConfiguration::instance().get_ui_scale()));
const double M6 = std::max(2.f, rintf(6.f * UIConfiguration::instance().get_ui_scale()));
const double M3 = std::max(1.f, rintf(3.f * scale));
const double M6 = std::max(2.f, rintf(6.f * scale));
/* Shapes we use:
*
@ -184,8 +186,8 @@ ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Item& parent, guint3
points->push_back (ArdourCanvas::Duple (0.0, MH * .4));
points->push_back (ArdourCanvas::Duple (0.0, 0.0));
_shift = 3;
_label_offset = 10.0;
_shift = 3 * scale;
_label_offset = 4.0 * scale;
break;
case Tempo:
@ -198,8 +200,8 @@ ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Item& parent, guint3
points->push_back (ArdourCanvas::Duple (0.0, MH * .6));
points->push_back (ArdourCanvas::Duple ( M3, 0.0));
_shift = 3;
_label_offset = 8.0;
_shift = 3 * scale;
_label_offset = 8.0 * scale;
break;
case SessionStart:
@ -210,8 +212,8 @@ ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Item& parent, guint3
points->push_back (ArdourCanvas::Duple ( 0.0, MH));
points->push_back (ArdourCanvas::Duple ( 0.0, 0.0));
_shift = 0;
_label_offset = 8.0;
_shift = 0 * scale;
_label_offset = 8.0 * scale;
break;
case SessionEnd:
@ -223,7 +225,7 @@ ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Item& parent, guint3
points->push_back (ArdourCanvas::Duple ( M6, 0.0));
_shift = M6;
_label_offset = 0.0;
_label_offset = 0.0 * scale;
break;
case LoopStart:
@ -233,7 +235,7 @@ ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Item& parent, guint3
points->push_back (ArdourCanvas::Duple (0.0, MH));
points->push_back (ArdourCanvas::Duple (0.0, 0.0));
_shift = 0;
_shift = 0 * scale;
_label_offset = MH;
break;
@ -245,7 +247,7 @@ ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Item& parent, guint3
points->push_back (ArdourCanvas::Duple (MH, 0.0));
_shift = MH;
_label_offset = 0.0;
_label_offset = 0.0 * scale;
break;
case PunchIn:
@ -255,7 +257,7 @@ ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Item& parent, guint3
points->push_back (ArdourCanvas::Duple (0.0, MH));
points->push_back (ArdourCanvas::Duple (0.0, 0.0));
_shift = 0;
_shift = 0 * scale;
_label_offset = MH;
break;
@ -267,23 +269,15 @@ ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Item& parent, guint3
points->push_back (ArdourCanvas::Duple (0.0, 0.0));
_shift = MH;
_label_offset = 0.0;
_label_offset = 0.0 * scale;
break;
case Cue:
/* ben: new shape needed here */
points = new ArdourCanvas::Points ();
points->push_back (ArdourCanvas::Duple (0.0, 0.0));
points->push_back (ArdourCanvas::Duple ( M6, 0.0));
points->push_back (ArdourCanvas::Duple ( M6, MH * .4));
points->push_back (ArdourCanvas::Duple ( M3, MH));
points->push_back (ArdourCanvas::Duple (0.0, MH * .4));
points->push_back (ArdourCanvas::Duple (0.0, 0.0));
_shift = 3;
_label_offset = 10.0;
_shift = MH/2;
_label_offset = 2.0 * scale;
break;
}
_position = pos;
@ -296,21 +290,36 @@ ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Item& parent, guint3
#endif
if (type != RegionCue) {
_name_background = new ArdourCanvas::Rectangle (group);
_name_flag = new ArdourCanvas::Rectangle (group);
#ifdef CANVAS_DEBUG
_name_background->name = string_compose ("Marker::_name_background for %1", annotation);
_name_flag->name = string_compose ("Marker::_name_flag for %1", annotation);
#endif
} else {
_name_background = 0;
_name_flag = 0;
}
/* adjust to properly locate the tip */
mark = new ArdourCanvas::Polygon (group);
CANVAS_DEBUG_NAME (mark, string_compose ("Marker::mark for %1", annotation));
_pcue = new ArdourCanvas::Circle (group);
_pmark = new ArdourCanvas::Polygon (group);
CANVAS_DEBUG_NAME (_pmark, string_compose ("Marker::mark for %1", annotation));
mark->set (*points);
_pmark->set (*points);
if (_type == Cue) {
_pcue->set_outline(false);
_pcue->set_fill(true);
_pcue->set_center ( ArdourCanvas::Duple (MH/2, MH/2) );
_pcue->set_radius ( MH/2 );
_pcue->show();
_pmark->hide();
_name_flag->hide();
} else {
_pcue->hide();
_pmark->show();
}
/* setup name pixbuf sizes */
name_font = get_font_for_style (N_("MarkerText"));
@ -326,7 +335,7 @@ ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Item& parent, guint3
CANVAS_DEBUG_NAME (_name_item, string_compose ("ArdourMarker::_name_item for %1", annotation));
_name_item->set_font_description (name_font);
_name_item->set_color (RGBA_TO_UINT (0,0,0,255));
_name_item->set_position (ArdourCanvas::Duple (_label_offset, (marker_height - name_height - 1) * .5 ));
_name_item->set_position (ArdourCanvas::Duple (_label_offset, (marker_height - 4)*0.5 - (name_height) * .5 ));
set_color_rgba (rgba);
@ -339,7 +348,8 @@ ArdourMarker::ArdourMarker (PublicEditor& ed, ArdourCanvas::Item& parent, guint3
*/
group->set_data ("marker", this);
mark->set_data ("marker", this);
_pmark->set_data ("marker", this);
_pcue->set_data ("marker", this);
if (handle_events) {
group->Event.connect (sigc::bind (sigc::mem_fun (editor, &PublicEditor::canvas_marker_event), group, this));
@ -371,8 +381,10 @@ ArdourMarker::set_selected (bool s)
_selected = s;
setup_line ();
mark->set_fill_color (_selected ? UIConfiguration::instance().color ("entered marker") : _color);
mark->set_outline_color ( _selected ? UIConfiguration::instance().color ("entered marker") : _color );
_pcue->set_fill_color (_selected ? UIConfiguration::instance().color ("entered marker") : _color);
_pmark->set_fill_color (_selected ? UIConfiguration::instance().color ("entered marker") : _color);
_pmark->set_outline_color ( _selected ? UIConfiguration::instance().color ("entered marker") : _color );
}
void
@ -467,9 +479,10 @@ ArdourMarker::set_name (const string& new_name)
{
_name = new_name;
mark->set_tooltip(new_name);
if (_name_background) {
_name_background->set_tooltip(new_name);
_pcue->set_tooltip(new_name);
_pmark->set_tooltip(new_name);
if (_name_flag) {
_name_flag->set_tooltip(new_name);
}
_name_item->set_tooltip(new_name);
@ -510,13 +523,18 @@ ArdourMarker::setup_name_display ()
}
_name_item->clamp_width (name_width);
_name_item->set (_name);
if (_name_background) {
if (_type == Cue) {
_name_item->set (string_compose ("%1", (char)('A' + _cue_index))); // XXX not translatable
} else {
_name_item->set (_name);
}
if (_name_flag) {
if (label_on_left ()) {
/* adjust right edge of background to fit text */
_name_background->set_x0 (_name_item->position().x - padding);
_name_background->set_x1 (_name_item->position().x + name_width + _shift);
_name_flag->set_x0 (_name_item->position().x - padding);
_name_flag->set_x1 (_name_item->position().x + name_width + _shift);
} else {
/* right edge remains at zero (group-relative). Add
* arbitrary 2 pixels of extra padding at the end
@ -525,26 +543,26 @@ ArdourMarker::setup_name_display ()
case Tempo:
_name_item->hide ();
// tip's x-pos is at "M3", box is 2x marker's
_name_background->set_x0 (-M3);
_name_background->set_x1 (3 * M3);
_name_flag->set_x0 (-M3);
_name_flag->set_x1 (3 * M3);
break;
case Mark:
case Meter:
_name_background->set_x0 (M3);
_name_background->set_x1 (_name_item->position().x + name_width + padding);
_name_flag->set_x0 (M3);
_name_flag->set_x1 (_name_item->position().x + name_width + padding);
break;
default:
_name_background->set_x0 (0);
_name_background->set_x1 (_name_item->position().x + name_width + padding);
_name_flag->set_x0 (0);
_name_flag->set_x1 (_name_item->position().x + name_width + padding);
break;
}
}
}
}
if (_name_background) {
_name_background->set_y0 (0);
_name_background->set_y1 (marker_height + 1);
if (_name_flag) {
_name_flag->set_y0 (0);
_name_flag->set_y1 (marker_height - 2);
}
}
@ -586,8 +604,9 @@ void
ArdourMarker::set_points_color (uint32_t c)
{
_points_color = c;
mark->set_fill_color (_points_color);
mark->set_outline_color (_points_color);
_pcue->set_fill_color (_points_color);
_pmark->set_fill_color (_points_color);
_pmark->set_outline_color (_points_color);
}
void
@ -595,15 +614,16 @@ ArdourMarker::set_color_rgba (uint32_t c)
{
_color = c;
mark->set_fill_color (_selected ? UIConfiguration::instance().color ("entered marker") : _color);
mark->set_outline_color ( _selected ? UIConfiguration::instance().color ("entered marker") : _color );
_pcue->set_fill_color (_selected ? UIConfiguration::instance().color ("entered marker") : _color);
_pmark->set_fill_color (_selected ? UIConfiguration::instance().color ("entered marker") : _color);
_pmark->set_outline_color ( _selected ? UIConfiguration::instance().color ("entered marker") : _color );
if (_track_canvas_line && ((_type == RegionCue) || !_selected)) {
_track_canvas_line->set_outline_color (_color);
}
if (_name_item) {
if (_name_background) {
if (_name_flag) {
/* make sure text stands out over bg color */
_name_item->set_color (contrasting_text_color (_color));
} else {
@ -612,10 +632,10 @@ ArdourMarker::set_color_rgba (uint32_t c)
}
}
if (_name_background) {
_name_background->set_fill (true);
_name_background->set_fill_color (UINT_RGBA_CHANGE_A (_color, 0x70));
_name_background->set_outline (false);
if (_name_flag) {
_name_flag->set_fill (true);
_name_flag->set_fill_color (_color);
_name_flag->set_outline (false);
}
}
@ -694,7 +714,7 @@ TempoMarker::update_height_mark (const double ratio)
points->push_back (ArdourCanvas::Duple (0.0, min (top + (MH * .6), MH)));
points->push_back (ArdourCanvas::Duple ( M3, top));
mark->set (*points);
_pmark->set (*points);
}
void

View File

@ -34,6 +34,7 @@
#include "canvas/fwd.h"
#include "canvas/types.h"
#include "canvas/circle.h"
namespace Temporal {
class Point;
@ -116,6 +117,11 @@ public:
RegionView* region_view() const { return _region_view; }
/* this will be -1 for all non-cue markers; or cue_index for cue markers */
void set_cue_index(int c) { _cue_index = c; set_name(_name); }
int cue_index() const { return _cue_index; }
protected:
PublicEditor& editor;
@ -123,11 +129,12 @@ protected:
ArdourCanvas::Item* _parent;
ArdourCanvas::Item *group;
ArdourCanvas::Polygon *mark;
ArdourCanvas::Circle *_pcue;
ArdourCanvas::Polygon *_pmark;
ArdourCanvas::Text *_name_item;
ArdourCanvas::Points *points;
ArdourCanvas::Line* _track_canvas_line;
ArdourCanvas::Rectangle* _name_background;
ArdourCanvas::Rectangle* _name_flag;
std::string _name;
double unit_position;
@ -149,6 +156,8 @@ protected:
RegionView* _region_view;
int _cue_index;
void reposition ();
void setup_line_x ();
void setup_name_display ();

View File

@ -366,7 +366,7 @@ MiniTimeline::draw_mark (cairo_t* cr, int x0, int x1, const std::string& label,
cairo_rel_line_to (cr, w2, -h1);
cairo_rel_line_to (cr, 0, -h0);
cairo_close_path (cr);
set_source_rgba (cr, HSV (color).darker (0.35).color ());
set_source_rgba (cr, color);
cairo_set_line_width (cr, 1.0);
cairo_stroke_preserve (cr);
cairo_fill (cr);
@ -375,7 +375,7 @@ MiniTimeline::draw_mark (cairo_t* cr, int x0, int x1, const std::string& label,
rw = x1;
} else {
cairo_save (cr);
set_source_rgba (cr, HSV (color).darker (0.35).color ());
set_source_rgba (cr, color);
cairo_rectangle (cr, x0-5*scale, y, rw - x0 + 4*scale, h);
cairo_fill_preserve (cr);
cairo_clip (cr);
@ -414,7 +414,7 @@ MiniTimeline::draw_cue (cairo_t* cr, int x0, int x1, int cue_index, bool& prelig
// draw Cue as a circle
cairo_arc(cr, x0+h/2, y_offs+h/2, (h/2)-1*scale, 0, 2*M_PI);
set_source_rgba (cr, HSV (color).darker (0.35).color ());
set_source_rgba (cr, color);
cairo_fill (cr);
//draw cue letter

View File

@ -14,7 +14,7 @@
<Color name="theme:bg2" value="101010ff"/> <!--ruler base-->
<Color name="theme:contrasting" value="0xf10000ff"/> <!--play head-->
<Color name="theme:contrasting clock" value="4BCD2FFF"/> <!--clock: text-->
<Color name="theme:contrasting less" value="5697B3FF"/> <!--gtk_bg_tooltip-->
<Color name="theme:contrasting less" value="46B357FF"/> <!--gtk_bg_tooltip-->
<Color name="theme:contrasting selection" value="5da3c1ff"/> <!--gtk_bg_selected-->
<Color name="theme:contrasting alt" value="CCA336ff"/> <!--delta clock , clock edit-->
<Color name="neutral:backgroundest" value="000000ff"/> <!--border color-->
@ -167,11 +167,11 @@
<ColorAlias name="latency button: led active" alias="alert:ruddy"/>
<ColorAlias name="layered button: fill" alias="widget:bg"/>
<ColorAlias name="layered button: fill active" alias="alert:ruddy"/>
<ColorAlias name="location cd marker" alias="alert:cyan"/>
<ColorAlias name="location loop" alias="alert:green"/>
<ColorAlias name="location marker" alias="theme:contrasting clock"/>
<ColorAlias name="location punch" alias="alert:ruddy"/>
<ColorAlias name="location range" alias="alert:green"/>
<ColorAlias name="location cd marker" alias="theme:contrasting less"/>
<ColorAlias name="location loop" alias="theme:contrasting less"/>
<ColorAlias name="location marker" alias="theme:contrasting less"/>
<ColorAlias name="location punch" alias="widget:ruddy"/>
<ColorAlias name="location range" alias="theme:contrasting less"/>
<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"/>