diff options
author | Benjamin Otte <otte@redhat.com> | 2019-02-21 06:27:30 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2019-02-21 19:47:28 +0100 |
commit | ad58dd5cf5670a6a39e1771a0452e9dad1276e7b (patch) | |
tree | c8d0b79820f754297c6c2ea442615d6978cf3a81 | |
parent | 4052bb2535d71a0259af2f4c2edaa18a0cd16799 (diff) | |
download | gtk+-ad58dd5cf5670a6a39e1771a0452e9dad1276e7b.tar.gz |
csstransform: Create a GtkTransform
Stop creating graphene_matrix_t's.
-rw-r--r-- | gtk/gtkcsstransformvalue.c | 100 | ||||
-rw-r--r-- | gtk/gtkcsstransformvalueprivate.h | 3 | ||||
-rw-r--r-- | gtk/gtkrendericon.c | 23 |
3 files changed, 63 insertions, 63 deletions
diff --git a/gtk/gtkcsstransformvalue.c b/gtk/gtkcsstransformvalue.c index fcddf6d2ac..5868627025 100644 --- a/gtk/gtkcsstransformvalue.c +++ b/gtk/gtkcsstransformvalue.c @@ -17,13 +17,13 @@ #include "config.h" -#include "gtkcssbgsizevalueprivate.h" +#include "gtkcsstransformvalueprivate.h" #include <math.h> #include <string.h> -#include "gtkcsstransformvalueprivate.h" #include "gtkcssnumbervalueprivate.h" +#include "gtktransform.h" typedef union _GtkCssTransform GtkCssTransform; @@ -161,64 +161,62 @@ gtk_css_transform_init_identity (GtkCssTransform *transform, transform->type = type; } -static void +static GtkTransform * gtk_css_transform_apply (const GtkCssTransform *transform, - graphene_matrix_t *matrix) + GtkTransform *next) { - graphene_matrix_t skew, tmp; + graphene_matrix_t skew; switch (transform->type) { case GTK_CSS_TRANSFORM_MATRIX: - graphene_matrix_multiply (matrix, &transform->matrix.matrix, &tmp); - graphene_matrix_init_from_matrix (matrix, &tmp); - break; + return gtk_transform_matrix (next, &transform->matrix.matrix); + case GTK_CSS_TRANSFORM_TRANSLATE: - graphene_matrix_translate (matrix, &GRAPHENE_POINT3D_INIT( - _gtk_css_number_value_get (transform->translate.x, 100), - _gtk_css_number_value_get (transform->translate.y, 100), - _gtk_css_number_value_get (transform->translate.z, 100))); - break; + return gtk_transform_translate_3d (next, + &GRAPHENE_POINT3D_INIT ( + _gtk_css_number_value_get (transform->translate.x, 100), + _gtk_css_number_value_get (transform->translate.y, 100), + _gtk_css_number_value_get (transform->translate.z, 100) + )); + case GTK_CSS_TRANSFORM_ROTATE: { - graphene_vec3_t vec; + graphene_vec3_t axis; - graphene_vec3_init (&vec, + graphene_vec3_init (&axis, _gtk_css_number_value_get (transform->rotate.x, 1), _gtk_css_number_value_get (transform->rotate.y, 1), _gtk_css_number_value_get (transform->rotate.z, 1)); - graphene_matrix_rotate (matrix, - _gtk_css_number_value_get (transform->rotate.angle, 100), - &vec); + return gtk_transform_rotate_3d (next, + _gtk_css_number_value_get (transform->rotate.angle, 100), + &axis); } - break; + case GTK_CSS_TRANSFORM_SCALE: - graphene_matrix_scale (matrix, - _gtk_css_number_value_get (transform->scale.x, 1), - _gtk_css_number_value_get (transform->scale.y, 1), - _gtk_css_number_value_get (transform->scale.z, 1)); + return gtk_transform_scale_3d (next, + _gtk_css_number_value_get (transform->scale.x, 1), + _gtk_css_number_value_get (transform->scale.y, 1), + _gtk_css_number_value_get (transform->scale.z, 1)); break; case GTK_CSS_TRANSFORM_SKEW: graphene_matrix_init_skew (&skew, _gtk_css_number_value_get (transform->skew.x, 100) / 180.0f * G_PI, - _gtk_css_number_value_get (transform->skew.y, 100) /180.0f * G_PI); - graphene_matrix_multiply (matrix, &skew, &tmp); - graphene_matrix_init_from_matrix (matrix, &tmp); - break; + _gtk_css_number_value_get (transform->skew.y, 100) / 180.0f * G_PI); + return gtk_transform_matrix (next, &skew); + case GTK_CSS_TRANSFORM_SKEW_X: graphene_matrix_init_skew (&skew, _gtk_css_number_value_get (transform->skew_x.skew, 100) / 180.0f * G_PI, 0); - graphene_matrix_multiply (matrix, &skew, &tmp); - graphene_matrix_init_from_matrix (matrix, &tmp); - break; + return gtk_transform_matrix (next, &skew); + case GTK_CSS_TRANSFORM_SKEW_Y: graphene_matrix_init_skew (&skew, 0, _gtk_css_number_value_get (transform->skew_y.skew, 100) / 180.0f * G_PI); - graphene_matrix_multiply (matrix, &skew, &tmp); - graphene_matrix_init_from_matrix (matrix, &tmp); - break; + return gtk_transform_matrix (next, &skew); + case GTK_CSS_TRANSFORM_NONE: default: g_assert_not_reached (); @@ -227,18 +225,20 @@ gtk_css_transform_apply (const GtkCssTransform *transform, } /* NB: The returned matrix may be invalid */ -static void -gtk_css_transform_value_compute_matrix (const GtkCssValue *value, - graphene_matrix_t *matrix) +static GtkTransform * +gtk_css_transform_value_compute_transform (const GtkCssValue *value) { + GtkTransform *transform; guint i; - graphene_matrix_init_identity (matrix); + transform = NULL; for (i = 0; i < value->n_transforms; i++) { - gtk_css_transform_apply (&value->transforms[i], matrix); + transform = gtk_css_transform_apply (&value->transforms[i], transform); } + + return transform; } static void @@ -512,12 +512,16 @@ gtk_css_value_transform_transition (GtkCssValue *start, { if (start->transforms[i].type != end->transforms[i].type) { + GtkTransform *transform; graphene_matrix_t start_matrix, end_matrix; - graphene_matrix_init_identity (&start_matrix); - gtk_css_transform_value_compute_matrix (start, &start_matrix); - graphene_matrix_init_identity (&end_matrix); - gtk_css_transform_value_compute_matrix (end, &end_matrix); + transform = gtk_css_transform_value_compute_transform (start); + gtk_transform_to_matrix (transform, &start_matrix); + gtk_transform_unref (transform); + + transform = gtk_css_transform_value_compute_transform (end); + gtk_transform_to_matrix (transform, &end_matrix); + gtk_transform_unref (transform); result = gtk_css_transform_value_alloc (1); result->transforms[0].type = GTK_CSS_TRANSFORM_MATRIX; @@ -1094,17 +1098,11 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) return value; } -gboolean -gtk_css_transform_value_get_matrix (const GtkCssValue *transform, - graphene_matrix_t *matrix) +GtkTransform * +gtk_css_transform_value_get_transform (const GtkCssValue *transform) { - graphene_matrix_t invert; - g_return_val_if_fail (transform->class == >K_CSS_VALUE_TRANSFORM, FALSE); - g_return_val_if_fail (matrix != NULL, FALSE); - gtk_css_transform_value_compute_matrix (transform, matrix); - - return graphene_matrix_inverse (matrix, &invert); + return gtk_css_transform_value_compute_transform (transform); } diff --git a/gtk/gtkcsstransformvalueprivate.h b/gtk/gtkcsstransformvalueprivate.h index 00a8f8563e..77114cd6b4 100644 --- a/gtk/gtkcsstransformvalueprivate.h +++ b/gtk/gtkcsstransformvalueprivate.h @@ -28,8 +28,7 @@ G_BEGIN_DECLS GtkCssValue * _gtk_css_transform_value_new_none (void); GtkCssValue * _gtk_css_transform_value_parse (GtkCssParser *parser); -gboolean gtk_css_transform_value_get_matrix (const GtkCssValue *transform, - graphene_matrix_t *matrix); +GtkTransform * gtk_css_transform_value_get_transform (const GtkCssValue *transform); G_END_DECLS diff --git a/gtk/gtkrendericon.c b/gtk/gtkrendericon.c index f79862fa73..df855a853c 100644 --- a/gtk/gtkrendericon.c +++ b/gtk/gtkrendericon.c @@ -29,6 +29,7 @@ #include "gtkcsstransformvalueprivate.h" #include "gtkiconthemeprivate.h" #include "gtksnapshot.h" +#include "gtktransform.h" #include <math.h> @@ -40,7 +41,7 @@ gtk_css_style_snapshot_icon (GtkCssStyle *style, GtkCssImageBuiltinType builtin_type) { const GtkCssValue *shadows_value, *transform_value, *filter_value; - graphene_matrix_t transform_matrix; + GtkTransform *transform; GtkCssImage *image; gboolean has_shadow; @@ -58,8 +59,7 @@ gtk_css_style_snapshot_icon (GtkCssStyle *style, transform_value = gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_TRANSFORM); filter_value = gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_FILTER); - if (!gtk_css_transform_value_get_matrix (transform_value, &transform_matrix)) - return; + transform = gtk_css_transform_value_get_transform (transform_value); gtk_snapshot_push_debug (snapshot, "CSS Icon @ %gx%g", width, height); @@ -67,7 +67,7 @@ gtk_css_style_snapshot_icon (GtkCssStyle *style, has_shadow = gtk_css_shadows_value_push_snapshot (shadows_value, snapshot); - if (graphene_matrix_is_identity (&transform_matrix)) + if (transform == NULL) { gtk_css_image_builtin_snapshot (image, snapshot, width, height, builtin_type); } @@ -77,7 +77,7 @@ gtk_css_style_snapshot_icon (GtkCssStyle *style, /* XXX: Implement -gtk-icon-transform-origin instead of hardcoding "50% 50%" here */ gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (width / 2.0, height / 2.0)); - gtk_snapshot_transform_matrix (snapshot, &transform_matrix); + gtk_snapshot_transform (snapshot, transform); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (- width / 2.0, - height / 2.0)); gtk_css_image_builtin_snapshot (image, snapshot, width, height, builtin_type); @@ -91,6 +91,8 @@ gtk_css_style_snapshot_icon (GtkCssStyle *style, gtk_css_filter_value_pop_snapshot (filter_value, snapshot); gtk_snapshot_pop (snapshot); + + gtk_transform_unref (transform); } void @@ -102,7 +104,7 @@ gtk_css_style_snapshot_icon_paintable (GtkCssStyle *style, gboolean recolor) { const GtkCssValue *shadows_value, *transform_value, *filter_value; - graphene_matrix_t transform_matrix; + GtkTransform *transform; gboolean has_shadow; g_return_if_fail (GTK_IS_CSS_STYLE (style)); @@ -115,8 +117,7 @@ gtk_css_style_snapshot_icon_paintable (GtkCssStyle *style, transform_value = gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_TRANSFORM); filter_value = gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_FILTER); - if (!gtk_css_transform_value_get_matrix (transform_value, &transform_matrix)) - return; + transform = gtk_css_transform_value_get_transform (transform_value); gtk_css_filter_value_push_snapshot (filter_value, snapshot); @@ -144,7 +145,7 @@ gtk_css_style_snapshot_icon_paintable (GtkCssStyle *style, gtk_snapshot_push_color_matrix (snapshot, &color_matrix, &color_offset); } - if (graphene_matrix_is_identity (&transform_matrix)) + if (transform == NULL) { gdk_paintable_snapshot (paintable, snapshot, width, height); } @@ -154,7 +155,7 @@ gtk_css_style_snapshot_icon_paintable (GtkCssStyle *style, /* XXX: Implement -gtk-icon-transform-origin instead of hardcoding "50% 50%" here */ gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (width / 2.0, height / 2.0)); - gtk_snapshot_transform_matrix (snapshot, &transform_matrix); + gtk_snapshot_transform (snapshot, transform); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (- width / 2.0, - height / 2.0)); gdk_paintable_snapshot (paintable, snapshot, width, height); @@ -170,4 +171,6 @@ gtk_css_style_snapshot_icon_paintable (GtkCssStyle *style, transparent: gtk_css_filter_value_pop_snapshot (filter_value, snapshot); + + gtk_transform_unref (transform); } |