[lasem/lasem-0-4] Revert "svg_text: add support for multiple x, y, dx, and dy."



commit 1d99f75531eae4bafe0c1e33ae93bb2d449195e8
Author: Emmanuel Pacaud <emmanuel gnome org>
Date:   Mon Dec 3 17:18:58 2012 +0100

    Revert "svg_text: add support for multiple x, y, dx, and dy."
    
    This reverts commit 409c1594c5dfcfb0a489bfa17397c16711a78637.

 src/lsmsvgattributes.h   |    5 -
 src/lsmsvglength.c       |   59 ------------
 src/lsmsvglength.h       |    6 --
 src/lsmsvgtextelement.c  |   83 +++++------------
 src/lsmsvgtextelement.h  |    6 +-
 src/lsmsvgtraits.c       |   74 ---------------
 src/lsmsvgtraits.h       |    1 -
 src/lsmsvgtspanelement.c |   65 ++++----------
 src/lsmsvgtspanelement.h |    6 +-
 src/lsmsvgview.c         |  221 ++++------------------------------------------
 src/lsmsvgview.h         |   15 +---
 tests/.gitignore         |    1 -
 12 files changed, 66 insertions(+), 476 deletions(-)
---
diff --git a/src/lsmsvgattributes.h b/src/lsmsvgattributes.h
index 9ddd92d..3e5c8e4 100644
--- a/src/lsmsvgattributes.h
+++ b/src/lsmsvgattributes.h
@@ -60,11 +60,6 @@ typedef struct {
 
 typedef struct {
 	LsmAttribute base;
-	LsmSvgLengthList list;
-} LsmSvgLengthListAttribute;
-
-typedef struct {
-	LsmAttribute base;
 	LsmSvgPaint paint;
 } LsmSvgPaintAttribute;
 
diff --git a/src/lsmsvglength.c b/src/lsmsvglength.c
index 83b88db..4e04f40 100644
--- a/src/lsmsvglength.c
+++ b/src/lsmsvglength.c
@@ -24,7 +24,6 @@
 
 #include <math.h>
 #include <lsmsvglength.h>
-#include <lsmsvgenums.h>
 
 LsmSvgViewbox *
 lsm_svg_viewbox_new (double resolution_ppi,
@@ -92,61 +91,3 @@ lsm_svg_length_normalize (const LsmSvgLength *length,
 
 	return 0.0;
 }
-
-gboolean
-lsm_svg_parse_length (char **str, LsmSvgLength *length)
-{
-	char *c;
-
-	if (str == NULL || *str == NULL || length == NULL)
-		return FALSE;
-
-	if (!lsm_str_parse_double (str, &length->value_unit))
-		return FALSE;
-
-	c = *str;
-
-	if (c[0] != '\0') {
-		if (c[0] == '%') {
-			length->type = LSM_SVG_LENGTH_TYPE_PERCENTAGE;
-			c++;
-		} else if (c[0] == 'e') {
-			if (c[1] == 'm') {
-				length->type = LSM_SVG_LENGTH_TYPE_EMS;
-				c += 2;
-			} else if (c[1] == 'x') {
-				length->type = LSM_SVG_LENGTH_TYPE_EXS;
-				c += 2;
-			} else
-				length->type = LSM_SVG_LENGTH_TYPE_ERROR;
-		} else if (c[0] == 'p') {
-			if (c[1] == 'x') {
-				length->type = LSM_SVG_LENGTH_TYPE_PX;
-				c += 2;
-			} else if (c[1] == 'c') {
-				length->type = LSM_SVG_LENGTH_TYPE_PC;
-				c += 2;
-			} else if (c[1] == 't') {
-				length->type = LSM_SVG_LENGTH_TYPE_PT;
-				c += 2;
-			} else
-				length->type = LSM_SVG_LENGTH_TYPE_ERROR;
-		} else if (c[0] == 'c' && c[0] == 'm') {
-				length->type = LSM_SVG_LENGTH_TYPE_CM;
-				c += 2;
-		} else if (c[0] == 'm' && c[0] == 'm') {
-				length->type = LSM_SVG_LENGTH_TYPE_MM;
-				c += 2;
-		} else if (c[0] == 'i' && c[0] == 'n') {
-				length->type = LSM_SVG_LENGTH_TYPE_IN;
-				c += 2;
-		} else
-			length->type = LSM_SVG_LENGTH_TYPE_NUMBER;
-	} else {
-		length->type = LSM_SVG_LENGTH_TYPE_NUMBER;
-	}
-
-	*str = c;
-
-	return TRUE;
-}
diff --git a/src/lsmsvglength.h b/src/lsmsvglength.h
index 10d5e52..95c21f6 100644
--- a/src/lsmsvglength.h
+++ b/src/lsmsvglength.h
@@ -53,12 +53,6 @@ double 			lsm_svg_length_normalize	(const LsmSvgLength *length,
 							 const LsmSvgViewbox *viewbox,
 							 double font_size,
 							 LsmSvgLengthDirection direction);
-gboolean 		lsm_svg_parse_length 		(char **str, LsmSvgLength *length);
-
-typedef struct {
-	unsigned int n_lengths;
-	LsmSvgLength *lengths;
-} LsmSvgLengthList;
 
 G_END_DECLS
 
diff --git a/src/lsmsvgtextelement.c b/src/lsmsvgtextelement.c
index fd21f22..bb647ce 100644
--- a/src/lsmsvgtextelement.c
+++ b/src/lsmsvgtextelement.c
@@ -52,56 +52,37 @@ lsm_svg_text_element_render (LsmSvgElement *self, LsmSvgView *view)
 	LsmSvgTextElement *text = LSM_SVG_TEXT_ELEMENT (self);
 	LsmDomNode *node = LSM_DOM_NODE (self);
 	LsmDomNode *iter;
-	double *x, *y, *dx, *dy;
-	unsigned int n_x, n_y, n_dx, n_dy;
-	gboolean first_text = TRUE;
+	GString *string = g_string_new ("");
+	double x, y;
 
 	if (node->first_child == NULL)
 		return;
 
-	lsm_svg_view_start_text (view);
-
-	x = lsm_svg_view_normalize_length_list (view, &text->x.list, LSM_SVG_LENGTH_DIRECTION_HORIZONTAL, &n_x);
-	y = lsm_svg_view_normalize_length_list (view, &text->y.list, LSM_SVG_LENGTH_DIRECTION_HORIZONTAL, &n_y);
-	dx = lsm_svg_view_normalize_length_list (view, &text->dx.list, LSM_SVG_LENGTH_DIRECTION_HORIZONTAL, &n_dx);
-	dy = lsm_svg_view_normalize_length_list (view, &text->dy.list, LSM_SVG_LENGTH_DIRECTION_HORIZONTAL, &n_dy);
-
-	iter = LSM_DOM_NODE (self)->first_child;
-	while (iter != NULL) {
+	for (iter = LSM_DOM_NODE (self)->first_child; iter != NULL; iter = iter->next_sibling) {
 		if (LSM_IS_DOM_TEXT (iter)) {
-			GString *string;
-			string = g_string_new ("");
-			for (; LSM_IS_DOM_TEXT (iter); iter = iter->next_sibling)
-				g_string_append (string, lsm_dom_node_get_node_value (iter));
-			lsm_str_consolidate (string->str);
-			if (first_text) {
-				lsm_svg_view_show_text (view, string->str, n_x, x, n_y, y, n_dx, dx, n_dy, dy);
-				first_text = FALSE;
-			} else 
-				lsm_svg_view_show_text (view, string->str, 0, NULL, 0, NULL, 0, NULL, 0, NULL);
-			g_string_free (string, TRUE);
-		} else {
-		       	if (LSM_IS_SVG_ELEMENT (iter))
-				lsm_svg_element_render (LSM_SVG_ELEMENT (iter), view);
-			iter = iter->next_sibling;
+			g_string_append (string, lsm_dom_node_get_node_value (iter));
 		}
 	}
 
-	g_free (x);
-	g_free (y);
-	g_free (dx);
-	g_free (dy);
+	x = lsm_svg_view_normalize_length (view, &text->x.length, LSM_SVG_LENGTH_DIRECTION_HORIZONTAL);
+	y = lsm_svg_view_normalize_length (view, &text->y.length, LSM_SVG_LENGTH_DIRECTION_VERTICAL);
+
+	lsm_svg_view_show_text (view, g_strstrip (string->str), x, y);
 
-	lsm_svg_view_end_text (view);
+	g_string_free (string, TRUE);
+
+	for (iter = LSM_DOM_NODE (self)->first_child; iter != NULL; iter = iter->next_sibling)
+		if (LSM_IS_SVG_ELEMENT (iter))
+		    lsm_svg_element_render (LSM_SVG_ELEMENT (iter), view);
 }
 
 static void
 lsm_svg_text_element_get_extents (LsmSvgElement *self, LsmSvgView *view, LsmExtents *extents)
 {
-/*        LsmSvgTextElement *text = LSM_SVG_TEXT_ELEMENT (self);*/
+	LsmSvgTextElement *text = LSM_SVG_TEXT_ELEMENT (self);
 	LsmDomNode *iter;
 	GString *string = g_string_new ("");
-/*        double x, y;*/
+	double x, y;
 
 	for (iter = LSM_DOM_NODE (self)->first_child; iter != NULL; iter = iter->next_sibling) {
 		if (LSM_IS_DOM_TEXT (iter)) {
@@ -109,10 +90,10 @@ lsm_svg_text_element_get_extents (LsmSvgElement *self, LsmSvgView *view, LsmExte
 		}
 	}
 
-/*        x = lsm_svg_view_normalize_length (view, &text->x.length, LSM_SVG_LENGTH_DIRECTION_HORIZONTAL);*/
-/*        y = lsm_svg_view_normalize_length (view, &text->y.length, LSM_SVG_LENGTH_DIRECTION_VERTICAL);*/
+	x = lsm_svg_view_normalize_length (view, &text->x.length, LSM_SVG_LENGTH_DIRECTION_HORIZONTAL);
+	y = lsm_svg_view_normalize_length (view, &text->y.length, LSM_SVG_LENGTH_DIRECTION_VERTICAL);
 
-	lsm_svg_view_text_extents (view, g_strstrip (string->str), 0, 0, 0, NULL, 0, NULL, extents);
+	lsm_svg_view_text_extents (view, g_strstrip (string->str), x, y, extents);
 
 	g_string_free (string, TRUE);
 }
@@ -125,15 +106,13 @@ lsm_svg_text_element_new (void)
 	return g_object_new (LSM_TYPE_SVG_TEXT_ELEMENT, NULL);
 }
 
-static const LsmSvgLengthList length_list_default =	{.n_lengths = 0, .lengths = NULL}; 
+static const LsmSvgLength length_default = 	 { .value_unit =   0.0, .type = LSM_SVG_LENGTH_TYPE_PX};
 
 static void
 lsm_svg_text_element_init (LsmSvgTextElement *self)
 {
-	self->x.list = length_list_default;
-	self->y.list = length_list_default;
-	self->dx.list = length_list_default;
-	self->dy.list = length_list_default;
+	self->x.length = length_default;
+	self->y.length = length_default;
 }
 
 static void
@@ -148,26 +127,14 @@ static const LsmAttributeInfos lsm_svg_text_element_attribute_infos[] = {
 	{
 		.name = "x",
 		.attribute_offset = offsetof (LsmSvgTextElement, x),
-		.trait_class = &lsm_svg_length_list_trait_class,
-		.trait_default = &length_list_default
+		.trait_class = &lsm_svg_length_trait_class,
+		.trait_default = &length_default
 	},
 	{
 		.name = "y",
 		.attribute_offset = offsetof (LsmSvgTextElement, y),
-		.trait_class = &lsm_svg_length_list_trait_class,
-		.trait_default = &length_list_default
-	},
-	{
-		.name = "dx",
-		.attribute_offset = offsetof (LsmSvgTextElement, dx),
-		.trait_class = &lsm_svg_length_list_trait_class,
-		.trait_default = &length_list_default
-	},
-	{
-		.name = "dy",
-		.attribute_offset = offsetof (LsmSvgTextElement, dy),
-		.trait_class = &lsm_svg_length_list_trait_class,
-		.trait_default = &length_list_default
+		.trait_class = &lsm_svg_length_trait_class,
+		.trait_default = &length_default
 	}
 };
 
diff --git a/src/lsmsvgtextelement.h b/src/lsmsvgtextelement.h
index b34b13f..4cd8421 100644
--- a/src/lsmsvgtextelement.h
+++ b/src/lsmsvgtextelement.h
@@ -41,10 +41,8 @@ typedef struct _LsmSvgTextElementClass LsmSvgTextElementClass;
 struct _LsmSvgTextElement {
 	LsmSvgTransformable base;
 
-	LsmSvgLengthListAttribute	x;
-	LsmSvgLengthListAttribute	y;
-	LsmSvgLengthListAttribute	dx;
-	LsmSvgLengthListAttribute	dy;
+	LsmSvgLengthAttribute	x;
+	LsmSvgLengthAttribute	y;
 };
 
 struct _LsmSvgTextElementClass {
diff --git a/src/lsmsvgtraits.c b/src/lsmsvgtraits.c
index fb5ef5b..053467e 100644
--- a/src/lsmsvgtraits.c
+++ b/src/lsmsvgtraits.c
@@ -131,78 +131,6 @@ const LsmTraitClass lsm_svg_length_trait_class = {
 	.to_string = lsm_svg_length_trait_to_string
 };
 
-static gboolean
-lsm_svg_length_list_trait_from_string (LsmTrait *abstract_trait, char *string)
-{
-	LsmSvgLengthList *length_list = (LsmSvgLengthList *) abstract_trait;
-	unsigned int n_lengths = 1;
-	unsigned int i;
-	gboolean success = FALSE;
-	char *iter = (char *) string;
-
-	g_free (length_list->lengths);
-	length_list->n_lengths = 0;
-	length_list->lengths = NULL;
-
-	while (*iter != '\0') {
-		if (*iter == ',' ||
-		    *iter == ' ') {
-			n_lengths++;
-			do {
-				iter++;
-			} while (*iter == ',' ||
-				 *iter == ' ');
-		} else
-			iter++;
-	}
-
-	length_list->lengths = g_new (LsmSvgLength, n_lengths);
-	length_list->n_lengths = n_lengths;
-	iter = (char *)string;
-	lsm_str_skip_spaces (&iter);
-
-	for (i = 0; i < n_lengths; i++) {
-		success = lsm_svg_parse_length (&iter, &length_list->lengths[i]);
-
-		if (!success)
-			break;
-		lsm_str_skip_comma_and_spaces (&iter);
-	}
-
-	if (!success) {
-		g_free (length_list->lengths);
-		length_list->lengths = NULL;
-		length_list->n_lengths = 0;
-	}
-
-	return TRUE;
-}
-
-static char *
-lsm_svg_length_list_trait_to_string (LsmTrait *abstract_trait)
-{
-	g_assert_not_reached ();
-
-	return NULL;
-}
-
-static void
-lsm_svg_length_list_trait_finalize (LsmTrait *abstract_trait)
-{
-	LsmSvgLengthList *svg_length_list = (LsmSvgLengthList *) abstract_trait;
-
-	g_free (svg_length_list->lengths);
-	svg_length_list->n_lengths = 0;
-	svg_length_list->lengths = NULL;
-}
-
-const LsmTraitClass lsm_svg_length_list_trait_class = {
-	.size = sizeof (LsmSvgLengthList),
-	.from_string = lsm_svg_length_list_trait_from_string,
-	.to_string = lsm_svg_length_list_trait_to_string,
-	.finalize = lsm_svg_length_list_trait_finalize
-};
-
 static void
 _init_matrix (LsmSvgMatrix *matrix, LsmSvgTransformType transform, unsigned int n_values, double values[])
 {
@@ -857,8 +785,6 @@ static char *
 lsm_svg_dash_array_trait_to_string (LsmTrait *abstract_trait)
 {
 	g_assert_not_reached ();
-
-	return NULL;
 }
 
 static void
diff --git a/src/lsmsvgtraits.h b/src/lsmsvgtraits.h
index 62be70d..7fb2644 100644
--- a/src/lsmsvgtraits.h
+++ b/src/lsmsvgtraits.h
@@ -84,7 +84,6 @@ extern const LsmTraitClass lsm_svg_font_stretch_trait_class;
 extern const LsmTraitClass lsm_svg_font_style_trait_class;
 extern const LsmTraitClass lsm_svg_font_weight_trait_class;
 extern const LsmTraitClass lsm_svg_length_trait_class;
-extern const LsmTraitClass lsm_svg_length_list_trait_class;
 extern const LsmTraitClass lsm_svg_line_join_trait_class;
 extern const LsmTraitClass lsm_svg_line_cap_trait_class;
 extern const LsmTraitClass lsm_svg_marker_units_trait_class;
diff --git a/src/lsmsvgtspanelement.c b/src/lsmsvgtspanelement.c
index 2e87fea..9e16950 100644
--- a/src/lsmsvgtspanelement.c
+++ b/src/lsmsvgtspanelement.c
@@ -52,45 +52,26 @@ lsm_svg_tspan_element_render (LsmSvgElement *self, LsmSvgView *view)
 	LsmSvgTspanElement *tspan = LSM_SVG_TSPAN_ELEMENT (self);
 	LsmDomNode *node = LSM_DOM_NODE (self);
 	LsmDomNode *iter;
-	double *x, *y, *dx, *dy;
-	unsigned int n_x, n_y, n_dx, n_dy;
-	gboolean first_text = TRUE;
+	GString *string = g_string_new ("");
+	double x, y;
 
 	lsm_debug_render ("[LsmSvgTspanElement::render] Render");
 
 	if (node->first_child == NULL)
 		return;
 
-	x = lsm_svg_view_normalize_length_list (view, &tspan->x.list, LSM_SVG_LENGTH_DIRECTION_HORIZONTAL, &n_x);
-	y = lsm_svg_view_normalize_length_list (view, &tspan->y.list, LSM_SVG_LENGTH_DIRECTION_HORIZONTAL, &n_y);
-	dx = lsm_svg_view_normalize_length_list (view, &tspan->dx.list, LSM_SVG_LENGTH_DIRECTION_HORIZONTAL, &n_dx);
-	dy = lsm_svg_view_normalize_length_list (view, &tspan->dy.list, LSM_SVG_LENGTH_DIRECTION_HORIZONTAL, &n_dy);
-
-	iter = LSM_DOM_NODE (self)->first_child;
-	while (iter != NULL) {
+	for (iter = LSM_DOM_NODE (self)->first_child; iter != NULL; iter = iter->next_sibling) {
 		if (LSM_IS_DOM_TEXT (iter)) {
-			GString *string;
-			string = g_string_new ("");
-			for (; LSM_IS_DOM_TEXT (iter); iter = iter->next_sibling)
-				g_string_append (string, lsm_dom_node_get_node_value (iter));
-			lsm_str_consolidate (string->str);
-			if (first_text) {
-				lsm_svg_view_show_text (view, string->str, n_x, x, n_y, y, n_dx, dx, n_dy, dy);
-				first_text = FALSE;
-			} else 
-				lsm_svg_view_show_text (view, string->str, 0, NULL, 0, NULL, 0, NULL, 0, NULL);
-			g_string_free (string, TRUE);
-		} else {
-		       	if (LSM_IS_SVG_ELEMENT (iter))
-				lsm_svg_element_render (LSM_SVG_ELEMENT (iter), view);
-			iter = iter->next_sibling;
+			g_string_append (string, lsm_dom_node_get_node_value (iter));
 		}
 	}
 
-	g_free (x);
-	g_free (y);
-	g_free (dx);
-	g_free (dy);
+	x = lsm_svg_view_normalize_length (view, &tspan->x.length, LSM_SVG_LENGTH_DIRECTION_HORIZONTAL);
+	y = lsm_svg_view_normalize_length (view, &tspan->y.length, LSM_SVG_LENGTH_DIRECTION_VERTICAL);
+
+	lsm_svg_view_show_text (view, g_strstrip (string->str), x, y);
+
+	g_string_free (string, TRUE);
 }
 
 /* LsmSvgTspanElement implementation */
@@ -101,13 +82,13 @@ lsm_svg_tspan_element_new (void)
 	return g_object_new (LSM_TYPE_SVG_TSPAN_ELEMENT, NULL);
 }
 
-static const LsmSvgLengthList length_list_default =	{.n_lengths = 0, .lengths = NULL}; 
+static const LsmSvgLength length_default = 	 { .value_unit =   0.0, .type = LSM_SVG_LENGTH_TYPE_PX};
 
 static void
 lsm_svg_tspan_element_init (LsmSvgTspanElement *self)
 {
-	self->x.list = length_list_default;
-	self->y.list = length_list_default;
+	self->x.length = length_default;
+	self->y.length = length_default;
 }
 
 static void
@@ -122,26 +103,14 @@ static const LsmAttributeInfos lsm_svg_tspan_element_attribute_infos[] = {
 	{
 		.name = "x",
 		.attribute_offset = offsetof (LsmSvgTspanElement, x),
-		.trait_class = &lsm_svg_length_list_trait_class,
-		.trait_default = &length_list_default
+		.trait_class = &lsm_svg_length_trait_class,
+		.trait_default = &length_default
 	},
 	{
 		.name = "y",
 		.attribute_offset = offsetof (LsmSvgTspanElement, y),
-		.trait_class = &lsm_svg_length_list_trait_class,
-		.trait_default = &length_list_default
-	},
-	{
-		.name = "dx",
-		.attribute_offset = offsetof (LsmSvgTspanElement, dx),
-		.trait_class = &lsm_svg_length_list_trait_class,
-		.trait_default = &length_list_default
-	},
-	{
-		.name = "dy",
-		.attribute_offset = offsetof (LsmSvgTspanElement, dy),
-		.trait_class = &lsm_svg_length_list_trait_class,
-		.trait_default = &length_list_default
+		.trait_class = &lsm_svg_length_trait_class,
+		.trait_default = &length_default
 	}
 };
 
diff --git a/src/lsmsvgtspanelement.h b/src/lsmsvgtspanelement.h
index afb3ed1..b2019b7 100644
--- a/src/lsmsvgtspanelement.h
+++ b/src/lsmsvgtspanelement.h
@@ -41,10 +41,8 @@ typedef struct _LsmSvgTspanElementClass LsmSvgTspanElementClass;
 struct _LsmSvgTspanElement {
 	LsmSvgElement element;
 
-	LsmSvgLengthListAttribute	x;
-	LsmSvgLengthListAttribute	y;
-	LsmSvgLengthListAttribute	dx;
-	LsmSvgLengthListAttribute	dy;
+	LsmSvgLengthAttribute	x;
+	LsmSvgLengthAttribute	y;
 };
 
 struct _LsmSvgTspanElementClass {
diff --git a/src/lsmsvgview.c b/src/lsmsvgview.c
index ebc487b..5ea92f4 100644
--- a/src/lsmsvgview.c
+++ b/src/lsmsvgview.c
@@ -121,27 +121,6 @@ lsm_svg_view_normalize_length (LsmSvgView *view, const LsmSvgLength *length, Lsm
 	return lsm_svg_length_normalize (length, view->viewbox_stack->data, view->style->font_size_px, direction);
 }
 
-double *
-lsm_svg_view_normalize_length_list (LsmSvgView *view, const LsmSvgLengthList *list, LsmSvgLengthDirection direction, unsigned int *n_data)
-{
-	double *data;
-	unsigned int i;
-
-	g_return_val_if_fail (n_data != NULL, NULL);
-	*n_data = 0;
-	g_return_val_if_fail (LSM_IS_SVG_VIEW (view), NULL);
-
-	if (list->n_lengths == 0)
-		return NULL;
-
-	*n_data = list->n_lengths;
-	data = g_new (double, list->n_lengths);
-	for (i = 0; i < list->n_lengths; i++)
-		data[i] = lsm_svg_view_normalize_length (view, &list->lengths[i], direction);
-
-	return data;
-}
-
 static void
 _start_pattern (LsmSvgView *view, const LsmBox *extents, const LsmBox *object_extents, double opacity)
 {
@@ -1058,10 +1037,7 @@ lsm_svg_view_show_polygon (LsmSvgView *view, const char *points)
 }
 
 static void
-_update_pango_layout (LsmSvgView *view, unsigned int n, char const *string, double x, double y,
-		      unsigned int n_dx, const double *dx,
-		      unsigned int n_dy, const double *dy,
-		      LsmSvgViewPathInfos *path_infos)
+_update_pango_layout (LsmSvgView *view, char const *string, double x, double y, LsmSvgViewPathInfos *path_infos)
 {
 	const LsmSvgStyle *style;
 	PangoLayout *pango_layout;
@@ -1070,10 +1046,7 @@ _update_pango_layout (LsmSvgView *view, unsigned int n, char const *string, doub
 	PangoStyle font_style;
 	PangoLayoutIter *iter;
 	PangoRectangle rectangle;
-	PangoAttrList *attrs;
-	PangoAttribute *attr;
 	int baseline;
-	int i;
 	double x1, y1;
 
 	style = view->style;
@@ -1131,38 +1104,7 @@ _update_pango_layout (LsmSvgView *view, unsigned int n, char const *string, doub
 	}
 	pango_font_description_set_style (font_description, font_style);
 
-	pango_layout_set_text (pango_layout, string, n);
-
-	attrs = pango_attr_list_new ();
-	for (i = 0; i < n_dx; i++) {
-
-		attr = pango_attr_letter_spacing_new (pango_units_from_double (dx[i]));
-		attr->start_index = i;
-		if (i < n_dx - 1)
-			attr->end_index = i + 1;
-		else
-			attr->end_index = PANGO_ATTR_INDEX_TO_TEXT_END;
-
-		pango_attr_list_insert (attrs, attr);
-
-		printf ("spacing = %g\n", dx[i]);
-	}
-	for (i = 0; i < n_dy; i++) {
-
-		attr = pango_attr_rise_new (-pango_units_from_double (dy[i]));
-		attr->start_index = i;
-		if (i < n_dy - 1)
-			attr->end_index = i + 1;
-		else
-			attr->end_index = PANGO_ATTR_INDEX_TO_TEXT_END;
-
-		pango_attr_list_insert (attrs, attr);
-
-		printf ("rise = %g\n", dy[i]);
-	}
-	pango_layout_set_attributes (pango_layout, attrs);
-	pango_attr_list_unref (attrs);
-
+	pango_layout_set_text (pango_layout, string, -1);
 	pango_layout_set_font_description (pango_layout, font_description);
 	pango_layout_get_extents (pango_layout, &rectangle, NULL);
 
@@ -1206,7 +1148,7 @@ _lock_pango_layout (LsmSvgView *view)
 		view->pango_layout_stack = g_slist_prepend (view->pango_layout_stack, view->pango_layout);
 		view->pango_layout = pango_layout_new (pango_context);
 
-		lsm_debug_render ("[LsmSvgView::_lock_pango_layout] Create a new pango layout");
+		lsm_debug_render ("[LsmSvgView::show_text] Create a new pango layout");
 
 		return TRUE;
 	}
@@ -1221,7 +1163,7 @@ _unlock_pango_layout (LsmSvgView *view, gboolean need_pop)
 {
 
 	if (need_pop) {
-		lsm_debug_render ("[LsmSvgView::_unlock_pango_layout] Free the child pango layout");
+		lsm_debug_render ("[LsmSvgView::show_text] Free the child pango layout");
 
 		if (view->pango_layout != NULL) {
 			g_object_unref (view->pango_layout);
@@ -1230,31 +1172,23 @@ _unlock_pango_layout (LsmSvgView *view, gboolean need_pop)
 			view->pango_layout_stack = g_slist_delete_link (view->pango_layout_stack,
 									view->pango_layout_stack);
 		} else
-			g_warning ("[LsmSvgView::_unlock_pango_layout] Pango layout stack empty");
+			g_warning ("[LsmSvgView::show_text] Pango layout stack empty");
 	}
 
 	view->is_pango_layout_in_use = FALSE;
 }
 
-static void
-_show_text (LsmSvgView *view,
-	    unsigned int n, char const *string, 
-	    unsigned int n_x, double *x, unsigned int n_y, double *y,
-	    unsigned int n_dx, double *dx, unsigned int n_dy, double *dy)
+void
+lsm_svg_view_show_text (LsmSvgView *view, char const *string, double x, double y)
 {
 	LsmSvgViewPathInfos path_infos = default_path_infos;
-	PangoRectangle extents;
-	PangoLayoutIter *layout_iter;
 	const LsmSvgStyle *style;
 	gboolean need_pop;
-	double x_text;
-	double y_text;
-	double x_end, y_end;
-	double baseline;
-	cairo_t *cairo;
 
+	if (string == NULL || string[0] == '\0')
+		return;
 
-	cairo = view->dom_view.cairo;
+	g_return_if_fail (LSM_IS_SVG_VIEW (view));
 
 	style = view->style;
 
@@ -1262,143 +1196,28 @@ _show_text (LsmSvgView *view,
 
 	need_pop = _lock_pango_layout (view);
 
-	cairo_get_current_point (cairo, &x_text, &y_text);
-	if (x != NULL)
-		x_text = x[0];
-	if (y != NULL)
-		y_text = y[0];
-
-
-	_update_pango_layout (view, n, string, x_text, y_text, n_dx, dx, n_dy, dy, &path_infos);
+	_update_pango_layout (view, string, x, y, &path_infos);
 
 	if (style->writing_mode->value == LSM_SVG_WRITING_MODE_TB ||
 	    style->writing_mode->value == LSM_SVG_WRITING_MODE_TB_RL) {
 
-		cairo_save (cairo);
-		cairo_rotate (cairo, M_PI / 2.0);
-		cairo_move_to (cairo, path_infos.extents.x1, path_infos.extents.y1);
+		cairo_save (view->dom_view.cairo);
+		cairo_rotate (view->dom_view.cairo, M_PI / 2.0);
+		cairo_move_to (view->dom_view.cairo, path_infos.extents.x1, path_infos.extents.y1);
 
 		process_path (view, &path_infos);
 
-		cairo_restore (cairo);
+		cairo_restore (view->dom_view.cairo);
 	} else {
-		cairo_move_to (cairo, path_infos.extents.x1, path_infos.extents.y1);
+		cairo_move_to (view->dom_view.cairo, path_infos.extents.x1, path_infos.extents.y1);
 		process_path (view, &path_infos);
 	}
 
-	layout_iter = pango_layout_get_iter (view->pango_layout);
-	pango_layout_iter_get_line_extents (layout_iter, NULL, &extents);
-	baseline = pango_units_to_double (pango_layout_iter_get_baseline (layout_iter));
-	pango_layout_iter_free (layout_iter);
-
-	x_end = pango_units_to_double (extents.x + extents.width) + path_infos.extents.x1;
-	y_end = pango_units_to_double (extents.y) + baseline + path_infos.extents.y1;
-
-	if (view->debug_text) {
-		double x1, y1;
-
-		lsm_debug_render ("[LsmSvgView::_show_text] Logical extents %gx%g at %g,%g\n",
-			pango_units_to_double (extents.width),
-			pango_units_to_double (extents.height),
-			pango_units_to_double (extents.x),
-			pango_units_to_double (extents.y));
-
-		lsm_debug_render ("[LsmSvgView::_show_text] End point is %g, %g\n", x_end, y_end);
-		lsm_debug_render ("[LsmSvgView::_show_text] Baseline = %g\n", baseline);
-
-		x1 = 1;
-		y1 = 1;
-		cairo_device_to_user_distance (cairo, &x1, &y1);
-
-		cairo_set_source_rgba (cairo, 1.0, 0.0, 0.0, 0.2);
-		cairo_set_line_width (cairo, x1);
-		cairo_rectangle (cairo, path_infos.extents.x1, path_infos.extents.y1,
-				 pango_units_to_double (extents.x + extents.width),
-				 pango_units_to_double (extents.y + extents.height));
-		cairo_stroke (cairo);
-		cairo_set_source_rgba (cairo, 1.0, 0.0, 0.0, 0.2);
-		cairo_arc (cairo, x_end, y_end, 4.0 * x1, 0.0, 2.0 * M_PI);
-		cairo_arc (cairo, path_infos.extents.x1, path_infos.extents.y1, 4.0 * x1, 0.0, 2.0 * M_PI);
-		cairo_fill (cairo);
-	}
-
-	cairo_move_to (cairo, x_end, y_end);
-
 	_unlock_pango_layout (view, need_pop);
 }
 
 void
-lsm_svg_view_start_text (LsmSvgView *view)
-{
-	g_return_if_fail (LSM_IS_SVG_VIEW (view));
-
-	cairo_move_to (view->dom_view.cairo, 0, 0);
-}
-
-void
-lsm_svg_view_end_text (LsmSvgView *view)
-{
-	g_return_if_fail (LSM_IS_SVG_VIEW (view));
-
-	cairo_new_path (view->dom_view.cairo);
-}
-
-void
-lsm_svg_view_show_text (LsmSvgView *view, char const *string, 
-			unsigned int n_x, double *x, unsigned int n_y, double *y,
-			unsigned int n_dx, double *dx, unsigned int n_dy, double *dy)
-{
-	unsigned int n, i;
-	char *iter = (char *) string;
-
-	if (string == NULL || string[0] == '\0')
-		return;
-
-	g_return_if_fail (LSM_IS_SVG_VIEW (view));
-	g_return_if_fail (n_x > 0 || x == NULL);
-	g_return_if_fail (n_y > 0 || y == NULL);
-	g_return_if_fail (n_dx > 0 || dx == NULL);
-	g_return_if_fail (n_dy > 0 || dy == NULL);
-
-	n = MAX (n_x, n_y);
-	if (n <= 1) {
-		_show_text (view, strlen (string), string, n_x, x, n_y, y, n_dx, dx, n_dy, dy);
-		return;
-	}
-
-	for (i = 0; (i < n - 1) && iter[0] != '\0'; i++) {
-		char *next_char;
-
-		next_char = g_utf8_next_char (iter);
-		_show_text (view, next_char - iter, iter,
-			    i < n_x ? n_x - i : 0,
-			    i < n_x ? &x[i] : NULL,
-			    i < n_y ? n_y - i : 0,
-			    i < n_y ? &y[i] : NULL,
-			    i < n_dx ? n_dx - i : 0,
-			    i < n_dx ? &dx[i] : NULL,
-			    i < n_dy ? n_dy - i : 0,
-			    i < n_dy ? &dy[i] : NULL);
-		iter = next_char;
-	}
-
-	if (iter[0] != '\0')
-		_show_text (view, strlen (iter), iter,
-			    i < n_x ? n_x - i : 0,
-			    i < n_x ? &x[i] : NULL,
-			    i < n_y ? n_y - i : 0,
-			    i < n_y ? &y[i] : NULL,
-			    i < n_dx ? n_dx - i : 0,
-			    i < n_dx ? &dx[i] : NULL,
-			    i < n_dy ? n_dy - i : 0,
-			    i < n_dy ? &dy[i] : NULL);
-}
-
-void
-lsm_svg_view_text_extents (LsmSvgView *view, char const *string,
-			   double x, double y,
-			   unsigned int n_dx, double *dx, unsigned int n_dy, double *dy,
-			   LsmExtents *extents)
+lsm_svg_view_text_extents (LsmSvgView *view, char const *string, double x, double y, LsmExtents *extents)
 {
 	LsmSvgViewPathInfos path_infos = default_path_infos;
 	gboolean need_pop;
@@ -1416,7 +1235,7 @@ lsm_svg_view_text_extents (LsmSvgView *view, char const *string,
 
 	need_pop = _lock_pango_layout (view);
 
-	_update_pango_layout (view, strlen (string), string, x, y, n_dx, dx, n_dy, dy, &path_infos);
+	_update_pango_layout (view, string, x, y, &path_infos);
 
 	_unlock_pango_layout (view, need_pop);
 
@@ -2535,10 +2354,6 @@ lsm_svg_view_set_debug (LsmDomView *view, const char *feature, gboolean enable)
 		svg_view->debug_mask = enable;
 	else if (g_strcmp0 (feature, "pattern") == 0)
 		svg_view->debug_pattern = enable;
-	else if (g_strcmp0 (feature, "group") == 0)
-		svg_view->debug_group = enable;
-	else if (g_strcmp0 (feature, "text") == 0)
-		svg_view->debug_text = enable;
 }
 
 LsmSvgView *
diff --git a/src/lsmsvgview.h b/src/lsmsvgview.h
index c60203c..23de59b 100644
--- a/src/lsmsvgview.h
+++ b/src/lsmsvgview.h
@@ -79,8 +79,6 @@ struct _LsmSvgView {
 	gboolean debug_filter;
 	gboolean debug_mask;
 	gboolean debug_pattern;
-	gboolean debug_group;
-	gboolean debug_text;
 };
 
 struct _LsmSvgViewClass {
@@ -93,8 +91,6 @@ LsmSvgView *	lsm_svg_view_new 			(LsmSvgDocument *document);
 
 double 		lsm_svg_view_normalize_length 		(LsmSvgView *view, const LsmSvgLength *length,
 							 LsmSvgLengthDirection direction);
-double * 	lsm_svg_view_normalize_length_list 	(LsmSvgView *view, const LsmSvgLengthList *list, LsmSvgLengthDirection direction,
-							 unsigned int *n_data);
 
 const LsmBox *	lsm_svg_view_get_pattern_extents	(LsmSvgView *view);
 const LsmBox * 	lsm_svg_view_get_object_extents 	(LsmSvgView *view);
@@ -128,15 +124,8 @@ void		lsm_svg_view_show_path		(LsmSvgView *view, const char *d);
 void 		lsm_svg_view_show_line 		(LsmSvgView *view, double x1, double y1, double x2, double y2);
 void 		lsm_svg_view_show_polyline	(LsmSvgView *view, const char *points);
 void 		lsm_svg_view_show_polygon	(LsmSvgView *view, const char *points);
-void 		lsm_svg_view_start_text 	(LsmSvgView *view);
-void 		lsm_svg_view_end_text 		(LsmSvgView *view);
-void 		lsm_svg_view_show_text 		(LsmSvgView *view, char const *string, 
-						 unsigned int n_x, double *x, unsigned int n_y, double *y,
-						 unsigned int n_dx, double *dx, unsigned int n_dy, double *dy);
-void 		lsm_svg_view_text_extents 	(LsmSvgView *view, char const *string,
-						 double x, double y,
-						 unsigned int n_dx, double *dx, unsigned int n_dy, double *dy,
-						 LsmExtents *extents);
+void 		lsm_svg_view_show_text 		(LsmSvgView *view, char const *text, double x, double y);
+void 		lsm_svg_view_text_extents 	(LsmSvgView *view, char const *string, double x, double y, LsmExtents *extents);
 void		lsm_svg_view_show_pixbuf	(LsmSvgView *view, GdkPixbuf *pixbuf);
 
 void 		lsm_svg_view_push_viewbox 		(LsmSvgView *view, const LsmBox *viewbox);
diff --git a/tests/.gitignore b/tests/.gitignore
index 21a68cd..450d4ba 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -1,5 +1,4 @@
 dom
-str
 lsm-test
 fuzz.*
 *-diff.png



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]