36 , _fixed_diameter (false)
48 _diameter = std::min (get_width(), get_height());
57 parent = get_parent ();
59 while (parent && !parent->get_has_window()) {
60 parent = parent->get_parent();
63 if (parent && parent->get_has_window()) {
64 style = parent->get_style ();
65 c = style->get_bg (parent->get_state());
68 c = style->get_bg (get_state());
72 cairo_rectangle(cr, 0, 0, _width, _height);
73 cairo_stroke_preserve(cr);
74 cairo_set_source_rgb(cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
78 cairo_translate(cr, get_width()/2, get_height()/2);
81 cairo_pattern_t *pat = cairo_pattern_create_linear (0.0, 0.0, 0.0,
_diameter);
82 cairo_pattern_add_color_stop_rgba (pat, 0, 0,0,0, 0.4);
83 cairo_pattern_add_color_stop_rgba (pat, 1, 1,1,1, 0.7);
84 cairo_arc (cr, 0, 0,
_diameter/2, 0, 2 * M_PI);
85 cairo_set_source (cr, pat);
87 cairo_pattern_destroy (pat);
90 cairo_set_source_rgb (cr, 0, 0, 0);
91 cairo_arc (cr, 0, 0,
_diameter/2-2, 0, 2 * M_PI);
96 cairo_arc (cr, 0, 0,
_diameter/2-3, 0, 2 * M_PI);
100 cairo_scale(cr, 0.7, 0.7);
101 cairo_pattern_t *pat2 = cairo_pattern_create_linear (0.0, 0.0, 0.0,
_diameter/2-3);
102 cairo_pattern_add_color_stop_rgba (pat2, 0, 1,1,1,
active_state() ? 0.4 : 0.2);
103 cairo_pattern_add_color_stop_rgba (pat2, 1, 1,1,1, 0.0);
104 cairo_arc (cr, 0, 0,
_diameter/2-3, 0, 2 * M_PI);
105 cairo_set_source (cr, pat2);
107 cairo_pattern_destroy (pat2);
128 CairoWidget::on_realize ();
138 CairoWidget::on_size_request (req);
145 RefPtr<Style> style = get_style();
150 c = style->get_fg (STATE_NORMAL);
153 c = style->get_fg (STATE_ACTIVE);
157 _red = c.get_red_p ();
158 _green = c.get_green_p ();
159 _blue = c.get_blue_p ();
void set_colors_from_style()
void render(cairo_t *, cairo_rectangle_t *)
void on_size_request(Gtk::Requisition *req)