trigger_ui: more consistent icons and better selection persistence

This commit is contained in:
Ben Loftis 2021-12-21 14:55:08 -06:00
parent b688f7da6b
commit aa7b15a0b6
2 changed files with 38 additions and 31 deletions

View File

@ -451,7 +451,7 @@ TriggerMaster::_size_allocate (ArdourCanvas::Rect const& alloc)
Rectangle::_size_allocate (alloc);
const double scale = UIConfiguration::instance ().get_ui_scale ();
_poly_margin = 2. * scale;
_poly_margin = 3. * scale;
const Distance width = _rect.width ();
const Distance height = _rect.height ();

View File

@ -233,27 +233,30 @@ TriggerEntry::draw_follow_icon (Cairo::RefPtr<Cairo::Context> context, Trigger::
void
TriggerEntry::draw_launch_icon (Cairo::RefPtr<Cairo::Context> context, float size, float scale) const
TriggerEntry::draw_launch_icon (Cairo::RefPtr<Cairo::Context> context, float sz, float scale) const
{
context->set_line_width (1 * scale);
float margin = 4*scale;
float size = sz - 2*margin;
if (_trigger.active()) {
if (_trigger.launch_style()==Trigger::Toggle) {
//clicking again will Stop this clip
set_source_rgba (context, UIConfiguration::instance ().color ("neutral:foreground"));
context->move_to (_poly_margin, _poly_margin);
context->rel_line_to (_poly_size, 0);
context->rel_line_to (0, _poly_size);
context->rel_line_to (-_poly_size, 0);
context->rel_line_to (0, -_poly_size);
context->move_to (margin, margin);
context->rel_line_to (size, 0);
context->rel_line_to (0, size);
context->rel_line_to (-size, 0);
context->rel_line_to (0, -size);
context->fill ();
return; //done
} else {
//actively playing; draw a filled play triangle
set_source_rgba (context, UIConfiguration::instance ().color ("neutral:foreground"));
context->move_to (_poly_margin, _poly_margin);
context->line_to (_poly_margin, _poly_size);
context->line_to (_poly_size, 0.5 + _poly_size / 2.);
context->move_to (margin, margin);
context->rel_line_to (0, size);
context->rel_line_to (size, -size/2);
context->fill ();
return; //done
}
@ -263,11 +266,11 @@ TriggerEntry::draw_launch_icon (Cairo::RefPtr<Cairo::Context> context, float siz
if (!_trigger.region ()) {
//no content in this slot, it is only a Stop button
context->move_to (_poly_margin, _poly_margin);
context->rel_line_to (_poly_size, 0);
context->rel_line_to (0, _poly_size);
context->rel_line_to (-_poly_size, 0);
context->rel_line_to (0, -_poly_size);
context->move_to (margin, margin);
context->rel_line_to (size, 0);
context->rel_line_to (0, size);
context->rel_line_to (-size, 0);
context->rel_line_to (0, -size);
context->stroke ();
return; //done
}
@ -275,30 +278,30 @@ TriggerEntry::draw_launch_icon (Cairo::RefPtr<Cairo::Context> context, float siz
switch (_trigger.launch_style()) {
case Trigger::Toggle:
case Trigger::OneShot:
context->move_to (_poly_margin, _poly_margin);
context->line_to (_poly_margin, _poly_size);
context->line_to (_poly_size, 0.5 + _poly_size / 2.);
context->line_to (_poly_margin, _poly_margin);
context->move_to (margin, margin);
context->rel_line_to (0, size);
context->rel_line_to (size, -size/2);
context->line_to (margin, margin);
context->stroke ();
break;
case Trigger::Gate: //diamond shape
context->move_to ( _poly_size/2, _poly_margin );
context->rel_line_to ( _poly_size/2, _poly_size/2);
context->rel_line_to ( -_poly_size/2, _poly_size/2);
context->rel_line_to ( -_poly_size/2, -_poly_size/2);
context->rel_line_to ( _poly_size/2, -_poly_size/2);
context->move_to ( margin+size/2, margin );
context->rel_line_to ( size/2, size/2);
context->rel_line_to ( -size/2, size/2);
context->rel_line_to ( -size/2, -size/2);
context->rel_line_to ( size/2, -size/2);
context->stroke ();
break;
case Trigger::Repeat: //'stutter' shape
context->set_line_width (1 * scale);
context->move_to ( _poly_margin, _poly_margin );
context->rel_line_to ( 0, _poly_size);
context->move_to ( margin, margin );
context->rel_line_to ( 0, size);
context->move_to ( _poly_margin + scale*3, _poly_margin + scale*2 );
context->rel_line_to ( 0, _poly_size - scale*4);
context->move_to ( margin + scale*3, margin + scale*2 );
context->rel_line_to ( 0, size - scale*4);
context->move_to ( _poly_margin + scale*6, _poly_margin + scale*4 );
context->rel_line_to ( 0, _poly_size - scale*8);
context->move_to ( margin + scale*6, margin + scale*3 );
context->rel_line_to ( 0, size - scale*6);
context->stroke ();
break;
@ -589,6 +592,10 @@ TriggerBoxUI::name_button_event (GdkEvent* ev, uint64_t n)
_slots[n]->name_button->set_outline_color (HSV (fill_color ()).lighter (0.15).color ());
_slots[n]->follow_button->set_fill_color (HSV (fill_color ()).lighter (0.15).color ());
_slots[n]->play_button->set_fill_color (HSV (fill_color ()).lighter (0.15).color ());
/*preserve selection border*/
if (PublicEditor::instance ().get_selection ().selected (_slots[n])) {
_slots[n]->name_button->set_outline_color (UIConfiguration::instance ().color ("alert:red"));
}
}
break;
case GDK_LEAVE_NOTIFY:
@ -602,7 +609,7 @@ TriggerBoxUI::name_button_event (GdkEvent* ev, uint64_t n)
/* a side-effect of selection-change is that the slot's color is reset. retain the "entered-color" here: */
_slots[n]->name_text->set_color (UIConfiguration::instance ().color ("neutral:foregroundest"));
_slots[n]->name_button->set_fill_color (HSV (fill_color ()).lighter (0.15).color ());
_slots[n]->name_button->set_outline_color (HSV (fill_color ()).lighter (0.15).color ());
_slots[n]->name_button->set_outline_color (UIConfiguration::instance ().color ("alert:red"));
_slots[n]->follow_button->set_fill_color (HSV (fill_color ()).lighter (0.15).color ());
}
break;