start using ActionMap in preference to ActionManager
[ardour.git] / gtk2_ardour / led.cc
index 9a93e048d1d495247344f1115246137ded9d547d..6112f9c429547f76a48892a77ae1a634d4da4a52 100644 (file)
 using namespace Gdk;
 using namespace Gtk;
 using namespace Glib;
+using namespace Gtkmm2ext;
 
 LED::LED()
-        : _visual_state (0)
-        , _active (false)
-        , _diameter (0.0)
-        , _fixed_diameter (false)
-        , _red (0.0)
-        , _green (1.0)
-        , _blue (0.0)
-
+       : _diameter (0.0)
+       , _red (0.0)
+       , _green (1.0)
+       , _blue (0.0)
+       , _fixed_diameter (false)
 {
 }
 
@@ -44,41 +42,42 @@ LED::~LED()
 }
 
 void
-LED::render (cairo_t* cr)
+LED::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t*)
 {
-        if (!_fixed_diameter) {
-                _diameter = std::min (_width, _height);
-        }
-
-        //background
+       cairo_t* cr = ctx->cobj();
+       if (!_fixed_diameter) {
+               _diameter = std::min (get_width(), get_height());
+       }
 
-        Widget* parent;
-        RefPtr<Style> style;
-        Color c;
+       //background
 
-        parent = get_parent ();
+       Widget* parent;
+       RefPtr<Style> style;
+       Color c;
 
-        while (parent && !parent->get_has_window()) {
-                parent = parent->get_parent();
-        }
+       parent = get_parent ();
 
-        if (parent && parent->get_has_window()) {
-                style = parent->get_style ();
-                c = style->get_bg (parent->get_state());
-        } else {
-                style = get_style ();
-                c = style->get_bg (get_state());
-        }
+       while (parent && !parent->get_has_window()) {
+               parent = parent->get_parent();
+       }
 
+       if (parent && parent->get_has_window()) {
+               style = parent->get_style ();
+               c = style->get_bg (parent->get_state());
+       } else {
+               style = get_style ();
+               c = style->get_bg (get_state());
+       }
 
-        cairo_rectangle(cr, 0, 0, _width, _height);
-        cairo_stroke_preserve(cr);
-        cairo_set_source_rgb(cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
-        cairo_fill(cr);
+#if 0
+       cairo_rectangle(cr, 0, 0, _width, _height);
+       cairo_stroke_preserve(cr);
+       cairo_set_source_rgb(cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
+       cairo_fill(cr);
+#endif
 
-       cairo_translate(cr, _width/2, _height/2);
+       cairo_translate(cr, get_width()/2, get_height()/2);
 
-#if 0
        //inset
        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);
@@ -94,86 +93,71 @@ LED::render (cairo_t* cr)
        cairo_fill(cr);
 
        //knob color
-       cairo_set_source_rgba (cr, _red, _green, _blue, _active ? 0.8 : 0.2);
+       cairo_set_source_rgba (cr, _red, _green, _blue, (active_state() == Gtkmm2ext::ExplicitActive) ? 0.8 : 0.2);
        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_add_color_stop_rgba (pat2, 0, 1,1,1, _active ? 0.4 : 0.2);
+       cairo_pattern_add_color_stop_rgba (pat2, 0, 1,1,1, active_state() ? 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_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_fill(cr);
 
        cairo_stroke (cr);
 }
 
-void
-LED::set_visual_state (int32_t s)
-{
-        if (s != _visual_state) {
-
-                _visual_state = s;
-                set_colors_from_style ();
-        }
-}
-
 void
 LED::set_diameter (float d)
 {
-        _diameter = (d*2) + 5.0;
+       _diameter = (d*2) + 5.0;
 
-        if (_diameter != 0.0) {
-                _fixed_diameter = true;
-        }
+       if (_diameter != 0.0) {
+               _fixed_diameter = true;
+       }
 
-        set_dirty ();
+       set_dirty ();
 }
 
 void
 LED::on_realize ()
 {
-        set_colors_from_style ();
-        CairoWidget::on_realize ();
+       set_colors_from_style ();
+       CairoWidget::on_realize ();
 }
 
 void
 LED::on_size_request (Gtk::Requisition* req)
 {
-        if (_fixed_diameter) {
-                req->width = _diameter;
-                req->height = _diameter;
-        } else {
-                CairoWidget::on_size_request (req);
-        }
+       if (_fixed_diameter) {
+               req->width = _diameter;
+               req->height = _diameter;
+       } else {
+               CairoWidget::on_size_request (req);
+       }
 }
 
 void
 LED::set_colors_from_style ()
 {
-        RefPtr<Style> style = get_style();
-        Color c;
-
-        switch (_visual_state) {
-        case 0:
-                c = style->get_fg (STATE_NORMAL);
-                break;
-        default:
-                c = style->get_fg (STATE_ACTIVE);
-                break;
-        }
-
-        _red = c.get_red_p ();
-        _green = c.get_green_p ();
-        _blue = c.get_blue_p ();
-
-        set_dirty ();
+       RefPtr<Style> style = get_style();
+       Color c;
+
+       switch (_visual_state) {
+       case VisualState(0):
+               c = style->get_fg (STATE_NORMAL);
+               break;
+       default:
+               c = style->get_fg (STATE_ACTIVE);
+               break;
+       }
+
+       _red = c.get_red_p ();
+       _green = c.get_green_p ();
+       _blue = c.get_blue_p ();
+
+       set_dirty ();
 }