diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-09-17 09:42:20 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-09-17 10:28:49 -0400 |
commit | 6a60214e8c7f6d49f970e0a3293befe6a6a2870c (patch) | |
tree | f596dbfedc84867ef3e4110efed3e27d303937ed | |
parent | 27d662f1aadd33016d26758b216c551b47b4f18d (diff) | |
download | gtk+-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.c | 13 |
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; |