mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 14:54:56 +01:00
trigger_ui: remove update timer, and consolidate set_widget_colors() code
This commit is contained in:
parent
07738e815b
commit
3b9fb818e8
2 changed files with 43 additions and 115 deletions
|
|
@ -76,7 +76,7 @@ TriggerEntry::TriggerEntry (Item* item, TriggerReference tr)
|
||||||
set_outline (false);
|
set_outline (false);
|
||||||
|
|
||||||
play_button = new ArdourCanvas::Rectangle (this);
|
play_button = new ArdourCanvas::Rectangle (this);
|
||||||
play_button->set_outline (false);
|
play_button->set_outline (true);
|
||||||
play_button->set_fill (true);
|
play_button->set_fill (true);
|
||||||
play_button->name = string_compose ("playbutton %1", tr.slot);
|
play_button->name = string_compose ("playbutton %1", tr.slot);
|
||||||
play_button->show ();
|
play_button->show ();
|
||||||
|
|
@ -107,7 +107,7 @@ TriggerEntry::TriggerEntry (Item* item, TriggerReference tr)
|
||||||
|
|
||||||
/* watch for change in theme */
|
/* watch for change in theme */
|
||||||
UIConfiguration::instance ().ParameterChanged.connect (sigc::mem_fun (*this, &TriggerEntry::ui_parameter_changed));
|
UIConfiguration::instance ().ParameterChanged.connect (sigc::mem_fun (*this, &TriggerEntry::ui_parameter_changed));
|
||||||
set_default_colors ();
|
set_widget_colors ();
|
||||||
|
|
||||||
/* owner color changes (?) */
|
/* owner color changes (?) */
|
||||||
dynamic_cast<Stripable*> (tref.box->owner ())->presentation_info ().Change.connect (owner_prop_connection, MISSING_INVALIDATOR, boost::bind (&TriggerEntry::owner_prop_change, this, _1), gui_context ());
|
dynamic_cast<Stripable*> (tref.box->owner ())->presentation_info ().Change.connect (owner_prop_connection, MISSING_INVALIDATOR, boost::bind (&TriggerEntry::owner_prop_change, this, _1), gui_context ());
|
||||||
|
|
@ -136,19 +136,7 @@ TriggerEntry::owner_color_changed ()
|
||||||
void
|
void
|
||||||
TriggerEntry::selection_change ()
|
TriggerEntry::selection_change ()
|
||||||
{
|
{
|
||||||
if (PublicEditor::instance ().get_selection ().selected (this)) {
|
set_widget_colors ();
|
||||||
name_button->set_outline_color (UIConfiguration::instance ().color ("alert:red"));
|
|
||||||
} else {
|
|
||||||
set_default_colors ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
TriggerEntry::maybe_update ()
|
|
||||||
{
|
|
||||||
if (trigger ()->active ()) {
|
|
||||||
redraw ();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -310,18 +298,6 @@ TriggerEntry::draw_launch_icon (Cairo::RefPtr<Cairo::Context> context, float sz,
|
||||||
|
|
||||||
bool active = trigger ()->active ();
|
bool active = trigger ()->active ();
|
||||||
|
|
||||||
if (active && trigger ()->launch_style () == Trigger::Toggle) {
|
|
||||||
/* clicking again will Stop this clip */
|
|
||||||
set_source_rgba (context, UIConfiguration::instance ().color ("neutral:foreground"));
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!trigger ()->region ()) {
|
if (!trigger ()->region ()) {
|
||||||
/* no content in this slot, it is only a Stop button */
|
/* no content in this slot, it is only a Stop button */
|
||||||
context->move_to (margin, margin);
|
context->move_to (margin, margin);
|
||||||
|
|
@ -508,7 +484,6 @@ TriggerEntry::render (ArdourCanvas::Rect const& area, Cairo::RefPtr<Cairo::Conte
|
||||||
context->set_identity_matrix ();
|
context->set_identity_matrix ();
|
||||||
context->translate (self.x0, self.y0 - 0.5);
|
context->translate (self.x0, self.y0 - 0.5);
|
||||||
context->translate (width - height, 0); // right side of the widget
|
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);
|
draw_follow_icon (context, trigger ()->follow_action (0), height, scale);
|
||||||
context->set_identity_matrix ();
|
context->set_identity_matrix ();
|
||||||
}
|
}
|
||||||
|
|
@ -525,7 +500,7 @@ TriggerEntry::on_trigger_changed (PropertyChange const& change)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
name_text->set_color (trigger ()->color ());
|
set_widget_colors(); //depending on the state, this might change a color and queue a redraw
|
||||||
|
|
||||||
PropertyChange interesting_stuff;
|
PropertyChange interesting_stuff;
|
||||||
interesting_stuff.add (ARDOUR::Properties::name);
|
interesting_stuff.add (ARDOUR::Properties::name);
|
||||||
|
|
@ -545,34 +520,47 @@ TriggerEntry::on_trigger_changed (PropertyChange const& change)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
TriggerEntry::set_default_colors ()
|
TriggerEntry::set_widget_colors (TriggerEntry::EnteredState es)
|
||||||
{
|
{
|
||||||
set_fill_color (UIConfiguration::instance ().color ("theme:bg"));
|
color_t bg_col = UIConfiguration::instance ().color ("theme:bg");
|
||||||
play_button->set_fill_color (UIConfiguration::instance ().color ("theme:bg"));
|
|
||||||
name_button->set_fill_color (UIConfiguration::instance ().color ("theme:bg"));
|
//alternating darker bands
|
||||||
name_button->set_outline_color (UIConfiguration::instance ().color ("theme:bg"));
|
|
||||||
follow_button->set_fill_color (UIConfiguration::instance ().color ("theme:bg"));
|
|
||||||
if ((tref.slot / 2) % 2 == 0) {
|
if ((tref.slot / 2) % 2 == 0) {
|
||||||
set_fill_color (HSV (fill_color ()).darker (0.15).color ());
|
bg_col = HSV (bg_col).darker (0.15).color ();
|
||||||
play_button->set_fill_color (HSV (fill_color ()).darker (0.15).color ());
|
|
||||||
name_button->set_fill_color (HSV (fill_color ()).darker (0.15).color ());
|
|
||||||
name_button->set_outline_color (HSV (fill_color ()).darker (0.15).color ());
|
|
||||||
follow_button->set_fill_color (HSV (fill_color ()).darker (0.15).color ());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_fill_color (bg_col);
|
||||||
|
|
||||||
|
//child widgets highlight when entered
|
||||||
|
color_t hilite = HSV (bg_col).lighter (0.15).color ();
|
||||||
|
|
||||||
|
play_button->set_fill_color ((es==PlayEntered) ? hilite : bg_col);
|
||||||
|
play_button->set_outline_color ((es==PlayEntered) ? hilite : bg_col);
|
||||||
|
|
||||||
|
name_button->set_fill_color ((es==NameEntered) ? hilite : bg_col);
|
||||||
|
name_button->set_outline_color ((es==NameEntered) ? hilite : bg_col);
|
||||||
|
|
||||||
|
follow_button->set_fill_color ((es==FollowEntered) ? hilite : bg_col);
|
||||||
|
|
||||||
|
name_text->set_color (trigger()->color());
|
||||||
name_text->set_fill_color (UIConfiguration::instance ().color ("neutral:midground"));
|
name_text->set_fill_color (UIConfiguration::instance ().color ("neutral:midground"));
|
||||||
|
|
||||||
/*preserve selection border*/
|
/*preserve selection border*/
|
||||||
if (PublicEditor::instance ().get_selection ().selected (this)) {
|
if (PublicEditor::instance ().get_selection ().selected (this)) {
|
||||||
name_button->set_outline_color (UIConfiguration::instance ().color ("alert:red"));
|
name_button->set_outline_color (UIConfiguration::instance ().color ("alert:red"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*draw a box around 'queued' trigger*/
|
||||||
|
if (!trigger()->active() && trigger()->box().currently_playing () == trigger()) {
|
||||||
|
play_button->set_outline_color (UIConfiguration::instance ().color ("neutral:foreground"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
TriggerEntry::ui_parameter_changed (std::string const& p)
|
TriggerEntry::ui_parameter_changed (std::string const& p)
|
||||||
{
|
{
|
||||||
if (p == "color-file") {
|
if (p == "color-file") {
|
||||||
set_default_colors ();
|
set_widget_colors ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -582,28 +570,16 @@ TriggerEntry::name_button_event (GdkEvent* ev)
|
||||||
switch (ev->type) {
|
switch (ev->type) {
|
||||||
case GDK_ENTER_NOTIFY:
|
case GDK_ENTER_NOTIFY:
|
||||||
if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) {
|
if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) {
|
||||||
set_default_colors ();
|
set_widget_colors (NameEntered);
|
||||||
name_button->set_fill_color (HSV (fill_color ()).lighter (0.15).color ());
|
|
||||||
name_button->set_outline_color (HSV (fill_color ()).lighter (0.15).color ());
|
|
||||||
follow_button->set_fill_color (HSV (fill_color ()).lighter (0.15).color ());
|
|
||||||
play_button->set_fill_color (HSV (fill_color ()).lighter (0.15).color ());
|
|
||||||
/*preserve selection border*/
|
|
||||||
if (PublicEditor::instance ().get_selection ().selected (this)) {
|
|
||||||
name_button->set_outline_color (UIConfiguration::instance ().color ("alert:red"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GDK_LEAVE_NOTIFY:
|
case GDK_LEAVE_NOTIFY:
|
||||||
if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) {
|
if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) {
|
||||||
set_default_colors ();
|
set_widget_colors (NoneEntered);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GDK_BUTTON_PRESS:
|
case GDK_BUTTON_PRESS:
|
||||||
PublicEditor::instance ().get_selection ().set (this);
|
PublicEditor::instance ().get_selection ().set (this);
|
||||||
/* a side-effect of selection-change is that the slot's color is reset. retain the "entered-color" here: */
|
|
||||||
name_button->set_fill_color (HSV (fill_color ()).lighter (0.15).color ());
|
|
||||||
name_button->set_outline_color (UIConfiguration::instance ().color ("alert:red"));
|
|
||||||
follow_button->set_fill_color (HSV (fill_color ()).lighter (0.15).color ());
|
|
||||||
break;
|
break;
|
||||||
case GDK_2BUTTON_PRESS:
|
case GDK_2BUTTON_PRESS:
|
||||||
edit_trigger ();
|
edit_trigger ();
|
||||||
|
|
@ -680,13 +656,12 @@ TriggerEntry::play_button_event (GdkEvent* ev)
|
||||||
break;
|
break;
|
||||||
case GDK_ENTER_NOTIFY:
|
case GDK_ENTER_NOTIFY:
|
||||||
if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) {
|
if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) {
|
||||||
set_default_colors ();
|
set_widget_colors (PlayEntered);
|
||||||
play_button->set_fill_color (HSV (fill_color ()).lighter (0.15).color ());
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GDK_LEAVE_NOTIFY:
|
case GDK_LEAVE_NOTIFY:
|
||||||
if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) {
|
if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) {
|
||||||
set_default_colors ();
|
set_widget_colors (NoneEntered);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -710,13 +685,12 @@ TriggerEntry::follow_button_event (GdkEvent* ev)
|
||||||
break;
|
break;
|
||||||
case GDK_ENTER_NOTIFY:
|
case GDK_ENTER_NOTIFY:
|
||||||
if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) {
|
if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) {
|
||||||
set_default_colors ();
|
set_widget_colors (FollowEntered);
|
||||||
follow_button->set_fill_color (HSV (fill_color ()).lighter (0.15).color ());
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GDK_LEAVE_NOTIFY:
|
case GDK_LEAVE_NOTIFY:
|
||||||
if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) {
|
if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) {
|
||||||
set_default_colors ();
|
set_widget_colors (NoneEntered);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -772,7 +746,6 @@ TriggerBoxUI::~TriggerBoxUI ()
|
||||||
functor from the signal when they are destroyed).
|
functor from the signal when they are destroyed).
|
||||||
*/
|
*/
|
||||||
_selection_connection.disconnect ();
|
_selection_connection.disconnect ();
|
||||||
_update_connection.disconnect ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -1017,26 +990,6 @@ TriggerBoxUI::drag_data_get (Glib::RefPtr<Gdk::DragContext> const&, Gtk::Selecti
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
TriggerBoxUI::start_updating ()
|
|
||||||
{
|
|
||||||
_update_connection = Timers::rapid_connect (sigc::mem_fun (*this, &TriggerBoxUI::rapid_update));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
TriggerBoxUI::stop_updating ()
|
|
||||||
{
|
|
||||||
_update_connection.disconnect ();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
TriggerBoxUI::rapid_update ()
|
|
||||||
{
|
|
||||||
for (auto& slot : _slots) {
|
|
||||||
slot->maybe_update ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ********************************************** */
|
/* ********************************************** */
|
||||||
|
|
||||||
TriggerBoxWidget::TriggerBoxWidget (float w, float h)
|
TriggerBoxWidget::TriggerBoxWidget (float w, float h)
|
||||||
|
|
@ -1061,27 +1014,4 @@ TriggerBoxWidget::set_triggerbox (TriggerBox* tb)
|
||||||
|
|
||||||
ui = new TriggerBoxUI (root (), *tb);
|
ui = new TriggerBoxUI (root (), *tb);
|
||||||
repeat_size_allocation ();
|
repeat_size_allocation ();
|
||||||
|
|
||||||
if (is_mapped ()) {
|
|
||||||
ui->start_updating ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
TriggerBoxWidget::on_map ()
|
|
||||||
{
|
|
||||||
FittedCanvasWidget::on_map ();
|
|
||||||
|
|
||||||
if (ui) {
|
|
||||||
ui->start_updating ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
TriggerBoxWidget::on_unmap ()
|
|
||||||
{
|
|
||||||
FittedCanvasWidget::on_unmap ();
|
|
||||||
if (ui) {
|
|
||||||
ui->stop_updating ();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,13 +60,19 @@ public:
|
||||||
void render (ArdourCanvas::Rect const& area, Cairo::RefPtr<Cairo::Context> context) const;
|
void render (ArdourCanvas::Rect const& area, Cairo::RefPtr<Cairo::Context> context) const;
|
||||||
|
|
||||||
void _size_allocate (ArdourCanvas::Rect const&);
|
void _size_allocate (ArdourCanvas::Rect const&);
|
||||||
void maybe_update ();
|
|
||||||
|
|
||||||
void on_trigger_changed (PBD::PropertyChange const& change);
|
void on_trigger_changed (PBD::PropertyChange const& change);
|
||||||
|
|
||||||
void selection_change ();
|
void selection_change ();
|
||||||
|
|
||||||
void set_default_colors ();
|
enum EnteredState {
|
||||||
|
PlayEntered,
|
||||||
|
NameEntered,
|
||||||
|
FollowEntered,
|
||||||
|
NoneEntered
|
||||||
|
};
|
||||||
|
|
||||||
|
void set_widget_colors (TriggerEntry::EnteredState es=NoneEntered);
|
||||||
|
|
||||||
bool play_button_event (GdkEvent*);
|
bool play_button_event (GdkEvent*);
|
||||||
bool name_button_event (GdkEvent*);
|
bool name_button_event (GdkEvent*);
|
||||||
|
|
@ -90,9 +96,6 @@ public:
|
||||||
TriggerBoxUI (ArdourCanvas::Item* parent, ARDOUR::TriggerBox&);
|
TriggerBoxUI (ArdourCanvas::Item* parent, ARDOUR::TriggerBox&);
|
||||||
~TriggerBoxUI ();
|
~TriggerBoxUI ();
|
||||||
|
|
||||||
void start_updating ();
|
|
||||||
void stop_updating ();
|
|
||||||
|
|
||||||
void _size_allocate (ArdourCanvas::Rect const&);
|
void _size_allocate (ArdourCanvas::Rect const&);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -108,7 +111,6 @@ private:
|
||||||
Glib::RefPtr<Gtk::TargetList> _dnd_src;
|
Glib::RefPtr<Gtk::TargetList> _dnd_src;
|
||||||
|
|
||||||
void build ();
|
void build ();
|
||||||
void rapid_update ();
|
|
||||||
|
|
||||||
void selection_changed ();
|
void selection_changed ();
|
||||||
|
|
||||||
|
|
@ -125,7 +127,6 @@ private:
|
||||||
|
|
||||||
uint64_t slot_at_y (int) const;
|
uint64_t slot_at_y (int) const;
|
||||||
|
|
||||||
sigc::connection _update_connection;
|
|
||||||
sigc::connection _selection_connection;
|
sigc::connection _selection_connection;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -136,9 +137,6 @@ public:
|
||||||
|
|
||||||
void set_triggerbox (ARDOUR::TriggerBox* tb);
|
void set_triggerbox (ARDOUR::TriggerBox* tb);
|
||||||
|
|
||||||
void on_map ();
|
|
||||||
void on_unmap ();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TriggerBoxUI* ui;
|
TriggerBoxUI* ui;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue