[gtk] cssimagelinear: Avoid computing the length if we know it
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk] cssimagelinear: Avoid computing the length if we know it
- Date: Tue, 7 Jan 2020 16:41:24 +0000 (UTC)
commit 59111d100f23ea88419af246e9e1c3c8ad879b89
Author: Timm Bäder <mail baedert org>
Date: Mon Dec 30 09:46:15 2019 +0100
cssimagelinear: Avoid computing the length if we know it
We handlet the common easy cases manually anyway, so don't bother
sqrt()ing the x/y coords in those cases.
gtk/gtkcssimagelinear.c | 44 ++++++++++++++++++++++++++++----------------
1 file changed, 28 insertions(+), 16 deletions(-)
---
diff --git a/gtk/gtkcssimagelinear.c b/gtk/gtkcssimagelinear.c
index 3816514d17..d3b7a07e1d 100644
--- a/gtk/gtkcssimagelinear.c
+++ b/gtk/gtkcssimagelinear.c
@@ -76,37 +76,43 @@ static void
gtk_css_image_linear_compute_start_point (double angle_in_degrees,
double width,
double height,
- double *x,
- double *y)
+ double *out_x,
+ double *out_y,
+ double *out_length)
{
double angle, c, slope, perpendicular;
-
+ double x, y, length;
+
angle = fmod (angle_in_degrees, 360);
if (angle < 0)
angle += 360;
if (angle == 0)
{
- *x = 0;
- *y = -height;
+ *out_x = 0;
+ *out_y = -height;
+ *out_length = height;
return;
}
else if (angle == 90)
{
- *x = width;
- *y = 0;
+ *out_x = width;
+ *out_y = 0;
+ *out_length = width;
return;
}
else if (angle == 180)
{
- *x = 0;
- *y = height;
+ *out_x = 0;
+ *out_y = height;
+ *out_length = height;
return;
}
else if (angle == 270)
{
- *x = -width;
- *y = 0;
+ *out_x = -width;
+ *out_y = 0;
+ *out_length = width;
return;
}
@@ -119,12 +125,18 @@ gtk_css_image_linear_compute_start_point (double angle_in_degrees,
width = - width;
if (angle < 90 || angle > 270)
height = - height;
-
+
/* Compute c (of y = mx + c) of perpendicular */
c = height - perpendicular * width;
- *x = c / (slope - perpendicular);
- *y = perpendicular * *x + c;
+ x = c / (slope - perpendicular);
+ y = perpendicular * x + c;
+
+ length = sqrt (x * x + y * y);
+
+ *out_x = x;
+ *out_y = y;
+ *out_length = length;
}
static void
@@ -173,9 +185,9 @@ gtk_css_image_linear_snapshot (GtkCssImage *image,
gtk_css_image_linear_compute_start_point (angle,
width, height,
- &x, &y);
+ &x, &y,
+ &length);
- length = sqrt (x * x + y * y);
gtk_css_image_linear_get_start_end (linear, length, &start, &end);
if (start == end)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]