summaryrefslogtreecommitdiff
path: root/gsk/gsktransform.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-07-24 10:51:08 -0400
committerMatthias Clasen <mclasen@redhat.com>2021-07-24 18:48:10 -0400
commit0ef12193f97a91fee4a5566852be7569328eabe7 (patch)
tree29954845faf08fbec16cb7b0a0dd0c6faffd2590 /gsk/gsktransform.c
parentb695ef916853753534ae3385af1d9b21d95777ff (diff)
downloadgtk+-0ef12193f97a91fee4a5566852be7569328eabe7.tar.gz
gsk: Optimize gsk_transform_to...
Optimize these functions for the common cases.
Diffstat (limited to 'gsk/gsktransform.c')
-rw-r--r--gsk/gsktransform.c87
1 files changed, 29 insertions, 58 deletions
diff --git a/gsk/gsktransform.c b/gsk/gsktransform.c
index 38a1b598d3..b58eb55aad 100644
--- a/gsk/gsktransform.c
+++ b/gsk/gsktransform.c
@@ -1487,21 +1487,21 @@ gsk_transform_to_2d (GskTransform *self,
float *out_dx,
float *out_dy)
{
- if (self == NULL ||
- self->category < GSK_TRANSFORM_CATEGORY_2D)
+ *out_xx = 1.0f;
+ *out_yx = 0.0f;
+ *out_xy = 0.0f;
+ *out_yy = 1.0f;
+ *out_dx = 0.0f;
+ *out_dy = 0.0f;
+
+ if (self == NULL)
+ return;
+
+ if (G_UNLIKELY (self->category < GSK_TRANSFORM_CATEGORY_2D))
{
- if (self != NULL)
- {
- char *s = gsk_transform_to_string (self);
- g_warning ("Given transform \"%s\" is not a 2D transform.", s);
- g_free (s);
- }
- *out_xx = 1.0f;
- *out_yx = 0.0f;
- *out_xy = 0.0f;
- *out_yy = 1.0f;
- *out_dx = 0.0f;
- *out_dy = 0.0f;
+ char *s = gsk_transform_to_string (self);
+ g_warning ("Given transform \"%s\" is not a 2D transform.", s);
+ g_free (s);
return;
}
@@ -1544,41 +1544,25 @@ gsk_transform_to_affine (GskTransform *self,
float *out_dx,
float *out_dy)
{
+ *out_scale_x = 1.0f;
+ *out_scale_y = 1.0f;
+ *out_dx = 0.0f;
+ *out_dy = 0.0f;
+
if (self == NULL)
- {
- *out_scale_x = 1.0f;
- *out_scale_y = 1.0f;
- *out_dx = 0.0f;
- *out_dy = 0.0f;
- return;
- }
+ return;
if (G_UNLIKELY (self->category < GSK_TRANSFORM_CATEGORY_2D_AFFINE))
{
char *s = gsk_transform_to_string (self);
g_warning ("Given transform \"%s\" is not an affine 2D transform.", s);
g_free (s);
-
- *out_scale_x = 1.0f;
- *out_scale_y = 1.0f;
- *out_dx = 0.0f;
- *out_dy = 0.0f;
return;
}
- if (self->next != NULL)
- {
- gsk_transform_to_affine (self->next,
- out_scale_x, out_scale_y,
- out_dx, out_dy);
- }
- else
- {
- *out_scale_x = 1.0f;
- *out_scale_y = 1.0f;
- *out_dx = 0.0f;
- *out_dy = 0.0f;
- }
+ gsk_transform_to_affine (self->next,
+ out_scale_x, out_scale_y,
+ out_dx, out_dy);
self->transform_class->apply_affine (self,
out_scale_x, out_scale_y,
@@ -1607,12 +1591,11 @@ gsk_transform_to_translate (GskTransform *self,
float *out_dx,
float *out_dy)
{
+ *out_dx = 0.0f;
+ *out_dy = 0.0f;
+
if (self == NULL)
- {
- *out_dx = 0.0f;
- *out_dy = 0.0f;
- return;
- }
+ return;
if (G_UNLIKELY (self->category < GSK_TRANSFORM_CATEGORY_2D_TRANSLATE))
{
@@ -1620,24 +1603,12 @@ gsk_transform_to_translate (GskTransform *self,
g_warning ("Given transform \"%s\" is not an affine 2D translation.", s);
g_free (s);
- *out_dx = 0.0f;
- *out_dy = 0.0f;
return;
}
- if (self->next != NULL)
- {
- gsk_transform_to_translate (self->next,
- out_dx, out_dy);
- }
- else
- {
- *out_dx = 0.0f;
- *out_dy = 0.0f;
- }
+ gsk_transform_to_translate (self->next, out_dx, out_dy);
- self->transform_class->apply_translate (self,
- out_dx, out_dy);
+ self->transform_class->apply_translate (self, out_dx, out_dy);
}
/**