diff options
| author | Markus Engel <markus.engel@tum.de> | 2013-04-02 18:45:20 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2013-04-02 18:45:20 +0000 |
| commit | 0a7e23844c3a43203de3f5207aecb278e84ee739 (patch) | |
| tree | 73368a7dd8367c23599f0027d63c1c0a06638865 /src/sp-use.cpp | |
| parent | Registered classes with new factory. Hkern, Vkern and FeFuncX have to be rewr... (diff) | |
| download | inkscape-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.cpp | 34 |
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)); } |
