gsk: Handle 2D transforms better
authorMatthias Clasen <mclasen@redhat.com>
Fri, 17 Sep 2021 13:42:20 +0000 (09:42 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 17 Sep 2021 14:28:49 +0000 (10:28 -0400)
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.

gsk/ngl/gsknglrenderjob.c

index 4cccd89ba538339809b8538a94fff6a923022ebf..baf87f6461be4d7769cf8c3c3446304586ea7b93 100644 (file)
@@ -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;