[lasem] str_utils: factorize point list extent calculation.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [lasem] str_utils: factorize point list extent calculation.
- Date: Mon, 22 Oct 2012 14:07:16 +0000 (UTC)
commit 87d7fb58635ab4c0c7abb88b243b0966b82ca7aa
Author: Emmanuel Pacaud <emmanuel gnome org>
Date: Mon Oct 22 16:06:38 2012 +0200
str_utils: factorize point list extent calculation.
src/lsmstr.c | 38 ++++++++++++++++++++++++++++++++++++++
src/lsmstr.h | 2 ++
src/lsmsvgpolygonelement.c | 25 ++-----------------------
src/lsmsvgpolylineelement.c | 25 ++-----------------------
4 files changed, 44 insertions(+), 46 deletions(-)
---
diff --git a/src/lsmstr.c b/src/lsmstr.c
index 328ab8c..4d78b8f 100644
--- a/src/lsmstr.c
+++ b/src/lsmstr.c
@@ -22,6 +22,7 @@
*/
#include <lsmstr.h>
+#include <lsmutils.h>
#include <glib.h>
#include <stdio.h>
#include <string.h>
@@ -191,3 +192,40 @@ lsm_str_parse_double_list (char **str, unsigned int n_values, double *values)
return i;
}
+void
+lsm_str_point_list_exents (const char *point_list, LsmExtents *extents)
+{
+ char *str = (char *) point_list;
+ int count = 0;
+ int n_values;
+ double values[2];
+
+ if (extents == NULL)
+ return;
+
+ if (point_list == NULL) {
+ extents->x1 = 0;
+ extents->x2 = 0;
+ extents->y1 = 0;
+ extents->y2 = 0;
+ return;
+ }
+
+ do {
+ n_values = lsm_str_parse_double_list (&str, 2, values);
+ if (n_values == 2) {
+ if (count == 0) {
+ extents->x1 = values[0];
+ extents->x2 = values[0];
+ extents->y1 = values[1];
+ extents->y2 = values[1];
+ } else {
+ extents->x1 = MIN (values[0], extents->x1);
+ extents->x2 = MAX (values[0], extents->x2);
+ extents->y1 = MIN (values[1], extents->y1);
+ extents->y2 = MAX (values[1], extents->y2);
+ }
+ }
+ count++;
+ } while (n_values == 2);
+}
diff --git a/src/lsmstr.h b/src/lsmstr.h
index db699a9..4e219c8 100644
--- a/src/lsmstr.h
+++ b/src/lsmstr.h
@@ -34,6 +34,8 @@ char * lsm_str_to_uri (const char *str);
gboolean lsm_str_parse_double (char **str, double *x);
unsigned int lsm_str_parse_double_list (char **str, unsigned int n_values, double *values);
+void lsm_str_point_list_exents (const char *point_list, LsmExtents *extents);
+
static inline void
lsm_str_skip_spaces (char **str)
{
diff --git a/src/lsmsvgpolygonelement.c b/src/lsmsvgpolygonelement.c
index 97b8845..533a7bd 100644
--- a/src/lsmsvgpolygonelement.c
+++ b/src/lsmsvgpolygonelement.c
@@ -50,29 +50,8 @@ static void
lsm_svg_polygon_element_get_extents (LsmSvgElement *self, LsmSvgView *view, LsmExtents *extents)
{
LsmSvgPolygonElement *polygon = LSM_SVG_POLYGON_ELEMENT (self);
- int count = 0;
- int n_values;
- char *str = polygon->points.value;
- double values[2];
-
- /* TODO cache polygon extents */
- do {
- n_values = lsm_str_parse_double_list (&str, 2, values);
- if (n_values == 2) {
- if (count == 0) {
- extents->x1 = values[0];
- extents->x2 = values[0];
- extents->y1 = values[1];
- extents->y2 = values[1];
- } else {
- extents->x1 = MIN (values[0], extents->x1);
- extents->x2 = MAX (values[0], extents->x2);
- extents->y1 = MIN (values[1], extents->y1);
- extents->y2 = MAX (values[1], extents->y2);
- }
- }
- count++;
- } while (n_values == 2);
+
+ lsm_str_point_list_exents (polygon->points.value, extents);
}
/* LsmSvgPolygonElement implementation */
diff --git a/src/lsmsvgpolylineelement.c b/src/lsmsvgpolylineelement.c
index 8748e84..f17715f 100644
--- a/src/lsmsvgpolylineelement.c
+++ b/src/lsmsvgpolylineelement.c
@@ -50,29 +50,8 @@ static void
lsm_svg_polyline_element_get_extents (LsmSvgElement *self, LsmSvgView *view, LsmExtents *extents)
{
LsmSvgPolylineElement *polyline = LSM_SVG_POLYLINE_ELEMENT (self);
- int count = 0;
- int n_values;
- char *str = polyline->points.value;
- double values[2];
-
- /* TODO cache polyline extents and share code with polygon */
- do {
- n_values = lsm_str_parse_double_list (&str, 2, values);
- if (n_values == 2) {
- if (count == 0) {
- extents->x1 = values[0];
- extents->x2 = values[0];
- extents->y1 = values[1];
- extents->y2 = values[1];
- } else {
- extents->x1 = MIN (values[0], extents->x1);
- extents->x2 = MAX (values[0], extents->x2);
- extents->y1 = MIN (values[1], extents->y1);
- extents->y2 = MAX (values[1], extents->y2);
- }
- }
- count++;
- } while (n_values == 2);
+
+ lsm_str_point_list_exents (polyline->points.value, extents);
}
/* LsmSvgPolylineElement implementation */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]