[lasem] svg_style: display attribute support.



commit 0da30012c97e92dedfb56be40db624bc7cd4b270
Author: Emmanuel Pacaud <emmanuel gnome org>
Date:   Tue Aug 24 12:21:11 2010 +0200

    svg_style: display attribute support.
    
    Very rough for now. Extents are not ignored yet.

 src/lsmsvgelement.c |    3 ++-
 src/lsmsvgenums.c   |   36 ++++++++++++++++++++++++++++++++++++
 src/lsmsvgenums.h   |   24 ++++++++++++++++++++++++
 src/lsmsvgstyle.c   |    2 +-
 src/lsmsvgstyle.h   |    7 ++++++-
 src/lsmsvgtraits.c  |   24 ++++++++++++++++++++++++
 src/lsmsvgtraits.h  |    1 +
 7 files changed, 94 insertions(+), 3 deletions(-)
---
diff --git a/src/lsmsvgelement.c b/src/lsmsvgelement.c
index 343ba0f..c010327 100644
--- a/src/lsmsvgelement.c
+++ b/src/lsmsvgelement.c
@@ -151,7 +151,8 @@ lsm_svg_element_render (LsmSvgElement *element, LsmSvgView *view)
 	lsm_svg_view_push_style (view, style);
 
 
-	if (style->visibility->value == LSM_SVG_VISIBILITY_VISIBLE) {
+	if (style->visibility->value == LSM_SVG_VISIBILITY_VISIBLE &&
+	    style->display->value != LSM_SVG_DISPLAY_NONE) {
 		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");
diff --git a/src/lsmsvgenums.c b/src/lsmsvgenums.c
index 6c633ba..7a50d19 100644
--- a/src/lsmsvgenums.c
+++ b/src/lsmsvgenums.c
@@ -383,6 +383,42 @@ lsm_svg_text_anchor_from_string (const char *string)
 					   G_N_ELEMENTS (lsm_svg_text_anchor_strings));
 }
 
+static const char *lsm_svg_display_strings[] = {
+	"none",
+	"inline",
+	"block",
+	"list-item",
+	"run-in",
+	"compact",
+	"marker",
+	"table",
+	"inline-table",
+	"table-row-group",
+	"table-header-group",
+	"table-footer-group",
+	"table-row",
+	"table-column-group",
+	"table-column",
+	"table-cell",
+	"table-caption",
+};
+
+const char *
+lsm_svg_display_to_string (LsmSvgDisplay display)
+{
+	if (display < 0 || display > LSM_SVG_DISPLAY_TABLE_CAPTION)
+		return NULL;
+
+	return lsm_svg_display_strings[display];
+}
+
+LsmSvgDisplay
+lsm_svg_display_from_string (const char *string)
+{
+	return lsm_enum_value_from_string (string, lsm_svg_display_strings,
+					   G_N_ELEMENTS (lsm_svg_display_strings));
+}
+
 static const char *lsm_svg_visibility_strings[] = {
 	"visible",
 	"hidden",
diff --git a/src/lsmsvgenums.h b/src/lsmsvgenums.h
index 6460ae9..4f92719 100644
--- a/src/lsmsvgenums.h
+++ b/src/lsmsvgenums.h
@@ -251,6 +251,30 @@ typedef enum {
 } LsmSvgFilterInput;
 
 typedef enum {
+	LSM_SVG_DISPLAY_ERROR = -1,
+	LSM_SVG_DISPLAY_NONE,
+	LSM_SVG_DISPLAY_INLINE,
+	LSM_SVG_DISPLAY_BLOCK,
+	LSM_SVG_DISPLAY_LIST_ITEM,
+	LSM_SVG_DISPLAY_RUN_IN,
+	LSM_SVG_DISPLAY_COMPACT,
+	LSM_SVG_DISPLAY_MARKER,
+	LSM_SVG_DISPLAY_TABLE,
+	LSM_SVG_DISPLAY_INLINE_TABLE,
+	LSM_SVG_DISPLAY_TABLE_ROW_GROUP,
+	LSM_SVG_DISPLAY_TABLE_HEADER_GROUP,
+	LSM_SVG_DISPLAY_TABLE_FOOTER_GROUP,
+	LSM_SVG_DISPLAY_TABLE_ROW,
+	LSM_SVG_DISPLAY_TABLE_COLUMN_GROUP,
+	LSM_SVG_DISPLAY_TABLE_COLUMN,
+	LSM_SVG_DISPLAY_TABLE_CELL,
+	LSM_SVG_DISPLAY_TABLE_CAPTION
+} LsmSvgDisplay;
+
+const char * 		lsm_svg_display_to_string 		(LsmSvgDisplay display);
+LsmSvgDisplay		lsm_svg_display_from_string		(const char *string);
+
+typedef enum {
 	LSM_SVG_VISIBILITY_ERROR = -1,
 	LSM_SVG_VISIBILITY_VISIBLE,
 	LSM_SVG_VISIBILITY_HIDDEN,
diff --git a/src/lsmsvgstyle.c b/src/lsmsvgstyle.c
index 07cae9d..7360c61 100644
--- a/src/lsmsvgstyle.c
+++ b/src/lsmsvgstyle.c
@@ -182,7 +182,7 @@ static const LsmPropertyInfos lsm_svg_property_infos[] = {
 	{
 		.name = "display",
 		.id = LSM_PROPERTY_OFFSET_TO_ID (LsmSvgStyle, display),
-		.trait_class = &lsm_null_trait_class,
+		.trait_class = &lsm_svg_display_trait_class,
 		.trait_default = "inline"
 	},
 	{
diff --git a/src/lsmsvgstyle.h b/src/lsmsvgstyle.h
index 4ea69b2..944edaf 100644
--- a/src/lsmsvgstyle.h
+++ b/src/lsmsvgstyle.h
@@ -95,6 +95,11 @@ typedef struct {
 
 typedef struct {
 	LsmProperty base;
+	LsmSvgDisplay value;
+} LsmSvgDisplayProperty;
+
+typedef struct {
+	LsmProperty base;
 	LsmSvgVisibility value;
 } LsmSvgVisibilityProperty;
 
@@ -129,7 +134,7 @@ struct _LsmSvgStyle {
 	LsmProperty *			color_rendering;
 	LsmProperty *			cursor;
 	LsmProperty *			direction;
-	LsmProperty *			display;
+	LsmSvgDisplayProperty *		display;
 	LsmSvgPaintProperty *		fill;
 	LsmSvgDoubleProperty *		fill_opacity;
 	LsmSvgFillRuleProperty *	fill_rule;
diff --git a/src/lsmsvgtraits.c b/src/lsmsvgtraits.c
index 244d697..3ec6a85 100644
--- a/src/lsmsvgtraits.c
+++ b/src/lsmsvgtraits.c
@@ -663,6 +663,30 @@ const LsmTraitClass lsm_svg_dash_array_trait_class = {
 };
 
 static gboolean
+lsm_svg_display_trait_from_string (LsmTrait *abstract_trait, char *string)
+{
+	LsmSvgDisplay *trait = (LsmSvgDisplay *) abstract_trait;
+
+	*trait = lsm_svg_display_from_string (string);
+
+	return *trait >= 0;
+}
+
+char *
+lsm_svg_display_trait_to_string (LsmTrait *abstract_trait)
+{
+	LsmSvgDisplay *trait = (LsmSvgDisplay *) abstract_trait;
+
+	return g_strdup (lsm_svg_display_to_string (*trait));
+}
+
+const LsmTraitClass lsm_svg_display_trait_class = {
+	.size = sizeof (LsmSvgDisplay),
+	.from_string = lsm_svg_display_trait_from_string,
+	.to_string = lsm_svg_display_trait_to_string
+};
+
+static gboolean
 lsm_svg_color_trait_from_string (LsmTrait *abstract_trait, char *string)
 {
 	LsmSvgColor *color = (LsmSvgColor *) abstract_trait;
diff --git a/src/lsmsvgtraits.h b/src/lsmsvgtraits.h
index 4369c8c..3e89038 100644
--- a/src/lsmsvgtraits.h
+++ b/src/lsmsvgtraits.h
@@ -74,6 +74,7 @@ typedef struct {
 extern const LsmTraitClass lsm_svg_angle_trait_class;
 extern const LsmTraitClass lsm_svg_color_trait_class;
 extern const LsmTraitClass lsm_svg_dash_array_trait_class;
+extern const LsmTraitClass lsm_svg_display_trait_class;
 extern const LsmTraitClass lsm_svg_fill_rule_trait_class;
 extern const LsmTraitClass lsm_svg_font_stretch_trait_class;
 extern const LsmTraitClass lsm_svg_font_style_trait_class;



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