summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-09-17 09:42:20 -0400
committerMatthias Clasen <mclasen@redhat.com>2021-09-17 10:28:49 -0400
commit6a60214e8c7f6d49f970e0a3293befe6a6a2870c (patch)
treef596dbfedc84867ef3e4110efed3e27d303937ed
parent27d662f1aadd33016d26758b216c551b47b4f18d (diff)
downloadgtk+-6a60214e8c7f6d49f970e0a3293befe6a6a2870c.tar.gz
gsk: Handle 2D transforms better
For 2D transforms, we can read the scale factors more directly off the matrix. This should eventually be moved out into a function to decompose a 2D transform into scale + rotation + skew + translation.
-rw-r--r--gsk/ngl/gsknglrenderjob.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/gsk/ngl/gsknglrenderjob.c b/gsk/ngl/gsknglrenderjob.c
index 4cccd89ba5..baf87f6461 100644
--- a/gsk/ngl/gsknglrenderjob.c
+++ b/gsk/ngl/gsknglrenderjob.c
@@ -453,10 +453,21 @@ extract_matrix_metadata (GskNglRenderModelview *modelview)
&modelview->dx, &modelview->dy);
break;
+ case GSK_TRANSFORM_CATEGORY_2D:
+ {
+ float xx, xy, yx, yy, dx, dy;
+
+ gsk_transform_to_2d (modelview->transform,
+ &xx, &xy, &yx, &yy, &dx, &dy);
+
+ modelview->scale_x = sqrtf (xx * xx + xy * xy);
+ modelview->scale_y = sqrtf (yx * yx + yy * yy);
+ }
+ break;
+
case GSK_TRANSFORM_CATEGORY_UNKNOWN:
case GSK_TRANSFORM_CATEGORY_ANY:
case GSK_TRANSFORM_CATEGORY_3D:
- case GSK_TRANSFORM_CATEGORY_2D:
{
graphene_vec3_t col1;
graphene_vec3_t col2;