diff options
-rw-r--r-- | gtk/gtkcsstransformvalue.c | 23 | ||||
-rw-r--r-- | gtk/gtkcsstransformvalueprivate.h | 4 | ||||
-rw-r--r-- | gtk/gtkthemingengine.c | 9 |
3 files changed, 18 insertions, 18 deletions
diff --git a/gtk/gtkcsstransformvalue.c b/gtk/gtkcsstransformvalue.c index 9fcbfb9d07..303440396c 100644 --- a/gtk/gtkcsstransformvalue.c +++ b/gtk/gtkcsstransformvalue.c @@ -198,8 +198,8 @@ gtk_css_transform_apply (const GtkCssTransform *transform, /* NB: The returned matrix may be invalid */ static void -gtk_css_transform_value_get_matrix (const GtkCssValue *value, - cairo_matrix_t *matrix) +gtk_css_transform_value_compute_matrix (const GtkCssValue *value, + cairo_matrix_t *matrix) { guint i; @@ -637,9 +637,9 @@ gtk_css_value_transform_transition (GtkCssValue *start, cairo_matrix_t start_matrix, end_matrix; cairo_matrix_init_identity (&start_matrix); - gtk_css_transform_value_get_matrix (start, &start_matrix); + gtk_css_transform_value_compute_matrix (start, &start_matrix); cairo_matrix_init_identity (&end_matrix); - gtk_css_transform_value_get_matrix (end, &end_matrix); + gtk_css_transform_value_compute_matrix (end, &end_matrix); result = gtk_css_transform_value_alloc (1); result->transforms[0].type = GTK_CSS_TRANSFORM_MATRIX; @@ -1028,22 +1028,21 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) } gboolean -_gtk_css_transform_value_apply (const GtkCssValue *transform, - cairo_t *cr) +_gtk_css_transform_value_get_matrix (const GtkCssValue *transform, + cairo_matrix_t *matrix) { - cairo_matrix_t matrix, invert; + cairo_matrix_t invert; g_return_val_if_fail (transform->class == >K_CSS_VALUE_TRANSFORM, FALSE); - g_return_val_if_fail (cr != NULL, FALSE); + g_return_val_if_fail (matrix != NULL, FALSE); - gtk_css_transform_value_get_matrix (transform, &matrix); + gtk_css_transform_value_compute_matrix (transform, &invert); + + *matrix = invert; - invert = matrix; if (cairo_matrix_invert (&invert) != CAIRO_STATUS_SUCCESS) return FALSE; - cairo_transform (cr, &matrix); - return TRUE; } diff --git a/gtk/gtkcsstransformvalueprivate.h b/gtk/gtkcsstransformvalueprivate.h index 2c57c3f5c9..49411ff88d 100644 --- a/gtk/gtkcsstransformvalueprivate.h +++ b/gtk/gtkcsstransformvalueprivate.h @@ -28,8 +28,8 @@ G_BEGIN_DECLS GtkCssValue * _gtk_css_transform_value_new_none (void); GtkCssValue * _gtk_css_transform_value_parse (GtkCssParser *parser); -gboolean _gtk_css_transform_value_apply (const GtkCssValue *transform, - cairo_t *cr); +gboolean _gtk_css_transform_value_get_matrix (const GtkCssValue *transform, + cairo_matrix_t *matrix); G_END_DECLS diff --git a/gtk/gtkthemingengine.c b/gtk/gtkthemingengine.c index f85babab9d..64b9f8ff7c 100644 --- a/gtk/gtkthemingengine.c +++ b/gtk/gtkthemingengine.c @@ -1032,6 +1032,7 @@ render_icon_image (GtkThemingEngine *engine, double height) { const GtkCssValue *shadows; + cairo_matrix_t matrix; GtkCssImage *image; image = _gtk_css_image_value_get_image (_gtk_theming_engine_peek_property (engine, GTK_CSS_PROPERTY_ICON_SOURCE)); @@ -1040,11 +1041,11 @@ render_icon_image (GtkThemingEngine *engine, shadows = _gtk_theming_engine_peek_property (engine, GTK_CSS_PROPERTY_ICON_SHADOW); - cairo_translate (cr, x, y); - cairo_translate (cr, width / 2, height / 2); - - if (_gtk_css_transform_value_apply (_gtk_theming_engine_peek_property (engine, GTK_CSS_PROPERTY_ICON_TRANSFORM), cr)) + if (_gtk_css_transform_value_get_matrix (_gtk_theming_engine_peek_property (engine, GTK_CSS_PROPERTY_ICON_TRANSFORM), &matrix)) { + cairo_translate (cr, x, y); + cairo_translate (cr, width / 2, height / 2); + cairo_transform (cr, &matrix); cairo_translate (cr, -width / 2, -height / 2); if (!_gtk_css_shadows_value_is_none (shadows)) |