//background
- RefPtr<Style> style = get_style();
+ Widget* parent;
+ RefPtr<Style> style;
Color c;
-
- switch (_visual_state) {
- case 0:
- c = style->get_bg (STATE_NORMAL);
- break;
- default:
- c = style->get_bg (STATE_ACTIVE);
- break;
+
+ parent = get_parent ();
+
+ 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_green_p(), c.get_red_p(), c.get_blue_p());
+ cairo_set_source_rgb(cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
cairo_fill(cr);
cairo_translate(cr, _width/2, _height/2);
if (s != _visual_state) {
_visual_state = s;
-
- 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 ();
+ set_colors_from_style ();
}
}
set_dirty ();
}
+void
+LED::on_realize ()
+{
+ set_colors_from_style ();
+ CairoWidget::on_realize ();
+}
+
void
LED::on_size_request (Gtk::Requisition* req)
{
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 ();
+}