summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ardour_button.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-11-03 21:35:20 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-11-03 21:35:20 +0000
commit708fb03e87676d4fb125e0d78bd297e705a8e735 (patch)
treeb105af80b058dc77f9577385a9a07f00888e1bef /gtk2_ardour/ardour_button.cc
parent712d7fd5e4e58af842f33408904b3936647ef0c3 (diff)
use ArdourButton for the (radio) buttons in the monitor section; fix ArdourButton, MonitorSection and CairoWidget to work with radio semantics
git-svn-id: svn://localhost/ardour2/branches/3.0@10430 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/ardour_button.cc')
-rw-r--r--gtk2_ardour/ardour_button.cc49
1 files changed, 41 insertions, 8 deletions
diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc
index 580f893099..ff1ab12cce 100644
--- a/gtk2_ardour/ardour_button.cc
+++ b/gtk2_ardour/ardour_button.cc
@@ -65,7 +65,25 @@ ArdourButton::ArdourButton (Element e)
, _led_rect (0)
{
ColorsChanged.connect (sigc::mem_fun (*this, &ArdourButton::color_handler));
- StateChanged.connect (sigc::mem_fun (*this, &ArdourButton::state_handler));
+}
+
+ArdourButton::ArdourButton (const std::string& str, Element e)
+ : _elements (e)
+ , _act_on_release (true)
+ , _text_width (0)
+ , _text_height (0)
+ , _diameter (11.0)
+ , _corner_radius (9.0)
+ , edge_pattern (0)
+ , fill_pattern (0)
+ , led_inset_pattern (0)
+ , reflection_pattern (0)
+ , _led_left (false)
+ , _fixed_diameter (true)
+ , _distinct_led_click (false)
+ , _led_rect (0)
+{
+ set_text (str);
}
ArdourButton::~ArdourButton()
@@ -226,12 +244,6 @@ ArdourButton::render (cairo_t* cr)
}
void
-ArdourButton::state_handler ()
-{
- set_colors ();
-}
-
-void
ArdourButton::set_diameter (float d)
{
_diameter = (d*2) + 5.0;
@@ -427,6 +439,7 @@ ArdourButton::on_button_release_event (GdkEventButton *ev)
if (_act_on_release) {
if (_action) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (_action);
_action->activate ();
return true;
}
@@ -497,7 +510,7 @@ ArdourButton::set_related_action (RefPtr<Action> act)
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (_action);
if (tact) {
tact->signal_toggled().connect (sigc::mem_fun (*this, &ArdourButton::action_toggled));
- }
+ }
}
void
@@ -562,3 +575,23 @@ ArdourButton::set_image (const RefPtr<Gdk::Pixbuf>& img)
queue_draw ();
}
+void
+ArdourButton::set_active_state (Gtkmm2ext::ActiveState s)
+{
+ bool changed = (_active_state != s);
+ CairoWidget::set_active_state (s);
+ if (changed) {
+ set_colors ();
+ }
+}
+
+void
+ArdourButton::set_visual_state (Gtkmm2ext::VisualState s)
+{
+ bool changed = (_visual_state != s);
+ CairoWidget::set_visual_state (s);
+ if (changed) {
+ set_colors ();
+ }
+}
+