diff options
author | Timm Bäder <mail@baedert.org> | 2019-06-29 09:39:20 +0200 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2019-06-29 09:49:38 +0200 |
commit | 3bc3e140ddee3f274f0797c10cf7e33dd1b32074 (patch) | |
tree | 70ab20976be54c11b6e9d26b0752d53b63d2102f /gsk/gsktransform.c | |
parent | a6a9853676790ea449adec49a7cc0ad31a541689 (diff) | |
download | gtk+-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.c | 17 |
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; |