summaryrefslogtreecommitdiffstats
path: root/src/sp-use.cpp
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2013-04-02 18:45:20 +0000
committerMarkus Engel <markus.engel@tum.de>2013-04-02 18:45:20 +0000
commit0a7e23844c3a43203de3f5207aecb278e84ee739 (patch)
tree73368a7dd8367c23599f0027d63c1c0a06638865 /src/sp-use.cpp
parentRegistered classes with new factory. Hkern, Vkern and FeFuncX have to be rewr... (diff)
downloadinkscape-0a7e23844c3a43203de3f5207aecb278e84ee739.tar.gz
inkscape-0a7e23844c3a43203de3f5207aecb278e84ee739.zip
Added virtual destructor to SPObject. Switched to new factory. Replaced some casts. Inkscape seems stable, car.svgz renders correctly to png.
(bzr r11608.1.70)
Diffstat (limited to 'src/sp-use.cpp')
-rw-r--r--src/sp-use.cpp34
1 files changed, 28 insertions, 6 deletions
diff --git a/src/sp-use.cpp b/src/sp-use.cpp
index 5b1a1e880..65c8602df 100644
--- a/src/sp-use.cpp
+++ b/src/sp-use.cpp
@@ -36,6 +36,8 @@
#include "sp-use.h"
#include "sp-use-reference.h"
+#include "sp-factory.h"
+
/* fixme: */
static void sp_use_finalize(GObject *obj);
@@ -489,11 +491,29 @@ sp_use_href_changed(SPObject */*old_ref*/, SPObject */*ref*/, SPUse *use)
SPItem *refobj = use->ref->getObject();
if (refobj) {
Inkscape::XML::Node *childrepr = refobj->getRepr();
- GType type = sp_repr_type_lookup(childrepr);
- g_return_if_fail(type > G_TYPE_NONE);
- if (g_type_is_a(type, SP_TYPE_ITEM)) {
- use->child = (SPObject*) g_object_new(type, 0);
- use->attach(use->child, use->lastChild());
+
+// GType type = sp_repr_type_lookup(childrepr);
+// g_return_if_fail(type > G_TYPE_NONE);
+// if (g_type_is_a(type, SP_TYPE_ITEM)) {
+// use->child = (SPObject*) g_object_new(type, 0);
+// use->attach(use->child, use->lastChild());
+// sp_object_unref(use->child, use);
+// (use->child)->invoke_build(use->document, childrepr, TRUE);
+//
+// for (SPItemView *v = item->display; v != NULL; v = v->next) {
+// Inkscape::DrawingItem *ai;
+// ai = SP_ITEM(use->child)->invoke_show(v->arenaitem->drawing(), v->key, v->flags);
+// if (ai) {
+// v->arenaitem->prependChild(ai);
+// }
+// }
+// }
+
+ SPObject* obj = SPFactory::instance().createObject(*childrepr);
+ if (SP_IS_ITEM(obj)) {
+ use->child = obj;
+
+ use->attach(use->child, use->lastChild());
sp_object_unref(use->child, use);
(use->child)->invoke_build(use->document, childrepr, TRUE);
@@ -504,8 +524,10 @@ sp_use_href_changed(SPObject */*old_ref*/, SPObject */*ref*/, SPUse *use)
v->arenaitem->prependChild(ai);
}
}
-
+ } else {
+ delete obj;
}
+
use->_delete_connection = refobj->connectDelete(sigc::bind(sigc::ptr_fun(&sp_use_delete_self), use));
use->_transformed_connection = SP_ITEM(refobj)->connectTransformed(sigc::bind(sigc::ptr_fun(&sp_use_move_compensate), use));
}