mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-25 21:21:21 +00:00
transformnode: Avoid matrix multiplication if we can
If the given matrix is explicitly of category IDENTITY, we don't need to do anything, and in the 2D_TRANSLATE case, just offset the child bounds. Those are the two most common cases.
This commit is contained in:
parent
5577e30ad4
commit
bbd4e2f60d
@ -2547,9 +2547,30 @@ gsk_transform_node_new_with_category (GskRenderNode *child,
|
||||
graphene_matrix_init_from_matrix (&self->transform, transform);
|
||||
self->category = category;
|
||||
|
||||
graphene_matrix_transform_bounds (&self->transform,
|
||||
&child->bounds,
|
||||
&self->render_node.bounds);
|
||||
switch (category)
|
||||
{
|
||||
case GSK_MATRIX_CATEGORY_IDENTITY:
|
||||
graphene_rect_init_from_rect (&self->render_node.bounds, &child->bounds);
|
||||
break;
|
||||
|
||||
case GSK_MATRIX_CATEGORY_2D_TRANSLATE:
|
||||
{
|
||||
graphene_rect_init_from_rect (&self->render_node.bounds, &child->bounds);
|
||||
self->render_node.bounds.origin.x += graphene_matrix_get_value (transform, 3, 0);
|
||||
self->render_node.bounds.origin.y += graphene_matrix_get_value (transform, 3, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case GSK_MATRIX_CATEGORY_2D_AFFINE:
|
||||
case GSK_MATRIX_CATEGORY_ANY:
|
||||
case GSK_MATRIX_CATEGORY_UNKNOWN:
|
||||
case GSK_MATRIX_CATEGORY_INVERTIBLE:
|
||||
default:
|
||||
graphene_matrix_transform_bounds (&self->transform,
|
||||
&child->bounds,
|
||||
&self->render_node.bounds);
|
||||
}
|
||||
|
||||
return &self->render_node;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user