13
0

triggerbox: draw icons for follow-actions (for testing)

This commit is contained in:
Ben Loftis 2021-12-14 20:35:28 -06:00
parent 142ca9fd07
commit 66a114a892

View File

@ -153,12 +153,79 @@ TriggerEntry::_size_allocate (ArdourCanvas::Rect const & alloc)
name_text->size_allocate (ArdourCanvas::Rect(0, 0, width, height));
name_text->set_position (Duple (tleft + poly_margin, poly_margin -0.5));
name_text->clamp_width ( width - height );
name_text->clamp_width ( width - height - height );
//font scale may have changed. uiconfig 'embeds' the ui-scale in the font
name_text->set_font_description (UIConfiguration::instance().get_NormalFont());
}
void draw_follow_icon( Cairo::RefPtr<Cairo::Context> context, Trigger::FollowAction icon, float size, float scale ) {
context->set_line_width ( 1*scale );
switch (icon) {
case Trigger::Stop:
context->rectangle ( 6*scale, 6*scale, size-12*scale, size-12*scale );
context->stroke();
break;
case Trigger::Again:
context->arc ( size/2, size/2, size*0.20, 60.*(M_PI/180.0), 2*M_PI );
context->stroke();
context->arc ( size/2+size*0.2, size/2, 1.5*scale, 0, 2*M_PI ); //arrow head
context->fill();
break;
case Trigger::NextTrigger:
context->move_to ( size/2, 3*scale );
context->line_to ( size/2, size-5*scale );
context->stroke();
context->arc ( size/2, size-5*scale, 1.5*scale, 0, 2*M_PI ); //arrow head
context->fill();
break;
case Trigger::PrevTrigger:
context->move_to ( size/2, 5*scale );
context->line_to ( size/2, size-3*scale );
context->stroke();
context->arc ( size/2, 5*scale, 1.5*scale, 0, 2*M_PI ); //arrow head
context->fill();
break;
case Trigger::QueuedTrigger: {
Glib::RefPtr<Pango::Layout> layout = Pango::Layout::create (context);
layout->set_font_description ( UIConfiguration::instance().get_SmallMonospaceFont() );
layout->set_text (icon == Trigger::AnyTrigger ? "&" : "@");
int tw, th; layout->get_pixel_size (tw, th);
context->move_to ( size/2, size/2 );
context->rel_move_to ( -tw/2, -th/2 );
layout->show_in_cairo_context (context);
} break;
case Trigger::AnyTrigger: {
context->move_to ( size/2, 3*scale );
context->line_to ( size/2, size-3*scale );
context->move_to ( size/2, size/2 );
context->line_to ( size/2-3*scale, size/2 );
context->stroke();
context->arc ( size/2, 4*scale, 1.5*scale, 0, 2*M_PI ); //arrow head
context->fill();
context->arc ( size/2, size-3*scale, 1.5*scale, 0, 2*M_PI ); //arrow head
context->fill();
context->arc ( size/2-3*scale, size/2, 1.5*scale, 0, 2*M_PI ); //arrow head
context->fill();
} break;
case Trigger::OtherTrigger: {
context->move_to ( size/2, 3*scale );
context->line_to ( size/2, 7*scale );
context->move_to ( size/2, size-7*scale );
context->line_to ( size/2, size-3*scale );
context->stroke();
context->arc ( size/2, 3*scale, 1.5*scale, 0, 2*M_PI ); //arrow head
context->fill();
context->arc ( size/2, size-3*scale, 1.5*scale, 0, 2*M_PI ); //arrow head
context->fill();
} break;
default:
break;
}
}
void
TriggerEntry::render (ArdourCanvas::Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
{
@ -207,6 +274,15 @@ TriggerEntry::render (ArdourCanvas::Rect const & area, Cairo::RefPtr<Cairo::Cont
context->set_identity_matrix();
}
if (_trigger.region()) {
context->set_identity_matrix();
context->translate (self.x0, self.y0-0.5);
context->translate ( width - height, 0); //right side of the widget
set_source_rgba (context, UIConfiguration::instance().color("neutral:midground"));
draw_follow_icon( context, _trigger.follow_action(0), height, scale );
context->set_identity_matrix();
}
}
void
@ -257,6 +333,10 @@ TriggerEntry::prop_change (PropertyChange const & change)
need_pb = true;
}
if (change.contains (ARDOUR::Properties::follow_action0)) {
redraw();
}
if (need_pb) {
shape_play_button ();
}