[lasem] svg_style: display attribute support.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [lasem] svg_style: display attribute support.
- Date: Tue, 24 Aug 2010 10:26:37 +0000 (UTC)
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]