[lasem] [SVG] Add boilerplate code for image element.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: svn-commits-list gnome org
- Subject: [lasem] [SVG] Add boilerplate code for image element.
- Date: Sun, 17 May 2009 17:16:08 -0400 (EDT)
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]