summaryrefslogtreecommitdiff
path: root/gtk2_ardour/led.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-05-06 01:31:48 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-05-06 01:31:48 +0000
commitc52a0d1efc8cc6c506f9f224df980a2416818552 (patch)
treeec2809dd1238aa8c3f17d46c126967625cb9a2d4 /gtk2_ardour/led.cc
parent8c423ea2284289a59e1cd549e7661114fa978ec8 (diff)
relayout solo led stuff, as per the boss' requests :)
git-svn-id: svn://localhost/ardour2/branches/3.0@7069 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/led.cc')
-rw-r--r--gtk2_ardour/led.cc58
1 files changed, 49 insertions, 9 deletions
diff --git a/gtk2_ardour/led.cc b/gtk2_ardour/led.cc
index c751eb91e0..e1a98da228 100644
--- a/gtk2_ardour/led.cc
+++ b/gtk2_ardour/led.cc
@@ -30,6 +30,8 @@ using namespace Glib;
LED::LED()
: _visual_state (0)
, _active (false)
+ , _diameter (0.0)
+ , _fixed_diameter (false)
, _red (0.0)
, _green (1.0)
, _blue (0.0)
@@ -44,49 +46,64 @@ LED::~LED()
void
LED::render (cairo_t* cr)
{
- float diameter = std::min (_width, _height);
+ if (!_fixed_diameter) {
+ _diameter = std::min (_width, _height);
+ }
//background
+
+ RefPtr<Style> style = get_style();
+ Color c;
+
+ switch (_visual_state) {
+ case 0:
+ c = style->get_bg (STATE_NORMAL);
+ break;
+ default:
+ c = style->get_bg (STATE_ACTIVE);
+ break;
+ }
+
cairo_rectangle(cr, 0, 0, _width, _height);
cairo_stroke_preserve(cr);
- cairo_set_source_rgb(cr, 0, 0, 0);
+ cairo_set_source_rgb(cr, c.get_green_p(), c.get_red_p(), c.get_blue_p());
cairo_fill(cr);
cairo_translate(cr, _width/2, _height/2);
#if 0
//inset
- cairo_pattern_t *pat = cairo_pattern_create_linear (0.0, 0.0, 0.0, diameter);
+ cairo_pattern_t *pat = cairo_pattern_create_linear (0.0, 0.0, 0.0, _diameter);
cairo_pattern_add_color_stop_rgba (pat, 0, 0,0,0, 0.4);
cairo_pattern_add_color_stop_rgba (pat, 1, 1,1,1, 0.7);
- cairo_arc (cr, 0, 0, diameter/2, 0, 2 * M_PI);
+ cairo_arc (cr, 0, 0, _diameter/2, 0, 2 * M_PI);
cairo_set_source (cr, pat);
cairo_fill (cr);
cairo_pattern_destroy (pat);
//black ring
cairo_set_source_rgb (cr, 0, 0, 0);
- cairo_arc (cr, 0, 0, diameter/2-2, 0, 2 * M_PI);
+ cairo_arc (cr, 0, 0, _diameter/2-2, 0, 2 * M_PI);
cairo_fill(cr);
//knob color
cairo_set_source_rgba (cr, _red, _green, _blue, _active ? 0.8 : 0.2);
- cairo_arc (cr, 0, 0, diameter/2-3, 0, 2 * M_PI);
+ cairo_arc (cr, 0, 0, _diameter/2-3, 0, 2 * M_PI);
cairo_fill(cr);
//reflection
cairo_scale(cr, 0.7, 0.7);
- cairo_pattern_t *pat2 = cairo_pattern_create_linear (0.0, 0.0, 0.0, diameter/2-3);
+ cairo_pattern_t *pat2 = cairo_pattern_create_linear (0.0, 0.0, 0.0, _diameter/2-3);
cairo_pattern_add_color_stop_rgba (pat2, 0, 1,1,1, _active ? 0.4 : 0.2);
cairo_pattern_add_color_stop_rgba (pat2, 1, 1,1,1, 0.0);
- cairo_arc (cr, 0, 0, diameter/2-3, 0, 2 * M_PI);
+ cairo_arc (cr, 0, 0, _diameter/2-3, 0, 2 * M_PI);
cairo_set_source (cr, pat2);
cairo_fill (cr);
cairo_pattern_destroy (pat2);
#endif
cairo_set_source_rgba (cr, _red, _green, _blue, 1.0);
- cairo_arc (cr, 0, 0, diameter/2-5, 0, 2 * M_PI);
+ cairo_arc (cr, 0, 0, _diameter/2-5, 0, 2 * M_PI);
cairo_fill(cr);
cairo_stroke (cr);
@@ -118,3 +135,26 @@ LED::set_visual_state (int32_t s)
set_dirty ();
}
}
+
+void
+LED::set_diameter (float d)
+{
+ _diameter = (d*2) + 5.0;
+
+ if (_diameter != 0.0) {
+ _fixed_diameter = true;
+ }
+
+ set_dirty ();
+}
+
+void
+LED::on_size_request (Gtk::Requisition* req)
+{
+ if (_fixed_diameter) {
+ req->width = _diameter;
+ req->height = _diameter;
+ } else {
+ CairoWidget::on_size_request (req);
+ }
+}