diff --git a/src/sp-script.cpp b/src/sp-script.cpp
index 2b855e4554d803989747da7da56ab2fdd1147516..61418701307492253635f24fb63be43d1daba580 100644 (file)
--- a/src/sp-script.cpp
+++ b/src/sp-script.cpp
* SVG <script> implementation
*
* Authors:
- * Felipe CorrĂȘa da Silva Sanches <felipe.sanches@gmail.com>
+ * Felipe CorrĂȘa da Silva Sanches <juca@members.fsf.org>
*
* Copyright (C) 2008 authors
*
*/
#include "sp-script.h"
+#include "attributes.h"
+#include <cstring>
+#include "document.h"
static void sp_script_class_init(SPScriptClass *sc);
static void sp_script_init(SPScript *script);
static void sp_script_release(SPObject *object);
static void sp_script_update(SPObject *object, SPCtx *ctx, guint flags);
static void sp_script_modified(SPObject *object, guint flags);
+static void sp_script_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_script_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
static Inkscape::XML::Node *sp_script_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
static SPObjectClass *parent_class;
parent_class = (SPObjectClass *) g_type_class_ref(SP_TYPE_OBJECT);
SPObjectClass *sp_object_class = (SPObjectClass *) sc;
+ sp_object_class->build = sp_script_build;
sp_object_class->release = sp_script_release;
sp_object_class->update = sp_script_update;
sp_object_class->modified = sp_script_modified;
sp_object_class->write = sp_script_write;
+ sp_object_class->set = sp_script_set;
}
static void sp_script_init(SPScript */*script*/)
}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPScript variables. For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register". Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_script_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+ if (((SPObjectClass *) parent_class)->build) {
+ ((SPObjectClass *) parent_class)->build(object, document, repr);
+ }
+
+ //Read values of key attributes from XML nodes into object.
+ sp_object_read_attr(object, "xlink:href");
+
+ document->add_resource("script", object);
+}
+
static void sp_script_release(SPObject *object)
{
- if (((SPObjectClass *) (parent_class))->release) {
- ((SPObjectClass *) (parent_class))->release(object);
+ if (SP_OBJECT_DOCUMENT(object)) {
+ /* Unregister ourselves */
+ SP_OBJECT_DOCUMENT(object)->remove_resource("script", SP_OBJECT(object));
}
+
+ if (((SPObjectClass *) parent_class)->release)
+ ((SPObjectClass *) parent_class)->release(object);
}
static void sp_script_update(SPObject */*object*/, SPCtx */*ctx*/, guint /*flags*/)
{
}
+static void
+sp_script_set(SPObject *object, unsigned int key, gchar const *value)
+{
+ SPScript *scr = SP_SCRIPT(object);
+
+ switch (key) {
+ case SP_ATTR_XLINK_HREF:
+ if (scr->xlinkhref) g_free(scr->xlinkhref);
+ scr->xlinkhref = g_strdup(value);
+ object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+ break;
+ default:
+ if (((SPObjectClass *) parent_class)->set)
+ ((SPObjectClass *) parent_class)->set(object, key, value);
+ break;
+ }
+}
+
static Inkscape::XML::Node *sp_script_write(SPObject */*object*/, Inkscape::XML::Document */*xml_doc*/, Inkscape::XML::Node *repr, guint /*flags*/)
{
/*