mirror of https://github.com/GNOME/gimp.git
libgimpwidgets: port GimpCellRendererToggle to GtkStyleContext
This commit is contained in:
parent
9e7d1206ac
commit
97da93d1ac
|
@ -274,9 +274,10 @@ gimp_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
|
|||
gint *width,
|
||||
gint *height)
|
||||
{
|
||||
GimpCellRendererToggle *toggle = GIMP_CELL_RENDERER_TOGGLE (cell);
|
||||
GimpCellRendererTogglePrivate *priv = GET_PRIVATE (cell);
|
||||
GtkStyle *style = gtk_widget_get_style (widget);
|
||||
GimpCellRendererToggle *toggle = GIMP_CELL_RENDERER_TOGGLE (cell);
|
||||
GimpCellRendererTogglePrivate *priv = GET_PRIVATE (cell);
|
||||
GtkStyleContext *context = gtk_widget_get_style_context (widget);
|
||||
GtkBorder border;
|
||||
gint calc_width;
|
||||
gint calc_height;
|
||||
gint pixbuf_width;
|
||||
|
@ -296,6 +297,8 @@ gimp_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
|
|||
return;
|
||||
}
|
||||
|
||||
gtk_style_context_save (context);
|
||||
|
||||
gtk_cell_renderer_get_alignment (cell, &xalign, &yalign);
|
||||
gtk_cell_renderer_get_padding (cell, &xpad, &ypad);
|
||||
|
||||
|
@ -305,10 +308,14 @@ gimp_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
|
|||
pixbuf_width = gdk_pixbuf_get_width (toggle->pixbuf);
|
||||
pixbuf_height = gdk_pixbuf_get_height (toggle->pixbuf);
|
||||
|
||||
calc_width = (pixbuf_width +
|
||||
(gint) xpad * 2 + style->xthickness * 2);
|
||||
calc_height = (pixbuf_height +
|
||||
(gint) ypad * 2 + style->ythickness * 2);
|
||||
calc_width = pixbuf_width + (gint) xpad * 2;
|
||||
calc_height = pixbuf_height + (gint) ypad * 2;
|
||||
|
||||
gtk_style_context_add_class (context, GTK_STYLE_CLASS_BUTTON);
|
||||
|
||||
gtk_style_context_get_border (context, 0, &border);
|
||||
calc_width += border.left + border.right;
|
||||
calc_height += border.top + border.bottom;
|
||||
|
||||
if (width)
|
||||
*width = calc_width;
|
||||
|
@ -332,6 +339,8 @@ gimp_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
|
|||
*y_offset = MAX (*y_offset, 0);
|
||||
}
|
||||
}
|
||||
|
||||
gtk_style_context_restore (context);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -342,11 +351,11 @@ gimp_cell_renderer_toggle_render (GtkCellRenderer *cell,
|
|||
const GdkRectangle *cell_area,
|
||||
GtkCellRendererState flags)
|
||||
{
|
||||
GimpCellRendererToggle *toggle = GIMP_CELL_RENDERER_TOGGLE (cell);
|
||||
GimpCellRendererTogglePrivate *priv = GET_PRIVATE (cell);
|
||||
GtkStyle *style = gtk_widget_get_style (widget);
|
||||
GimpCellRendererToggle *toggle = GIMP_CELL_RENDERER_TOGGLE (cell);
|
||||
GimpCellRendererTogglePrivate *priv = GET_PRIVATE (cell);
|
||||
GtkStyleContext *context = gtk_widget_get_style_context (widget);
|
||||
GdkRectangle toggle_rect;
|
||||
GtkStateType state;
|
||||
GtkStateType state = 0;
|
||||
gboolean active;
|
||||
gint xpad;
|
||||
gint ypad;
|
||||
|
@ -393,6 +402,10 @@ gimp_cell_renderer_toggle_render (GtkCellRenderer *cell,
|
|||
&toggle_rect.width,
|
||||
&toggle_rect.height);
|
||||
|
||||
gtk_style_context_save (context);
|
||||
|
||||
gtk_style_context_add_class (context, GTK_STYLE_CLASS_BUTTON);
|
||||
|
||||
gtk_cell_renderer_get_padding (cell, &xpad, &ypad);
|
||||
|
||||
toggle_rect.x += cell_area->x + xpad;
|
||||
|
@ -406,38 +419,39 @@ gimp_cell_renderer_toggle_render (GtkCellRenderer *cell,
|
|||
active =
|
||||
gtk_cell_renderer_toggle_get_active (GTK_CELL_RENDERER_TOGGLE (cell));
|
||||
|
||||
if (active)
|
||||
state |= GTK_STATE_FLAG_ACTIVE;
|
||||
|
||||
if ((flags & GTK_CELL_RENDERER_SELECTED) == GTK_CELL_RENDERER_SELECTED)
|
||||
{
|
||||
state |= GTK_STATE_FLAG_SELECTED;
|
||||
|
||||
if (gtk_widget_has_focus (widget))
|
||||
state = GTK_STATE_SELECTED;
|
||||
else
|
||||
state = GTK_STATE_ACTIVE;
|
||||
state |= GTK_STATE_FLAG_FOCUSED;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gtk_cell_renderer_toggle_get_activatable (GTK_CELL_RENDERER_TOGGLE (cell)))
|
||||
state = GTK_STATE_NORMAL;
|
||||
else
|
||||
state = GTK_STATE_INSENSITIVE;
|
||||
if (! gtk_cell_renderer_toggle_get_activatable (GTK_CELL_RENDERER_TOGGLE (cell)))
|
||||
state |= GTK_STATE_FLAG_INSENSITIVE;
|
||||
}
|
||||
|
||||
gtk_style_context_set_state (context, state);
|
||||
|
||||
if (flags & GTK_CELL_RENDERER_PRELIT)
|
||||
gtk_paint_shadow (style,
|
||||
cr,
|
||||
state,
|
||||
active ? GTK_SHADOW_IN : GTK_SHADOW_OUT,
|
||||
widget, NULL,
|
||||
gtk_render_frame (context, cr,
|
||||
toggle_rect.x, toggle_rect.y,
|
||||
toggle_rect.width, toggle_rect.height);
|
||||
|
||||
if (active)
|
||||
{
|
||||
gboolean inconsistent;
|
||||
GtkBorder border;
|
||||
gboolean inconsistent;
|
||||
|
||||
toggle_rect.x += style->xthickness;
|
||||
toggle_rect.y += style->ythickness;
|
||||
toggle_rect.width -= style->xthickness * 2;
|
||||
toggle_rect.height -= style->ythickness * 2;
|
||||
gtk_style_context_get_border (context, 0, &border);
|
||||
toggle_rect.x += border.left;
|
||||
toggle_rect.y += border.top;
|
||||
toggle_rect.width -= border.left + border.right;
|
||||
toggle_rect.height -= border.top + border.bottom;
|
||||
|
||||
gdk_cairo_set_source_pixbuf (cr, toggle->pixbuf,
|
||||
toggle_rect.x, toggle_rect.y);
|
||||
|
@ -449,7 +463,10 @@ gimp_cell_renderer_toggle_render (GtkCellRenderer *cell,
|
|||
|
||||
if (inconsistent)
|
||||
{
|
||||
gdk_cairo_set_source_color (cr, &style->fg[state]);
|
||||
GdkRGBA color;
|
||||
|
||||
gtk_style_context_get_color (context, state, &color);
|
||||
gdk_cairo_set_source_rgba (cr, &color);
|
||||
cairo_set_line_width (cr, 1.5);
|
||||
cairo_move_to (cr,
|
||||
toggle_rect.x + toggle_rect.width - 1,
|
||||
|
@ -460,6 +477,8 @@ gimp_cell_renderer_toggle_render (GtkCellRenderer *cell,
|
|||
cairo_stroke (cr);
|
||||
}
|
||||
}
|
||||
|
||||
gtk_style_context_restore (context);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
|
Loading…
Reference in New Issue