diff options
Diffstat (limited to 'gtk/gtkrender.c')
-rw-r--r-- | gtk/gtkrender.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/gtk/gtkrender.c b/gtk/gtkrender.c index 542c4670e2..54bc410036 100644 --- a/gtk/gtkrender.c +++ b/gtk/gtkrender.c @@ -287,8 +287,32 @@ gtk_do_render_arrow (GtkStyleContext *context, gdouble size) { GtkBorderStyle border_style; + GtkCssImageBuiltinType image_type; gint border_width; + /* map [0, 2 * pi) to [0, 4) */ + angle = round (2 * angle / G_PI); + + switch (((int) angle) & 3) + { + case 0: + image_type = GTK_CSS_IMAGE_BUILTIN_ARROW_UP; + break; + case 1: + image_type = GTK_CSS_IMAGE_BUILTIN_ARROW_RIGHT; + break; + case 2: + image_type = GTK_CSS_IMAGE_BUILTIN_ARROW_DOWN; + break; + case 3: + image_type = GTK_CSS_IMAGE_BUILTIN_ARROW_LEFT; + break; + default: + g_assert_not_reached (); + image_type = GTK_CSS_IMAGE_BUILTIN_ARROW_UP; + break; + } + if (render_icon_image (context, cr, x, y, size, size)) return; @@ -310,14 +334,12 @@ gtk_do_render_arrow (GtkStyleContext *context, border_width = 0; } - cairo_translate (cr, x + size / 2.0, y + size / 2.0); - cairo_rotate (cr, angle - G_PI_2); - cairo_translate (cr, - size / 2.0, - size / 2.0); + cairo_translate (cr, x, y); gtk_css_image_builtin_draw (_gtk_css_image_value_get_image (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_ICON_SOURCE)), cr, size, size, - GTK_CSS_IMAGE_BUILTIN_ARROW, + image_type, _gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR)), _gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BACKGROUND_COLOR)), _gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BORDER_TOP_COLOR)), |