From e68c60b40799d08346aa79c1b080df7203608c73 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 21 Jul 2021 17:22:09 -0600 Subject: [PATCH] initial extensions for TriggerBox UI --- gtk2_ardour/triggerbox_ui.cc | 57 ++++++++++++++++++++++++++++++++++-- gtk2_ardour/triggerbox_ui.h | 17 ++++++++++- gtk2_ardour/wscript | 1 + 3 files changed, 72 insertions(+), 3 deletions(-) diff --git a/gtk2_ardour/triggerbox_ui.cc b/gtk2_ardour/triggerbox_ui.cc index 7cea844755..50cb5cff0b 100644 --- a/gtk2_ardour/triggerbox_ui.cc +++ b/gtk2_ardour/triggerbox_ui.cc @@ -16,26 +16,79 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include "ardour/triggerbox.h" + +#include "gtkmm2ext/utils.h" + #include "triggerbox_ui.h" using namespace ARDOUR; using namespace ArdourCanvas; +using namespace Gtkmm2ext; TriggerEntry::TriggerEntry (Item* parent, ARDOUR::Trigger& t) : Rectangle (parent) , _trigger (t) { + Rect r (0, 0, 25, 12); + set (r); + set_outline_all (); } TriggerEntry::~TriggerEntry () { } -TriggerBoxUI::TriggerBoxUI (ArdourCanvas::Item* parent) - : Box (parent, Box::Vertical) +void +TriggerEntry::render (Rect const & area, Cairo::RefPtr context) const { + /* convert expose area back to item coordinate space */ + + setup_outline_context (context); + rounded_rectangle (context, x0(), y0(), x1(), y1()); + context->stroke_preserve (); + setup_fill_context (context); + context->fill (); +} + +/* ---------------------------- */ + +TriggerBoxUI::TriggerBoxUI (ArdourCanvas::Item* parent, TriggerBox& tb) + : Box (parent, Box::Vertical) + , _triggerbox (tb) +{ + set_homogenous (true); + set_spacing (6); + set_padding (6); + + build (); } TriggerBoxUI::~TriggerBoxUI () { } + +void +TriggerBoxUI::build () +{ + Trigger* t; + size_t n = 0; + + clear_items (true); + + while (true) { + t = _triggerbox.trigger (n); + if (!t) { + break; + } + + (void) new TriggerEntry (this, *t); + } +} + +/* ------------ */ + +TriggerBoxWidget::TriggerBoxWidget (TriggerBox& tb) +{ + ui = new TriggerBoxUI (root(), tb); +} diff --git a/gtk2_ardour/triggerbox_ui.h b/gtk2_ardour/triggerbox_ui.h index e09db33f2e..66ab9a0da2 100644 --- a/gtk2_ardour/triggerbox_ui.h +++ b/gtk2_ardour/triggerbox_ui.h @@ -22,10 +22,12 @@ #include #include "canvas/box.h" +#include "canvas/canvas.h" #include "canvas/rectangle.h" namespace ARDOUR { class Trigger; + class TriggerBox; } class TriggerEntry : public ArdourCanvas::Rectangle @@ -35,6 +37,7 @@ class TriggerEntry : public ArdourCanvas::Rectangle ~TriggerEntry (); ARDOUR::Trigger& trigger() const { return _trigger; } + void render (ArdourCanvas::Rect const &, Cairo::RefPtr) const; private: ARDOUR::Trigger& _trigger; @@ -43,11 +46,23 @@ class TriggerEntry : public ArdourCanvas::Rectangle class TriggerBoxUI : public ArdourCanvas::Box { public: - TriggerBoxUI (ArdourCanvas::Item* parent); + TriggerBoxUI (ArdourCanvas::Item* parent, ARDOUR::TriggerBox&); ~TriggerBoxUI (); private: + ARDOUR::TriggerBox& _triggerbox; + + void build (); }; +class TriggerBoxWidget : public ArdourCanvas::GtkCanvas +{ + public: + TriggerBoxWidget (ARDOUR::TriggerBox& tb); + + private: + TriggerBoxUI* ui; +}; + #endif /* __ardour_gtk_triggerbox_ui_h__ */ diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index df3620f985..ecc32d3465 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -297,6 +297,7 @@ gtk2_ardour_sources = [ 'transport_control_ui.cc', 'transport_masters_dialog.cc', 'transpose_dialog.cc', + 'triggerbox_ui.cc', 'ui_config.cc', 'utils.cc', 'varispeed_dialog.cc',