From 66a114a892f36efe25ddd7cf71d0035d8f27ae9c Mon Sep 17 00:00:00 2001 From: Ben Loftis Date: Tue, 14 Dec 2021 20:35:28 -0600 Subject: [PATCH] triggerbox: draw icons for follow-actions (for testing) --- gtk2_ardour/triggerbox_ui.cc | 82 +++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/gtk2_ardour/triggerbox_ui.cc b/gtk2_ardour/triggerbox_ui.cc index bc5b03bf88..704256ee68 100644 --- a/gtk2_ardour/triggerbox_ui.cc +++ b/gtk2_ardour/triggerbox_ui.cc @@ -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 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 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 context) const { @@ -207,6 +274,15 @@ TriggerEntry::render (ArdourCanvas::Rect const & area, Cairo::RefPtrset_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 (); }