[lasem] svg_text: add support for text-anchor.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [lasem] svg_text: add support for text-anchor.
- Date: Mon, 9 Aug 2010 20:54:43 +0000 (UTC)
commit 2ea0b172d9886c63af851f38f7806b0a8998352a
Author: Emmanuel Pacaud <emmanuel gnome org>
Date: Mon Aug 9 22:54:20 2010 +0200
svg_text: add support for text-anchor.
src/lsmsvgenums.c | 23 +++++++++++++++++++++++
src/lsmsvgenums.h | 10 ++++++++++
src/lsmsvgstyle.c | 2 +-
src/lsmsvgstyle.h | 7 ++++++-
src/lsmsvgtraits.c | 25 +++++++++++++++++++++++++
src/lsmsvgtraits.h | 1 +
src/lsmsvgview.c | 12 ++++++++++++
7 files changed, 78 insertions(+), 2 deletions(-)
---
diff --git a/src/lsmsvgenums.c b/src/lsmsvgenums.c
index 97d7e0a..1cfa97c 100644
--- a/src/lsmsvgenums.c
+++ b/src/lsmsvgenums.c
@@ -360,3 +360,26 @@ lsm_svg_font_weight_from_string (const char *string)
return -1;
}
}
+
+static const char *lsm_svg_text_anchor_strings[] = {
+ "start",
+ "middle",
+ "end"
+};
+
+const char *
+lsm_svg_text_anchor_to_string (LsmSvgTextAnchor text_anchor)
+{
+ if (text_anchor < 0 || text_anchor > LSM_SVG_TEXT_ANCHOR_MIDDLE)
+ return NULL;
+
+ return lsm_svg_text_anchor_strings[text_anchor];
+}
+
+LsmSvgTextAnchor
+lsm_svg_text_anchor_from_string (const char *string)
+{
+ return lsm_enum_value_from_string (string, lsm_svg_text_anchor_strings,
+ G_N_ELEMENTS (lsm_svg_text_anchor_strings));
+}
+
diff --git a/src/lsmsvgenums.h b/src/lsmsvgenums.h
index af75d2a..5dac966 100644
--- a/src/lsmsvgenums.h
+++ b/src/lsmsvgenums.h
@@ -231,6 +231,16 @@ const char * lsm_svg_font_weight_to_string (LsmSvgFontWeight font_weight);
LsmSvgFontWeight lsm_svg_font_weight_from_string (const char *string);
typedef enum {
+ LSM_SVG_TEXT_ANCHOR_ERROR = -1,
+ LSM_SVG_TEXT_ANCHOR_START,
+ LSM_SVG_TEXT_ANCHOR_MIDDLE,
+ LSM_SVG_TEXT_ANCHOR_END
+} LsmSvgTextAnchor;
+
+const char * lsm_svg_text_anchor_to_string (LsmSvgTextAnchor text_anchor);
+LsmSvgTextAnchor lsm_svg_text_anchor_from_string (const char *string);
+
+typedef enum {
LSM_SVG_ELEMENT_CATEGORY_NONE = 1 << 0,
LSM_SVG_ELEMENT_CATEGORY_DESCRIPTIVE = 1 << 1,
LSM_SVG_ELEMENT_CATEGORY_CONTAINER = 1 << 2,
diff --git a/src/lsmsvgstyle.c b/src/lsmsvgstyle.c
index 707f9a5..a7ca03b 100644
--- a/src/lsmsvgstyle.c
+++ b/src/lsmsvgstyle.c
@@ -368,7 +368,7 @@ static const LsmPropertyInfos lsm_svg_property_infos[] = {
{
.name = "text-anchor",
.id = LSM_PROPERTY_OFFSET_TO_ID (LsmSvgStyle, text_anchor),
- .trait_class = &lsm_null_trait_class,
+ .trait_class = &lsm_svg_text_anchor_trait_class,
.trait_default = "start"
},
{
diff --git a/src/lsmsvgstyle.h b/src/lsmsvgstyle.h
index aebad9a..c0a843f 100644
--- a/src/lsmsvgstyle.h
+++ b/src/lsmsvgstyle.h
@@ -88,6 +88,11 @@ typedef struct {
LsmSvgDashArray value;
} LsmSvgDashArrayProperty;
+typedef struct {
+ LsmProperty base;
+ LsmSvgTextAnchor value;
+} LsmSvgTextAnchorProperty;
+
struct _LsmSvgStyle {
/* Not inherited */
@@ -150,7 +155,7 @@ struct _LsmSvgStyle {
LsmSvgDoubleProperty * stroke_miter_limit;
LsmSvgDoubleProperty * stroke_opacity;
LsmSvgLengthProperty * stroke_width;
- LsmProperty * text_anchor;
+ LsmSvgTextAnchorProperty * text_anchor;
LsmProperty * text_rendering;
LsmProperty * visibility;
LsmProperty * word_spacing;
diff --git a/src/lsmsvgtraits.c b/src/lsmsvgtraits.c
index 7c0348d..1e55c51 100644
--- a/src/lsmsvgtraits.c
+++ b/src/lsmsvgtraits.c
@@ -832,3 +832,28 @@ const LsmTraitClass lsm_svg_angle_trait_class = {
.from_string = lsm_svg_angle_trait_from_string,
.to_string = lsm_svg_angle_trait_to_string
};
+
+static gboolean
+lsm_svg_text_anchor_trait_from_string (LsmTrait *abstract_trait, char *string)
+{
+ LsmSvgTextAnchor *trait = (LsmSvgTextAnchor *) abstract_trait;
+
+ *trait = lsm_svg_text_anchor_from_string (string);
+
+ return *trait >= 0;
+}
+
+char *
+lsm_svg_text_anchor_trait_to_string (LsmTrait *abstract_trait)
+{
+ LsmSvgTextAnchor *trait = (LsmSvgTextAnchor *) abstract_trait;
+
+ return g_strdup (lsm_svg_text_anchor_to_string (*trait));
+}
+
+const LsmTraitClass lsm_svg_text_anchor_trait_class = {
+ .size = sizeof (LsmSvgTextAnchor),
+ .from_string = lsm_svg_text_anchor_trait_from_string,
+ .to_string = lsm_svg_text_anchor_trait_to_string
+};
+
diff --git a/src/lsmsvgtraits.h b/src/lsmsvgtraits.h
index 76ee1e7..c639c7f 100644
--- a/src/lsmsvgtraits.h
+++ b/src/lsmsvgtraits.h
@@ -82,6 +82,7 @@ extern const LsmTraitClass lsm_svg_paint_trait_class;
extern const LsmTraitClass lsm_svg_pattern_units_trait_class;
extern const LsmTraitClass lsm_svg_preserve_aspect_ratio_trait_class;
extern const LsmTraitClass lsm_svg_spread_method_trait_class;
+extern const LsmTraitClass lsm_svg_text_anchor_trait_class;
G_END_DECLS
diff --git a/src/lsmsvgview.c b/src/lsmsvgview.c
index 2f4c314..0793859 100644
--- a/src/lsmsvgview.c
+++ b/src/lsmsvgview.c
@@ -1342,6 +1342,18 @@ lsm_svg_view_show_text (LsmSvgView *view, char const *string, double x, double y
x1 = x - pango_units_to_double (ink_rect.x);
y1 = y - pango_units_to_double (baseline);
+ switch (style->text_anchor->value) {
+ case LSM_SVG_TEXT_ANCHOR_END:
+ x1 -= pango_units_to_double (ink_rect.width);
+ break;
+ case LSM_SVG_TEXT_ANCHOR_MIDDLE:
+ x1 -= pango_units_to_double (ink_rect.width) / 2.0;
+ break;
+ case LSM_SVG_TEXT_ANCHOR_START:
+ default:
+ break;
+ }
+
cairo_move_to (view->dom_view.cairo, x1, y1);
pango_cairo_layout_path (view->dom_view.cairo, pango_layout);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]