[lasem] [SVG] Add boilerplate code for image element.



commit d4bc6aedfd608dfd7fff56d4aeee4cf8e37923a3
Author: Emmanuel Pacaud <emmanuel pacaud lapp in2p3 fr>
Date:   Sun May 17 19:50:53 2009 +0200

    [SVG] Add boilerplate code for image element.
---
 src/Makefile.am          |    2 +
 src/lsmsvg.h             |    1 +
 src/lsmsvgdocument.c     |    3 +
 src/lsmsvgimageelement.c |  138 ++++++++++++++++++++++++++++++++++++++++++++++
 src/lsmsvgimageelement.h |   60 ++++++++++++++++++++
 5 files changed, 204 insertions(+), 0 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index 2129357..9a460bb 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -65,6 +65,7 @@ liblasem_la_SOURCES =				\
 	lsmsvggraphic.c				\
 	lsmsvgsvgelement.c			\
 	lsmsvguseelement.c			\
+	lsmsvgimageelement.c			\
 	lsmsvgsymbolelement.c			\
 	lsmsvggelement.c			\
 	lsmsvgdefselement.c			\
@@ -147,6 +148,7 @@ liblasem_la_HEADERS = \
 	lsmsvggelement.h			\
 	lsmsvgdefselement.h			\
 	lsmsvguseelement.h			\
+	lsmsvgimageelement.h			\
 	lsmsvgsymbolelement.h			\
 	lsmsvgrectelement.h			\
 	lsmsvgcircleelement.h			\
diff --git a/src/lsmsvg.h b/src/lsmsvg.h
index 2702c8b..853b823 100644
--- a/src/lsmsvg.h
+++ b/src/lsmsvg.h
@@ -33,6 +33,7 @@ typedef struct _LsmSvgSvgElement LsmSvgSvgElement;
 typedef struct _LsmSvgGElement LsmSvgGElement;
 typedef struct _LsmSvgDefsElement LsmSvgDefsElement;
 typedef struct _LsmSvgUseElement LsmSvgUseElement;
+typedef struct _LsmSvgImageElement LsmSvgImageElement;
 typedef struct _LsmSvgSymbolElement LsmSvgSymbolElement;
 typedef struct _LsmSvgRectElement LsmSvgRectElement;
 typedef struct _LsmSvgCircleElement LsmSvgCircleElement;
diff --git a/src/lsmsvgdocument.c b/src/lsmsvgdocument.c
index 5d0b4f1..3ef121e 100644
--- a/src/lsmsvgdocument.c
+++ b/src/lsmsvgdocument.c
@@ -25,6 +25,7 @@
 #include <lsmsvggelement.h>
 #include <lsmsvgdefselement.h>
 #include <lsmsvguseelement.h>
+#include <lsmsvgimageelement.h>
 #include <lsmsvgsymbolelement.h>
 #include <lsmsvgrectelement.h>
 #include <lsmsvgcircleelement.h>
@@ -86,6 +87,8 @@ lsm_svg_document_create_element (LsmDomDocument *document, const char *tag_name)
 		node = lsm_svg_pattern_element_new ();
 	else if (strcmp (tag_name, "use") == 0)
 		node = lsm_svg_use_element_new ();
+	else if (strcmp (tag_name, "image") == 0)
+		node = lsm_svg_image_element_new ();
 	else if (strcmp (tag_name, "defs") == 0)
 		node = lsm_svg_defs_element_new ();
 	else if (strcmp (tag_name, "symbol") == 0)
diff --git a/src/lsmsvgimageelement.c b/src/lsmsvgimageelement.c
new file mode 100644
index 0000000..650f490
--- /dev/null
+++ b/src/lsmsvgimageelement.c
@@ -0,0 +1,138 @@
+/*
+ * Copyright © 2009 Emmanuel Pacaud
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ *
+ * Author:
+ * 	Emmanuel Pacaud <emmanuel gnome org>
+ */
+
+#include <lsmsvgimageelement.h>
+#include <lsmsvgview.h>
+#include <lsmdebug.h>
+#include <lsmdomdocument.h>
+#include <stdio.h>
+
+static GObjectClass *parent_class;
+
+/* GdomNode implementation */
+
+static const char *
+lsm_svg_image_element_get_node_name (LsmDomNode *node)
+{
+	return "image";
+}
+
+static gboolean
+lsm_svg_use_can_append_child (LsmDomNode *node, LsmDomNode *child)
+{
+	return FALSE;
+}
+
+/* LsmSvgElement implementation */
+
+static void
+lsm_svg_image_element_update (LsmSvgElement *self, LsmSvgStyle *parent_style)
+{
+	LsmSvgImageElement *image_element = LSM_SVG_IMAGE_ELEMENT (self);
+	LsmSvgLength length;
+
+	length.value_unit = 0.0;
+	length.type = LSM_SVG_LENGTH_TYPE_PX;
+	lsm_svg_animated_length_attribute_parse (&image_element->x, &length);
+
+	length.value_unit = 0.0;
+	length.type = LSM_SVG_LENGTH_TYPE_PX;
+	lsm_svg_animated_length_attribute_parse (&image_element->y, &length);
+
+	length.value_unit = 0.0;
+	length.type = LSM_SVG_LENGTH_TYPE_PX;
+	lsm_svg_animated_length_attribute_parse (&image_element->width, &length);
+
+	length.value_unit = 0.0;
+	length.type = LSM_SVG_LENGTH_TYPE_PX;
+	lsm_svg_animated_length_attribute_parse (&image_element->height, &length);
+
+	LSM_SVG_ELEMENT_CLASS (parent_class)->update (self, parent_style);
+}
+
+/* LsmSvgGraphic implementation */
+
+static void
+lsm_svg_image_element_graphic_render (LsmSvgElement *self, LsmSvgView *view)
+{
+	LsmSvgImageElement *image_element;
+	LsmDomDocument *document;
+	const char *id;
+
+	document = lsm_dom_node_get_owner_document (LSM_DOM_NODE (self));
+	if (document == NULL) {
+		lsm_debug ("[LsmSvgImageElement::graphic_render] Owner document not found");
+		return;
+	}
+
+	image_element = LSM_SVG_IMAGE_ELEMENT (self);
+
+	id = image_element->href.value;
+	if (id == NULL)
+		return;
+}
+
+/* LsmSvgImageElement implementation */
+
+LsmDomNode *
+lsm_svg_image_element_new (void)
+{
+	return g_object_new (LSM_TYPE_SVG_IMAGE_ELEMENT, NULL);
+}
+
+static void
+lsm_svg_image_element_init (LsmSvgImageElement *self)
+{
+}
+
+/* LsmSvgImageElement class */
+
+static void
+lsm_svg_image_element_class_init (LsmSvgImageElementClass *klass)
+{
+	LsmDomNodeClass *d_node_class = LSM_DOM_NODE_CLASS (klass);
+	LsmSvgElementClass *s_element_class = LSM_SVG_ELEMENT_CLASS (klass);
+	LsmSvgGraphicClass *s_graphic_class = LSM_SVG_GRAPHIC_CLASS (klass);
+
+	parent_class = g_type_class_peek_parent (klass);
+
+	d_node_class->get_node_name = lsm_svg_image_element_get_node_name;
+	d_node_class->can_append_child = lsm_svg_use_can_append_child;
+
+	s_element_class->update = lsm_svg_image_element_update;
+
+	s_graphic_class->graphic_render = lsm_svg_image_element_graphic_render;
+
+	s_element_class->attributes = lsm_dom_attribute_map_duplicate (s_element_class->attributes);
+
+	lsm_dom_attribute_map_add_attribute (s_element_class->attributes, "x",
+					  offsetof (LsmSvgImageElement, x));
+	lsm_dom_attribute_map_add_attribute (s_element_class->attributes, "y",
+					  offsetof (LsmSvgImageElement, y));
+	lsm_dom_attribute_map_add_attribute (s_element_class->attributes, "width",
+					  offsetof (LsmSvgImageElement, width));
+	lsm_dom_attribute_map_add_attribute (s_element_class->attributes, "height",
+					  offsetof (LsmSvgImageElement, height));
+	lsm_dom_attribute_map_add_attribute (s_element_class->attributes, "xlink:href",
+					  offsetof (LsmSvgImageElement, href));
+}
+
+G_DEFINE_TYPE (LsmSvgImageElement, lsm_svg_image_element, LSM_TYPE_SVG_GRAPHIC)
diff --git a/src/lsmsvgimageelement.h b/src/lsmsvgimageelement.h
new file mode 100644
index 0000000..0bb8ac8
--- /dev/null
+++ b/src/lsmsvgimageelement.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright © 2009 Emmanuel Pacaud
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ *
+ * Author:
+ * 	Emmanuel Pacaud <emmanuel gnome org>
+ */
+
+#ifndef LSM_SVG_IMAGE_ELEMENT_H
+#define LSM_SVG_IMAGE_ELEMENT_H
+
+#include <lsmsvg.h>
+#include <lsmsvggraphic.h>
+
+G_BEGIN_DECLS
+
+#define LSM_TYPE_SVG_IMAGE_ELEMENT             (lsm_svg_image_element_get_type ())
+#define LSM_SVG_IMAGE_ELEMENT(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), LSM_TYPE_SVG_IMAGE_ELEMENT, LsmSvgImageElement))
+#define LSM_SVG_IMAGE_ELEMENT_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), LSM_TYPE_SVG_IMAGE_ELEMENT, LsmSvgImageElementClass))
+#define LSM_IS_SVG_IMAGE_ELEMENT(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LSM_TYPE_SVG_IMAGE_ELEMENT))
+#define LSM_IS_SVG_IMAGE_ELEMENT_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), LSM_TYPE_SVG_IMAGE_ELEMENT))
+#define LSM_SVG_IMAGE_ELEMENT_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj), LSM_TYPE_SVG_IMAGE_ELEMENT, LsmSvgImageElementClass))
+
+typedef struct _LsmSvgImageElementClass LsmSvgImageElementClass;
+
+struct _LsmSvgImageElement {
+	LsmSvgGraphic graphic;
+
+	LsmSvgAnimatedLengthAttribute	x;
+	LsmSvgAnimatedLengthAttribute	y;
+	LsmSvgAnimatedLengthAttribute	width;
+	LsmSvgAnimatedLengthAttribute	height;
+
+	LsmDomAttribute		href;
+};
+
+struct _LsmSvgImageElementClass {
+	LsmSvgGraphicClass  parent_class;
+};
+
+GType lsm_svg_image_element_get_type (void);
+
+LsmDomNode *		lsm_svg_image_element_new 		(void);
+
+G_END_DECLS
+
+#endif



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