[lasem] svg_style: implement visibilty attribute.



commit adca57af238468cb95060745fa3a14cf2408747c
Author: Emmanuel Pacaud <emmanuel gnome org>
Date:   Tue Aug 24 11:46:36 2010 +0200

    svg_style: implement visibilty attribute.

 src/lsmsvgelement.c |   10 ++++++----
 src/lsmsvgenums.c   |   22 ++++++++++++++++++++++
 src/lsmsvgenums.h   |   10 ++++++++++
 src/lsmsvgstyle.c   |    2 +-
 src/lsmsvgstyle.h   |    7 ++++++-
 src/lsmsvgtraits.c  |   24 ++++++++++++++++++++++++
 src/lsmsvgtraits.h  |    1 +
 7 files changed, 70 insertions(+), 6 deletions(-)
---
diff --git a/src/lsmsvgelement.c b/src/lsmsvgelement.c
index 27ae899..343ba0f 100644
--- a/src/lsmsvgelement.c
+++ b/src/lsmsvgelement.c
@@ -151,11 +151,13 @@ lsm_svg_element_render (LsmSvgElement *element, LsmSvgView *view)
 	lsm_svg_view_push_style (view, style);
 
 
-	lsm_debug ("render", "[LsmSvgElement::render] Render %s (%s)",
-		   lsm_dom_node_get_node_name (LSM_DOM_NODE (element)),
-		   element->id.value != NULL ? element->id.value : "no id");
+	if (style->visibility->value == LSM_SVG_VISIBILITY_VISIBLE) {
+		lsm_debug ("render", "[LsmSvgElement::render] Render %s (%s)",
+			   lsm_dom_node_get_node_name (LSM_DOM_NODE (element)),
+			   element->id.value != NULL ? element->id.value : "no id");
 
-	element_class->render (element, view);
+		element_class->render (element, view);
+	}
 
 	lsm_svg_view_pop_style (view);
 	lsm_svg_view_pop_element (view);
diff --git a/src/lsmsvgenums.c b/src/lsmsvgenums.c
index 1cfa97c..6c633ba 100644
--- a/src/lsmsvgenums.c
+++ b/src/lsmsvgenums.c
@@ -383,3 +383,25 @@ lsm_svg_text_anchor_from_string (const char *string)
 					   G_N_ELEMENTS (lsm_svg_text_anchor_strings));
 }
 
+static const char *lsm_svg_visibility_strings[] = {
+	"visible",
+	"hidden",
+	"collapse"
+};
+
+const char *
+lsm_svg_visibility_to_string (LsmSvgVisibility visibility)
+{
+	if (visibility < 0 || visibility > LSM_SVG_VISIBILITY_HIDDEN)
+		return NULL;
+
+	return lsm_svg_visibility_strings[visibility];
+}
+
+LsmSvgVisibility
+lsm_svg_visibility_from_string (const char *string)
+{
+	return lsm_enum_value_from_string (string, lsm_svg_visibility_strings,
+					   G_N_ELEMENTS (lsm_svg_visibility_strings));
+}
+
diff --git a/src/lsmsvgenums.h b/src/lsmsvgenums.h
index 5a6e45b..6460ae9 100644
--- a/src/lsmsvgenums.h
+++ b/src/lsmsvgenums.h
@@ -251,6 +251,16 @@ typedef enum {
 } LsmSvgFilterInput;
 
 typedef enum {
+	LSM_SVG_VISIBILITY_ERROR = -1,
+	LSM_SVG_VISIBILITY_VISIBLE,
+	LSM_SVG_VISIBILITY_HIDDEN,
+	LSM_SVG_VISIBILITY_COLLAPSE
+} LsmSvgVisibility;
+
+const char * 		lsm_svg_visibility_to_string 		(LsmSvgVisibility visibility);
+LsmSvgVisibility	lsm_svg_visibility_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 a7ca03b..07cae9d 100644
--- a/src/lsmsvgstyle.c
+++ b/src/lsmsvgstyle.c
@@ -380,7 +380,7 @@ static const LsmPropertyInfos lsm_svg_property_infos[] = {
 	{
 		.name = "visibility",
 		.id = LSM_PROPERTY_OFFSET_TO_ID (LsmSvgStyle, visibility),
-		.trait_class = &lsm_null_trait_class,
+		.trait_class = &lsm_svg_visibility_trait_class,
 		.trait_default = "visible"
 	},
 	{
diff --git a/src/lsmsvgstyle.h b/src/lsmsvgstyle.h
index c0a843f..4ea69b2 100644
--- a/src/lsmsvgstyle.h
+++ b/src/lsmsvgstyle.h
@@ -93,6 +93,11 @@ typedef struct {
 	LsmSvgTextAnchor value;
 } LsmSvgTextAnchorProperty;
 
+typedef struct {
+	LsmProperty base;
+	LsmSvgVisibility value;
+} LsmSvgVisibilityProperty;
+
 struct _LsmSvgStyle {
 	/* Not inherited */
 
@@ -157,7 +162,7 @@ struct _LsmSvgStyle {
 	LsmSvgLengthProperty *		stroke_width;
 	LsmSvgTextAnchorProperty *	text_anchor;
 	LsmProperty *			text_rendering;
-	LsmProperty *			visibility;
+	LsmSvgVisibilityProperty *	visibility;
 	LsmProperty *			word_spacing;
 	LsmProperty *			writing_mode;
 };
diff --git a/src/lsmsvgtraits.c b/src/lsmsvgtraits.c
index 592d526..244d697 100644
--- a/src/lsmsvgtraits.c
+++ b/src/lsmsvgtraits.c
@@ -876,6 +876,30 @@ const LsmTraitClass lsm_svg_text_anchor_trait_class = {
 };
 
 static gboolean
+lsm_svg_visibility_trait_from_string (LsmTrait *abstract_trait, char *string)
+{
+	LsmSvgVisibility *trait = (LsmSvgVisibility *) abstract_trait;
+
+	*trait = lsm_svg_visibility_from_string (string);
+
+	return *trait >= 0;
+}
+
+char *
+lsm_svg_visibility_trait_to_string (LsmTrait *abstract_trait)
+{
+	LsmSvgVisibility *trait = (LsmSvgVisibility *) abstract_trait;
+
+	return g_strdup (lsm_svg_visibility_to_string (*trait));
+}
+
+const LsmTraitClass lsm_svg_visibility_trait_class = {
+	.size = sizeof (LsmSvgVisibility),
+	.from_string = lsm_svg_visibility_trait_from_string,
+	.to_string = lsm_svg_visibility_trait_to_string
+};
+
+static gboolean
 lsm_svg_one_or_two_double_trait_from_string (LsmTrait *abstract_trait, char *string)
 {
 	LsmSvgOneOrTwoDouble *trait = (LsmSvgOneOrTwoDouble *) abstract_trait;
diff --git a/src/lsmsvgtraits.h b/src/lsmsvgtraits.h
index 167a29e..4369c8c 100644
--- a/src/lsmsvgtraits.h
+++ b/src/lsmsvgtraits.h
@@ -89,6 +89,7 @@ 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;
+extern const LsmTraitClass lsm_svg_visibility_trait_class;
 
 G_END_DECLS
 



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