summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Hergert <chergert@redhat.com>2016-05-06 16:12:29 +0300
committerMatthias Clasen <mclasen@redhat.com>2018-06-01 11:04:45 -0400
commitd6a29e1b8cb815a2dfc00cd17681ef13e0487a27 (patch)
tree8c9f388296b2ddf0e12be3ad45985306e1e186ed
parent1918fefbd4ae8c6227beefc761420da32118e043 (diff)
downloadgtk+-d6a29e1b8cb815a2dfc00cd17681ef13e0487a27.tar.gz
treeview: respect expander-size style property
Without enforcement to the expander-size, we can end up rendering icons rather fuzzy. This uses the expander-size style property to determine the square for the icon, centered on what was the calculated space for the expander.
-rw-r--r--gtk/gtktreeview.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index 758e3e2168..44ae4fad91 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -10296,11 +10296,13 @@ gtk_tree_view_draw_arrow (GtkTreeView *tree_view,
gint x2;
gint vertical_separator;
GtkCellRendererState flags = 0;
+ gint expander_size;
widget = GTK_WIDGET (tree_view);
context = gtk_widget_get_style_context (widget);
gtk_widget_style_get (widget,
+ "expander-size", &expander_size,
"vertical-separator", &vertical_separator,
NULL);
@@ -10335,6 +10337,21 @@ gtk_tree_view_draw_arrow (GtkTreeView *tree_view,
gtk_style_context_set_state (context, state);
gtk_style_context_add_class (context, GTK_STYLE_CLASS_EXPANDER);
+ if (expander_size > 0)
+ {
+ if (expander_size < area.width && area.width % expander_size != 0)
+ {
+ area.x += (area.width % expander_size) / 2;
+ area.width = expander_size;
+ }
+
+ if (expander_size < area.height && area.height % expander_size != 0)
+ {
+ area.y += (area.height % expander_size) / 2;
+ area.height = expander_size;
+ }
+ }
+
gtk_render_expander (context, cr,
area.x, area.y,
area.width, area.height);