diff --git a/gtk2_ardour/cuebox_ui.cc b/gtk2_ardour/cuebox_ui.cc index e0911f86b4..6624fc9afd 100644 --- a/gtk2_ardour/cuebox_ui.cc +++ b/gtk2_ardour/cuebox_ui.cc @@ -76,12 +76,13 @@ CueEntry::CueEntry (Item* item, uint64_t cue_index) name_button->show (); name_text = new Text (name_button); + name_text->set (string_compose ("%1", (char) ('A'+ _cue_idx) )); name_text->set_ignore_events (false); name_text->show(); /* watch for change in theme */ UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &CueEntry::ui_parameter_changed)); - ui_parameter_changed("color-file"); + set_default_colors(); } CueEntry::~CueEntry () @@ -91,13 +92,20 @@ CueEntry::~CueEntry () bool CueEntry::event_handler (GdkEvent* ev) { - //for now, we fall thru to the cuebox for all events switch (ev->type) { case GDK_BUTTON_PRESS: break; case GDK_ENTER_NOTIFY: + if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) { + play_shape->set_outline_color (UIConfiguration::instance().color ("neutral:foreground")); + name_text->set_color (UIConfiguration::instance().color("neutral:foreground")); + } break; case GDK_LEAVE_NOTIFY: + if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) { + play_shape->set_outline_color (UIConfiguration::instance().color ("neutral:midground")); + name_text->set_color (UIConfiguration::instance().color("neutral:midground")); + } break; default: break; @@ -162,21 +170,35 @@ CueEntry::shape_play_button () } } +void +CueEntry::set_default_colors () +{ + set_fill_color (UIConfiguration::instance().color ("theme:bg")); + play_button->set_fill_color (UIConfiguration::instance().color("theme:bg")); + play_button->set_outline_color (UIConfiguration::instance().color("theme:bg")); + name_button->set_fill_color (UIConfiguration::instance().color("theme:bg")); + name_text->set_fill_color (UIConfiguration::instance().color("theme:bg")); + name_button->set_outline_color (UIConfiguration::instance().color("theme:bg")); + if ((_cue_idx/2)%2==0) { + set_fill_color (HSV (fill_color()).darker(0.15).color ()); + play_button->set_fill_color (HSV (fill_color()).darker(0.15).color ()); + play_button->set_outline_color (HSV (fill_color()).darker(0.15).color ()); + name_button->set_fill_color (HSV (fill_color()).darker(0.15).color ()); + name_text->set_fill_color (HSV (fill_color()).darker(0.15).color ()); + name_button->set_outline_color (HSV (fill_color()).darker(0.15).color ()); + } + + name_text->set_color (UIConfiguration::instance().color("neutral:midground")); + + play_shape->set_outline_color (UIConfiguration::instance().color("neutral:midground")); + play_shape->set_fill_color (UIConfiguration::instance().color("neutral:midground")); +} + void CueEntry::ui_parameter_changed (std::string const& p) { if (p == "color-file") { - set_fill_color (UIConfiguration::instance().color("theme:bg")); - - name_text->set_color (UIConfiguration::instance().color("neutral:foreground")); - - name_button->set_outline_color (UIConfiguration::instance().color("theme:bg")); - - play_button->set_outline_color (UIConfiguration::instance().color("theme:bg")); - play_button->set_fill_color (UIConfiguration::instance().color("theme:bg")); - - play_shape->set_outline_color (UIConfiguration::instance().color("neutral:midground")); - play_shape->set_fill_color (UIConfiguration::instance().color("neutral:midground")); + set_default_colors (); } } @@ -243,7 +265,7 @@ CueBoxUI::build () _slots.clear (); - for (int32_t n = 0; n < 8; ++n) { //ToDo + for (int32_t n = 0; n < TriggerBox::default_triggers_per_box; ++n) { //ToDo CueEntry* te = new CueEntry (this, n); _slots.push_back (te); @@ -262,7 +284,7 @@ CueBoxUI::_size_allocate (ArdourCanvas::Rect const & alloc) const float width = alloc.width(); const float height = alloc.height(); - const float slot_h = height / 8; //ToDo + const float slot_h = height / TriggerBox::default_triggers_per_box; //ToDo float ypos = 0; for (auto & slot : _slots) { @@ -324,10 +346,10 @@ CueBoxWidget::on_unmap () CueBoxWindow::CueBoxWindow () { - CueBoxWidget* tbw = manage (new CueBoxWidget (-1., 8*16.)); + CueBoxWidget* tbw = manage (new CueBoxWidget (-1., TriggerBox::default_triggers_per_box*16.)); set_title (_("CueBox for XXXX")); - set_default_size (-1., 8*16.); + set_default_size (-1., TriggerBox::default_triggers_per_box*16.); add (*tbw); tbw->show (); } diff --git a/gtk2_ardour/cuebox_ui.h b/gtk2_ardour/cuebox_ui.h index f72b9b8f04..2f5e13a421 100644 --- a/gtk2_ardour/cuebox_ui.h +++ b/gtk2_ardour/cuebox_ui.h @@ -74,6 +74,7 @@ class CueEntry : public ArdourCanvas::Rectangle void shape_play_button (); void ui_parameter_changed (std::string const& p); + void set_default_colors (); }; diff --git a/gtk2_ardour/trigger_stopper.cc b/gtk2_ardour/trigger_master.cc similarity index 54% rename from gtk2_ardour/trigger_stopper.cc rename to gtk2_ardour/trigger_master.cc index 87e47525ab..55c4a9da29 100644 --- a/gtk2_ardour/trigger_stopper.cc +++ b/gtk2_ardour/trigger_master.cc @@ -36,7 +36,7 @@ #include "ardour_ui.h" #include "gui_thread.h" -#include "trigger_stopper.h" +#include "trigger_master.h" #include "trigger_ui.h" #include "public_editor.h" #include "region_view.h" @@ -52,7 +52,7 @@ using namespace ArdourCanvas; using namespace Gtkmm2ext; using namespace PBD; -TriggerStopper::TriggerStopper (Item* parent, boost::shared_ptr t) +TriggerMaster::TriggerMaster (Item* parent, boost::shared_ptr t) : ArdourCanvas::Rectangle (parent) , _triggerbox (t) { @@ -60,41 +60,43 @@ TriggerStopper::TriggerStopper (Item* parent, boost::shared_ptr t) name = X_("trigger stopper"); - Event.connect (sigc::mem_fun (*this, &TriggerStopper::event_handler)); + Event.connect (sigc::mem_fun (*this, &TriggerMaster::event_handler)); - play_shape = new ArdourCanvas::Polygon (this); - play_shape->set_outline (false); - play_shape->name = X_("stopbutton"); - play_shape->set_ignore_events (true); - play_shape->show (); + active_bar = new ArdourCanvas::Rectangle (this); + active_bar->set_outline (false); + + stop_shape = new ArdourCanvas::Polygon (this); + stop_shape->set_outline (false); + stop_shape->name = X_("stopbutton"); + stop_shape->set_ignore_events (true); + stop_shape->show (); name_text = new Text (this); name_text->set("Now Playing"); name_text->set_ignore_events (false); - /* prefs (theme colors) */ - UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &TriggerStopper::ui_parameter_changed)); - /* trigger changes */ - _triggerbox->PropertyChanged.connect (trigger_prop_connection, MISSING_INVALIDATOR, boost::bind (&TriggerStopper::prop_change, this, _1), gui_context()); + _triggerbox->PropertyChanged.connect (trigger_prop_connection, MISSING_INVALIDATOR, boost::bind (&TriggerMaster::prop_change, this, _1), gui_context()); /* route changes */ -// dynamic_cast (_triggerbox->owner())->presentation_info().Change.connect (owner_prop_connection, MISSING_INVALIDATOR, boost::bind (&TriggerStopper::owner_prop_change, this, _1), gui_context()); +// dynamic_cast (_triggerbox->owner())->presentation_info().Change.connect (owner_prop_connection, MISSING_INVALIDATOR, boost::bind (&TriggerMaster::owner_prop_change, this, _1), gui_context()); PropertyChange changed; changed.add (ARDOUR::Properties::name); changed.add (ARDOUR::Properties::running); prop_change (changed); - ui_parameter_changed("color-file"); + /* prefs (theme colors) */ + UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &TriggerMaster::ui_parameter_changed)); + set_default_colors(); } -TriggerStopper::~TriggerStopper () +TriggerMaster::~TriggerMaster () { } void -TriggerStopper::render (Rect const & area, Cairo::RefPtr context) const +TriggerMaster::render (Rect const & area, Cairo::RefPtr context) const { /* Note that item_to_window() already takes _position into account (as part of item_to_canvas() @@ -117,58 +119,34 @@ TriggerStopper::render (Rect const & area, Cairo::RefPtr context context->fill (); } - //black area around text - set_source_rgba (context, UIConfiguration::instance().color ("theme:bg2")); - context->rectangle (16*scale, 1*scale, _rect.width()-2*scale, _rect.height()-2*scale); - context->fill (); - -#if 0 -//text -Glib::RefPtr layout (Pango::Layout::create (context)); -layout->set_font_description (UIConfiguration::instance().get_NormalFont()); -layout->set_text (name_text->text()); -//text clipping rect -context->save(); -context->rectangle (2, 1, width-4, height-2); -context->clip(); -//calculate the text size -int tw, th; -layout->get_pixel_size (tw, th); -//render the text (centered vertically) -context->translate( 18*scale, (height/2)-(th/2) ); -set_source_rgba (context, UIConfiguration::instance().color ("neutral:foreground")); -layout->show_in_cairo_context (context); -context->restore (); -#endif - - render_children (area, context); - - //fade-over at right + //fade-over at top uint32_t bg_color = UIConfiguration::instance().color ("theme:bg"); double bg_r,bg_g,bg_b, unused; Gtkmm2ext::color_to_rgba( bg_color, bg_r, bg_g, bg_b, unused); - Cairo::RefPtr left_pattern = Cairo::LinearGradient::create (_rect.width()-12*scale, 0, _rect.width(), 0); - left_pattern->add_color_stop_rgba (0, 0, 0, 0, 0); - left_pattern->add_color_stop_rgba (1, 0, 0, 0, 1); + Cairo::RefPtr left_pattern = Cairo::LinearGradient::create (0, 0, 0, 6.*scale); + left_pattern->add_color_stop_rgba (0, 0, 0, 0, 1); + left_pattern->add_color_stop_rgba (1, 0, 0, 0, 0); context->set_source (left_pattern); - context->rectangle( _rect.width()-12*scale, 2*scale, 10*scale, _rect.height()-4*scale ); + context->rectangle(0, 0, width, 6.*scale); context->fill (); + + render_children (area, context); } void -TriggerStopper::owner_prop_change (PropertyChange const & pc) +TriggerMaster::owner_prop_change (PropertyChange const & pc) { if (pc.contains (Properties::color)) { } } void -TriggerStopper::selection_change () +TriggerMaster::selection_change () { } bool -TriggerStopper::event_handler (GdkEvent* ev) +TriggerMaster::event_handler (GdkEvent* ev) { switch (ev->type) { case GDK_BUTTON_PRESS: @@ -179,13 +157,13 @@ TriggerStopper::event_handler (GdkEvent* ev) break; case GDK_ENTER_NOTIFY: if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) { - play_shape->set_fill_color (UIConfiguration::instance().color("neutral:foregroundest")); + stop_shape->set_fill_color (UIConfiguration::instance().color("neutral:foregroundest")); } redraw (); break; case GDK_LEAVE_NOTIFY: if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) { - play_shape->set_fill_color (UIConfiguration::instance().color("neutral:midground")); + stop_shape->set_fill_color (UIConfiguration::instance().color("neutral:midground")); } redraw (); break; @@ -197,7 +175,7 @@ TriggerStopper::event_handler (GdkEvent* ev) } void -TriggerStopper::maybe_update () +TriggerMaster::maybe_update () { /* double nbw; @@ -223,7 +201,7 @@ TriggerStopper::maybe_update () } void -TriggerStopper::_size_allocate (ArdourCanvas::Rect const & alloc) +TriggerMaster::_size_allocate (ArdourCanvas::Rect const & alloc) { Rectangle::_size_allocate (alloc); @@ -240,7 +218,7 @@ TriggerStopper::_size_allocate (ArdourCanvas::Rect const & alloc) p.push_back (Duple (poly_margin, poly_size)); p.push_back (Duple (poly_size, poly_size)); p.push_back (Duple (poly_size, poly_margin)); - play_shape->set (p); + stop_shape->set (p); float tleft = poly_size + (poly_margin*3); float twidth = width-poly_size-(poly_margin*3); @@ -255,7 +233,7 @@ TriggerStopper::_size_allocate (ArdourCanvas::Rect const & alloc) } void -TriggerStopper::prop_change (PropertyChange const & change) +TriggerMaster::prop_change (PropertyChange const & change) { if (change.contains (ARDOUR::Properties::name) || change.contains (ARDOUR::Properties::running) @@ -273,62 +251,57 @@ TriggerStopper::prop_change (PropertyChange const & change) } void -TriggerStopper::ui_parameter_changed (std::string const& p) +TriggerMaster::set_default_colors () +{ + set_fill_color (HSV (UIConfiguration::instance().color("theme:bg")).darker(0.25).color ()); + name_text->set_color (UIConfiguration::instance().color("neutral:foreground")); + stop_shape->set_fill_color (UIConfiguration::instance().color("neutral:midground")); +} + + +void +TriggerMaster::ui_parameter_changed (std::string const& p) { if (p == "color-file") { - set_fill_color (UIConfiguration::instance().color("gtk_background")); - name_text->set_color (UIConfiguration::instance().color("neutral:foreground")); - play_shape->set_fill_color (UIConfiguration::instance().color("neutral:midground")); + set_default_colors(); } - redraw(); } + //==================================== -CueStopper::CueStopper (Item* parent, boost::shared_ptr t) +CueMaster::CueMaster (Item* parent) : ArdourCanvas::Rectangle (parent) - , _triggerbox (t) { set_layout_sensitive(true); //why??? name = X_("trigger stopper"); - Event.connect (sigc::mem_fun (*this, &CueStopper::event_handler)); + Event.connect (sigc::mem_fun (*this, &CueMaster::event_handler)); - play_shape = new ArdourCanvas::Polygon (this); - play_shape->set_outline (false); - play_shape->name = X_("stopbutton"); - play_shape->set_ignore_events (true); - play_shape->show (); + stop_shape = new ArdourCanvas::Polygon (this); + stop_shape->set_outline (false); + stop_shape->set_fill (true); + stop_shape->name = X_("stopbutton"); + stop_shape->set_ignore_events (true); + stop_shape->show (); name_text = new Text (this); - name_text->set("Now Playing"); + name_text->set(""); name_text->set_ignore_events (false); /* prefs (theme colors) */ - UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &CueStopper::ui_parameter_changed)); - - /* trigger changes */ - _triggerbox->PropertyChanged.connect (trigger_prop_connection, MISSING_INVALIDATOR, boost::bind (&CueStopper::prop_change, this, _1), gui_context()); - - /* route changes */ -// dynamic_cast (_triggerbox->owner())->presentation_info().Change.connect (owner_prop_connection, MISSING_INVALIDATOR, boost::bind (&CueStopper::owner_prop_change, this, _1), gui_context()); - - PropertyChange changed; - changed.add (ARDOUR::Properties::name); - changed.add (ARDOUR::Properties::running); - prop_change (changed); - - ui_parameter_changed("color-file"); + UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &CueMaster::ui_parameter_changed)); + set_default_colors(); } -CueStopper::~CueStopper () +CueMaster::~CueMaster () { } void -CueStopper::render (Rect const & area, Cairo::RefPtr context) const +CueMaster::render (Rect const & area, Cairo::RefPtr context) const { /* Note that item_to_window() already takes _position into account (as part of item_to_canvas() @@ -351,77 +324,39 @@ CueStopper::render (Rect const & area, Cairo::RefPtr context) co context->fill (); } - //black area around text - set_source_rgba (context, UIConfiguration::instance().color ("theme:bg2")); - context->rectangle (16*scale, 1*scale, _rect.width()-2*scale, _rect.height()-2*scale); - context->fill (); - -#if 0 -//text -Glib::RefPtr layout (Pango::Layout::create (context)); -layout->set_font_description (UIConfiguration::instance().get_NormalFont()); -layout->set_text (name_text->text()); -//text clipping rect -context->save(); -context->rectangle (2, 1, width-4, height-2); -context->clip(); -//calculate the text size -int tw, th; -layout->get_pixel_size (tw, th); -//render the text (centered vertically) -context->translate( 18*scale, (height/2)-(th/2) ); -set_source_rgba (context, UIConfiguration::instance().color ("neutral:foreground")); -layout->show_in_cairo_context (context); -context->restore (); -#endif - - render_children (area, context); - - //fade-over at right + //fade-over at top uint32_t bg_color = UIConfiguration::instance().color ("theme:bg"); double bg_r,bg_g,bg_b, unused; Gtkmm2ext::color_to_rgba( bg_color, bg_r, bg_g, bg_b, unused); - Cairo::RefPtr left_pattern = Cairo::LinearGradient::create (_rect.width()-12*scale, 0, _rect.width(), 0); - left_pattern->add_color_stop_rgba (0, 0, 0, 0, 0); - left_pattern->add_color_stop_rgba (1, 0, 0, 0, 1); + Cairo::RefPtr left_pattern = Cairo::LinearGradient::create (0, 0, 0, 6.*scale); + left_pattern->add_color_stop_rgba (0, 0, 0, 0, 1); + left_pattern->add_color_stop_rgba (1, 0, 0, 0, 0); context->set_source (left_pattern); - context->rectangle( _rect.width()-12*scale, 2*scale, 10*scale, _rect.height()-4*scale ); + context->rectangle(0, 0, width, 6.*scale); context->fill (); -} -void -CueStopper::owner_prop_change (PropertyChange const & pc) -{ - if (pc.contains (Properties::color)) { - } -} - -void -CueStopper::selection_change () -{ + render_children (area, context); } bool -CueStopper::event_handler (GdkEvent* ev) +CueMaster::event_handler (GdkEvent* ev) { switch (ev->type) { case GDK_BUTTON_PRESS: if (ev->button.button == 1) { - _triggerbox->request_stop_all (); + //TriggerBox::StopAllTriggers (); return true; } break; case GDK_ENTER_NOTIFY: if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) { - play_shape->set_fill_color (UIConfiguration::instance().color("neutral:foregroundest")); + stop_shape->set_fill_color (UIConfiguration::instance().color("neutral:foregroundest")); } - redraw (); break; case GDK_LEAVE_NOTIFY: if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) { - play_shape->set_fill_color (UIConfiguration::instance().color("neutral:midground")); + stop_shape->set_fill_color (UIConfiguration::instance().color("neutral:midground")); } - redraw (); break; default: break; @@ -431,33 +366,13 @@ CueStopper::event_handler (GdkEvent* ev) } void -CueStopper::maybe_update () +CueMaster::maybe_update () { -/* double nbw; - if (!_trigger->active()) { - nbw = 0; - } else { - nbw = _trigger->position_as_fraction () * (_allocation.width() - _allocation.height()); - } - - if (nbw) { - const double scale = UIConfiguration::instance().get_ui_scale(); - ArdourCanvas::Rect r (get()); - - active_bar->set (ArdourCanvas::Rect (r.height() * scale, - (r.y0 + 1) * scale, - (r.height() + nbw - 1) * scale, - (r.y1 - 1) * scale)); - active_bar->show (); - } else { - active_bar->hide (); - } - * */ } void -CueStopper::_size_allocate (ArdourCanvas::Rect const & alloc) +CueMaster::_size_allocate (ArdourCanvas::Rect const & alloc) { Rectangle::_size_allocate (alloc); @@ -474,7 +389,7 @@ CueStopper::_size_allocate (ArdourCanvas::Rect const & alloc) p.push_back (Duple (poly_margin, poly_size)); p.push_back (Duple (poly_size, poly_size)); p.push_back (Duple (poly_size, poly_margin)); - play_shape->set (p); + stop_shape->set (p); float tleft = poly_size + (poly_margin*3); float twidth = width-poly_size-(poly_margin*3); @@ -489,31 +404,18 @@ CueStopper::_size_allocate (ArdourCanvas::Rect const & alloc) } void -CueStopper::prop_change (PropertyChange const & change) +CueMaster::set_default_colors () { - if (change.contains (ARDOUR::Properties::name) - || change.contains (ARDOUR::Properties::running) - ) { - ARDOUR::Trigger *trigger = _triggerbox->currently_playing(); - - if (trigger) { - name_text->set (trigger->region()->name()); - } else { -// name_text->set (""); - } - - redraw(); - } + set_fill_color (HSV (UIConfiguration::instance().color("theme:bg")).darker(0.25).color ()); + name_text->set_color (UIConfiguration::instance().color("neutral:foreground")); + stop_shape->set_fill_color (UIConfiguration::instance().color("neutral:midground")); } void -CueStopper::ui_parameter_changed (std::string const& p) +CueMaster::ui_parameter_changed (std::string const& p) { if (p == "color-file") { - set_fill_color (UIConfiguration::instance().color("gtk_background")); - name_text->set_color (UIConfiguration::instance().color("neutral:foreground")); - play_shape->set_fill_color (UIConfiguration::instance().color("neutral:midground")); + set_default_colors(); } - redraw(); } diff --git a/gtk2_ardour/trigger_stopper.h b/gtk2_ardour/trigger_master.h similarity index 70% rename from gtk2_ardour/trigger_stopper.h rename to gtk2_ardour/trigger_master.h index b6aa593b05..8dbd17fccf 100644 --- a/gtk2_ardour/trigger_stopper.h +++ b/gtk2_ardour/trigger_master.h @@ -17,8 +17,8 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef __ardour_trigger_stopper_h__ -#define __ardour_trigger_stopper_h__ +#ifndef __ardour_trigger_master_h__ +#define __ardour_trigger_master_h__ #include @@ -46,19 +46,19 @@ namespace ArdourCanvas { class Polygon; }; -class TriggerStopper : public ArdourCanvas::Rectangle +class TriggerMaster : public ArdourCanvas::Rectangle { public: - TriggerStopper (ArdourCanvas::Item* canvas, boost::shared_ptr); - ~TriggerStopper (); + TriggerMaster (ArdourCanvas::Item* canvas, boost::shared_ptr); + ~TriggerMaster (); void render (ArdourCanvas::Rect const & area, Cairo::RefPtr context) const; void _size_allocate (ArdourCanvas::Rect const & alloc); - ArdourCanvas::Rectangle* play_button; + ArdourCanvas::Rectangle* stop_button; ArdourCanvas::Rectangle* active_bar; - ArdourCanvas::Polygon* play_shape; + ArdourCanvas::Polygon* stop_shape; ArdourCanvas::Text* name_text; void maybe_update (); @@ -72,46 +72,40 @@ class TriggerStopper : public ArdourCanvas::Rectangle PBD::ScopedConnection trigger_prop_connection; void prop_change (PBD::PropertyChange const & change); - void shape_play_button (); + void shape_stop_button (); PBD::ScopedConnection owner_prop_connection; void owner_prop_change (PBD::PropertyChange const &); void ui_parameter_changed (std::string const& p); + void set_default_colors(); }; -class CueStopper : public ArdourCanvas::Rectangle +class CueMaster : public ArdourCanvas::Rectangle { public: - CueStopper (ArdourCanvas::Item* canvas, boost::shared_ptr); - ~CueStopper (); + CueMaster (ArdourCanvas::Item* canvas); + ~CueMaster (); void render (ArdourCanvas::Rect const & area, Cairo::RefPtr context) const; void _size_allocate (ArdourCanvas::Rect const & alloc); - ArdourCanvas::Rectangle* play_button; - ArdourCanvas::Rectangle* active_bar; - ArdourCanvas::Polygon* play_shape; + ArdourCanvas::Rectangle* stop_button; + ArdourCanvas::Polygon* stop_shape; ArdourCanvas::Text* name_text; void maybe_update (); bool event_handler (GdkEvent*); - void selection_change (); private: - boost::shared_ptr _triggerbox; double poly_size; double poly_margin; - PBD::ScopedConnection trigger_prop_connection; - void prop_change (PBD::PropertyChange const & change); - void shape_play_button (); - - PBD::ScopedConnection owner_prop_connection; - void owner_prop_change (PBD::PropertyChange const &); + void shape_stop_button (); void ui_parameter_changed (std::string const& p); + void set_default_colors(); }; -#endif /* __ardour_trigger_stopper_h__ */ +#endif /* __ardour_trigger_master_h__ */ diff --git a/gtk2_ardour/trigger_page.cc b/gtk2_ardour/trigger_page.cc index 345abdc91f..eb925098ba 100644 --- a/gtk2_ardour/trigger_page.cc +++ b/gtk2_ardour/trigger_page.cc @@ -28,6 +28,8 @@ #include "gtkmm2ext/keyboard.h" #include "gtkmm2ext/window_title.h" +#include "widgets/ardour_spacer.h" + #include "actions.h" #include "ardour_ui.h" #include "gui_thread.h" @@ -36,7 +38,7 @@ #include "trigger_page.h" #include "trigger_strip.h" #include "cuebox_ui.h" -#include "trigger_stopper.h" +#include "trigger_master.h" #include "ui_config.h" #include "utils.h" @@ -45,29 +47,32 @@ #define PX_SCALE(px) std::max ((float)px, rintf ((float)px* UIConfiguration::instance ().get_ui_scale ())) using namespace ARDOUR; +using namespace ArdourWidgets; using namespace Gtkmm2ext; using namespace Gtk; using namespace std; TriggerPage::TriggerPage () : Tabbable (_content, _("Trigger Drom"), X_("trigger")) - , _stopper_widget(32, 16.) + , _master_widget(32, 16.) { load_bindings (); register_actions (); - CueBoxWidget *cue_box = new CueBoxWidget(32, 8*16.); - cue_box->show(); + /* spacer to account for the trigger strip frame */ + ArdourVSpacer *spacer = manage(new ArdourVSpacer()); + spacer->set_size_request(-1,1); + _slot_area_box.pack_start (*spacer, Gtk::PACK_SHRINK); + + CueBoxWidget *cue_box = manage(new CueBoxWidget(32, TriggerBox::default_triggers_per_box*16.)); _slot_area_box.pack_start (*cue_box, Gtk::PACK_SHRINK); - _stopper = new CueStopper(_stopper_widget.root()); - _stopper->show(); - _slot_area_box.pack_start (_stopper_widget, Gtk::PACK_SHRINK); + _master = new CueMaster(_master_widget.root()); + _slot_area_box.pack_start (_master_widget, Gtk::PACK_SHRINK); #if 1 /* Placeholders */ _browser_box.pack_start (*Gtk::manage (new Gtk::Label ("File Browser"))); _parameter_box.pack_start (*Gtk::manage (new Gtk::Label ("Parameter HBox"))); - _slot_area_box.show_all (); _browser_box.show_all (); _parameter_box.show_all (); #endif @@ -101,7 +106,7 @@ TriggerPage::TriggerPage () _strip_group_box.show (); _strip_scroller.show (); _strip_packer.show (); - _slot_area_box.show (); + _slot_area_box.show_all (); _browser_box.show (); _parameter_box.show (); @@ -131,6 +136,7 @@ TriggerPage::TriggerPage () TriggerPage::~TriggerPage () { + delete _master; } Gtk::Window* diff --git a/gtk2_ardour/trigger_page.h b/gtk2_ardour/trigger_page.h index 28213189e9..aea0012861 100644 --- a/gtk2_ardour/trigger_page.h +++ b/gtk2_ardour/trigger_page.h @@ -32,7 +32,7 @@ #include "fitted_canvas_widget.h" class TriggerStrip; -class CueStopper; +class CueMaster; class TriggerPage : public ArdourWidgets::Tabbable, public ARDOUR::SessionHandlePtr, public PBD::ScopedConnectionList { @@ -79,8 +79,8 @@ private: Gtk::VBox _browser_box; Gtk::HBox _parameter_box; - FittedCanvasWidget _stopper_widget; - CueStopper *_stopper; + FittedCanvasWidget _master_widget; + CueMaster *_master; std::list _strips; sigc::connection _fast_screen_update_connection; diff --git a/gtk2_ardour/trigger_strip.cc b/gtk2_ardour/trigger_strip.cc index c93a521899..3aee62a172 100644 --- a/gtk2_ardour/trigger_strip.cc +++ b/gtk2_ardour/trigger_strip.cc @@ -38,7 +38,7 @@ #include "mixer_ui.h" #include "plugin_selector.h" #include "plugin_ui.h" -#include "trigger_stopper.h" +#include "trigger_master.h" #include "trigger_strip.h" #include "ui_config.h" @@ -61,9 +61,9 @@ TriggerStrip::TriggerStrip (Session* s, boost::shared_ptr rt) , RouteUI (s) , _clear_meters (true) , _pb_selection () - , _stopper_widget ( -1, 16 ) + , _master_widget ( -1, 16 ) , _processor_box (s, boost::bind (&TriggerStrip::plugin_selector, this), _pb_selection, 0) - , _trigger_display (*rt->triggerbox (), -1., 8*16.) + , _trigger_display (*rt->triggerbox (), -1., TriggerBox::default_triggers_per_box*16.) , _panners (s) , _level_meter (s) { @@ -125,8 +125,6 @@ TriggerStrip::init () /* strip layout */ global_vpacker.set_spacing (2); - global_vpacker.pack_start (_trigger_display, Gtk::PACK_SHRINK); - global_vpacker.pack_start (_stopper_widget, Gtk::PACK_SHRINK); global_vpacker.pack_start (_processor_box, true, true); global_vpacker.pack_start (_name_button, Gtk::PACK_SHRINK); global_vpacker.pack_start (_panners, Gtk::PACK_SHRINK); @@ -147,7 +145,14 @@ TriggerStrip::init () global_frame.set_shadow_type (Gtk::SHADOW_IN); global_frame.set_name ("BaseFrame"); - add (global_frame); + Gtk::VBox *outer_vpacker = manage(new Gtk::VBox); + + outer_vpacker->pack_start (_trigger_display, Gtk::PACK_SHRINK); + outer_vpacker->pack_start (_master_widget, Gtk::PACK_SHRINK); + outer_vpacker->pack_start (global_frame, true, true); + outer_vpacker->show(); + + add (*outer_vpacker); /* Signals */ _name_button.signal_button_press_event ().connect (sigc::mem_fun (*this, &TriggerStrip::name_button_press), false); @@ -157,7 +162,7 @@ TriggerStrip::init () ArdourMeter::ResetGroupPeakDisplays.connect (sigc::mem_fun (*this, &TriggerStrip::reset_group_peak_display)); /* Visibility */ - _stopper_widget.show (); + _master_widget.show (); _name_button.show (); _trigger_display.show (); _processor_box.show (); @@ -186,7 +191,7 @@ TriggerStrip::set_route (boost::shared_ptr rt) { RouteUI::set_route (rt); - _stopper = new TriggerStopper(_stopper_widget.root(), _route->triggerbox()); + _master = new TriggerMaster(_master_widget.root(), _route->triggerbox()); _processor_box.set_route (rt); diff --git a/gtk2_ardour/trigger_strip.h b/gtk2_ardour/trigger_strip.h index 08a71c2b98..6a6efecff2 100644 --- a/gtk2_ardour/trigger_strip.h +++ b/gtk2_ardour/trigger_strip.h @@ -41,7 +41,7 @@ #include "triggerbox_ui.h" class PluginSelector; -class TriggerStopper; +class TriggerMaster; class TriggerStrip : public AxisView, public RouteUI, public Gtk::EventBox { @@ -120,8 +120,8 @@ private: Gtk::Table volume_table; /* Widgets */ - FittedCanvasWidget _stopper_widget; - TriggerStopper *_stopper; + FittedCanvasWidget _master_widget; + TriggerMaster *_master; ArdourWidgets::ArdourButton _name_button; ProcessorBox _processor_box; diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index b08d3a20f6..c84b5468df 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -302,7 +302,7 @@ gtk2_ardour_sources = [ 'transpose_dialog.cc', 'trigger_page.cc', 'trigger_strip.cc', - 'trigger_stopper.cc', + 'trigger_master.cc', 'trigger_ui.cc', 'triggerbox_ui.cc', 'ui_config.cc',