[lasem] str_utils: factorize point list extent calculation.



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]