[lasem] svg: implement get_extents for <polygon> and <polyline>.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [lasem] svg: implement get_extents for <polygon> and <polyline>.
- Date: Sun, 21 Oct 2012 21:41:39 +0000 (UTC)
commit 9b4fbadc8dd321ce9c7ada2918a95ef6421b0d87
Author: Emmanuel Pacaud <emmanuel gnome org>
Date: Sun Oct 21 23:41:14 2012 +0200
svg: implement get_extents for <polygon> and <polyline>.
src/lsmsvgpolygonelement.c | 30 ++++++++++++++++++++++++++++++
src/lsmsvgpolylineelement.c | 30 ++++++++++++++++++++++++++++++
2 files changed, 60 insertions(+), 0 deletions(-)
---
diff --git a/src/lsmsvgpolygonelement.c b/src/lsmsvgpolygonelement.c
index dae4936..97b8845 100644
--- a/src/lsmsvgpolygonelement.c
+++ b/src/lsmsvgpolygonelement.c
@@ -46,6 +46,35 @@ lsm_svg_polygon_element_render (LsmSvgElement *self, LsmSvgView *view)
lsm_svg_view_show_polygon (view, polygon->points.value);
}
+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);
+}
+
/* LsmSvgPolygonElement implementation */
LsmDomNode *
@@ -85,6 +114,7 @@ lsm_svg_polygon_element_class_init (LsmSvgPolygonElementClass *s_rect_class)
LSM_SVG_ELEMENT_CATEGORY_BASIC_SHAPE;
s_element_class->render = lsm_svg_polygon_element_render;
+ s_element_class->get_extents = lsm_svg_polygon_element_get_extents;
s_element_class->attribute_manager = lsm_attribute_manager_duplicate (s_element_class->attribute_manager);
s_element_class->is_shape_element = TRUE;
diff --git a/src/lsmsvgpolylineelement.c b/src/lsmsvgpolylineelement.c
index 60d83b3..8748e84 100644
--- a/src/lsmsvgpolylineelement.c
+++ b/src/lsmsvgpolylineelement.c
@@ -46,6 +46,35 @@ lsm_svg_polyline_element_render (LsmSvgElement *self, LsmSvgView *view)
lsm_svg_view_show_polyline (view, polyline->points.value);
}
+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);
+}
+
/* LsmSvgPolylineElement implementation */
LsmDomNode *
@@ -85,6 +114,7 @@ lsm_svg_polyline_element_class_init (LsmSvgPolylineElementClass *s_rect_class)
LSM_SVG_ELEMENT_CATEGORY_BASIC_SHAPE;
s_element_class->render = lsm_svg_polyline_element_render;
+ s_element_class->get_extents = lsm_svg_polyline_element_get_extents;
s_element_class->attribute_manager = lsm_attribute_manager_duplicate (s_element_class->attribute_manager);
s_element_class->is_shape_element = TRUE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]