summaryrefslogtreecommitdiff
path: root/gsk/gsktransform.c
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2019-06-29 09:39:20 +0200
committerTimm Bäder <mail@baedert.org>2019-06-29 09:49:38 +0200
commit3bc3e140ddee3f274f0797c10cf7e33dd1b32074 (patch)
tree70ab20976be54c11b6e9d26b0752d53b63d2102f /gsk/gsktransform.c
parenta6a9853676790ea449adec49a7cc0ad31a541689 (diff)
downloadgtk+-3bc3e140ddee3f274f0797c10cf7e33dd1b32074.tar.gz
transform: Add transform_bounds fast path for 2D_AFFINE transforms
E.g. anything involving a scale. This is important when e.g. scrolling in the node list in the recorder, which scales every recorded node down to fit in the list.
Diffstat (limited to 'gsk/gsktransform.c')
-rw-r--r--gsk/gsktransform.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/gsk/gsktransform.c b/gsk/gsktransform.c
index 289e463bb7..9af2ce352b 100644
--- a/gsk/gsktransform.c
+++ b/gsk/gsktransform.c
@@ -1690,11 +1690,26 @@ gsk_transform_transform_bounds (GskTransform *self,
}
break;
+ case GSK_TRANSFORM_CATEGORY_2D_AFFINE:
+ {
+ float dx, dy, scale_x, scale_y;
+
+ gsk_transform_to_affine (self, &scale_x, &scale_y, &dx, &dy);
+
+ *out_rect = *rect;
+ out_rect->origin.x *= scale_x;
+ out_rect->origin.y *= scale_y;
+ out_rect->size.width *= scale_x;
+ out_rect->size.height *= scale_y;
+ out_rect->origin.x += dx;
+ out_rect->origin.y += dy;
+ }
+ break;
+
case GSK_TRANSFORM_CATEGORY_UNKNOWN:
case GSK_TRANSFORM_CATEGORY_ANY:
case GSK_TRANSFORM_CATEGORY_3D:
case GSK_TRANSFORM_CATEGORY_2D:
- case GSK_TRANSFORM_CATEGORY_2D_AFFINE:
default:
{
graphene_matrix_t mat;