[gtk+] cellrendertoggle: Draw background + frame for mark
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] cellrendertoggle: Draw background + frame for mark
- Date: Mon, 15 Feb 2016 17:17:36 +0000 (UTC)
commit 1ee3df5161e243a54a1254ff203282ed678f70ae
Author: Benjamin Otte <otte redhat com>
Date: Mon Feb 15 18:16:32 2016 +0100
cellrendertoggle: Draw background + frame for mark
Also compute padding and borders properly for the marks.
gtk/gtkcellrenderertoggle.c | 40 ++++++++++++++++++++++++++++++++--------
1 files changed, 32 insertions(+), 8 deletions(-)
---
diff --git a/gtk/gtkcellrenderertoggle.c b/gtk/gtkcellrenderertoggle.c
index 1e75394..d2f4889 100644
--- a/gtk/gtkcellrenderertoggle.c
+++ b/gtk/gtkcellrenderertoggle.c
@@ -335,12 +335,21 @@ gtk_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
gint calc_width;
gint calc_height;
gint xpad, ypad;
+ GtkStyleContext *context;
+ GtkBorder border, padding;
priv = GTK_CELL_RENDERER_TOGGLE (cell)->priv;
gtk_cell_renderer_get_padding (cell, &xpad, &ypad);
- calc_width = xpad * 2 + priv->indicator_size;
- calc_height = ypad * 2 + priv->indicator_size;
+
+ context = gtk_cell_renderer_toggle_save_context (cell, widget);
+ gtk_style_context_get_padding (context, gtk_style_context_get_state (context), &padding);
+ gtk_style_context_get_border (context, gtk_style_context_get_state (context), &border);
+
+ calc_width = xpad * 2 + priv->indicator_size + padding.left + padding.right + border.left + border.right;
+ calc_height = ypad * 2 + priv->indicator_size + padding.top + padding.bottom + border.top + border.bottom;
+
+ gtk_style_context_restore (context);
if (width)
*width = calc_width;
@@ -388,6 +397,7 @@ gtk_cell_renderer_toggle_render (GtkCellRenderer *cell,
gint x_offset, y_offset;
gint xpad, ypad;
GtkStateFlags state;
+ GtkBorder padding, border;
context = gtk_widget_get_style_context (widget);
gtk_cell_renderer_toggle_get_size (cell, widget, cell_area,
@@ -421,19 +431,33 @@ gtk_cell_renderer_toggle_render (GtkCellRenderer *cell,
context = gtk_cell_renderer_toggle_save_context (cell, widget);
gtk_style_context_set_state (context, state);
- if (priv->radio)
- {
- gtk_render_option (context, cr,
+ gtk_render_background (context, cr,
cell_area->x + x_offset + xpad,
cell_area->y + y_offset + ypad,
width, height);
+ gtk_render_frame (context, cr,
+ cell_area->x + x_offset + xpad,
+ cell_area->y + y_offset + ypad,
+ width, height);
+
+ gtk_style_context_get_padding (context, gtk_style_context_get_state (context), &padding);
+ gtk_style_context_get_border (context, gtk_style_context_get_state (context), &border);
+
+ if (priv->radio)
+ {
+ gtk_render_option (context, cr,
+ cell_area->x + x_offset + xpad + padding.left + border.left,
+ cell_area->y + y_offset + ypad + padding.top + border.top,
+ width - padding.left - padding.right - border.left - border.right,
+ height - padding.top - padding.bottom - border.top - border.bottom);
}
else
{
gtk_render_check (context, cr,
- cell_area->x + x_offset + xpad,
- cell_area->y + y_offset + ypad,
- width, height);
+ cell_area->x + x_offset + xpad + padding.left + border.left,
+ cell_area->y + y_offset + ypad + padding.top + border.top,
+ width - padding.left - padding.right - border.left - border.right,
+ height - padding.top - padding.bottom - border.top - border.bottom);
}
gtk_style_context_restore (context);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]