From 578d85febc1afde9024c335ae9d88358b82e40a1 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sun, 19 Aug 2012 02:54:53 +0200 Subject: Added "virtual pad" to SPRoot. (bzr r11608.1.20) --- src/sp-root.cpp | 188 ++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 128 insertions(+), 60 deletions(-) (limited to 'src/sp-root.cpp') diff --git a/src/sp-root.cpp b/src/sp-root.cpp index 393c70895..2b1ab3884 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -96,11 +96,24 @@ static void sp_root_class_init(SPRootClass *klass) sp_item_class->print = sp_root_print; } +CRoot::CRoot(SPRoot* root) : CGroup(root) { + this->sproot = root; +} + +CRoot::~CRoot() { +} + /** * Initializes an SPRoot object by setting its default parameter values. */ static void sp_root_init(SPRoot *root) { + root->croot = new CRoot(root); + root->cgroup = root->croot; + root->clpeitem = root->croot; + root->citem = root->croot; + root->cobject = root->croot; + static Inkscape::Version const zero_version(0, 0); sp_version_from_string(SVG_VERSION, &root->original.svg); @@ -121,13 +134,9 @@ static void sp_root_init(SPRoot *root) root->defs = NULL; } -/** - * Fills in the data for an SPObject from its Inkscape::XML::Node object. - * It fills in data such as version, x, y, width, height, etc. - * It then calls the object's parent class object's build function. - */ -static void sp_root_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) -{ +void CRoot::onBuild(SPDocument *document, Inkscape::XML::Node *repr) { + SPRoot* object = this->sproot; + SPGroup *group = (SPGroup *) object; SPRoot *root = (SPRoot *) object; @@ -147,8 +156,7 @@ static void sp_root_build(SPObject *object, SPDocument *document, Inkscape::XML: object->readAttr( "preserveAspectRatio" ); object->readAttr( "onload" ); - if (((SPObjectClass *) parent_class)->build) - (* ((SPObjectClass *) parent_class)->build) (object, document, repr); + CGroup::onBuild(document, repr); // Search for first node for (SPObject *o = group->firstChild() ; o ; o = o->getNext() ) { @@ -162,25 +170,39 @@ static void sp_root_build(SPObject *object, SPDocument *document, Inkscape::XML: SP_ITEM(object)->transform = Geom::identity(); } +// CPPIFY: remove /** - * This is a destructor routine for SPRoot objects. It de-references any \ items and calls - * the parent class destructor. + * Fills in the data for an SPObject from its Inkscape::XML::Node object. + * It fills in data such as version, x, y, width, height, etc. + * It then calls the object's parent class object's build function. */ -static void sp_root_release(SPObject *object) +static void sp_root_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { + ((SPRoot*)object)->croot->onBuild(document, repr); +} + +void CRoot::onRelease() { + SPRoot* object = this->sproot; + SPRoot *root = (SPRoot *) object; root->defs = NULL; - if (((SPObjectClass *) parent_class)->release) - ((SPObjectClass *) parent_class)->release(object); + CGroup::onRelease(); } +// CPPIFY: remove /** - * Sets the attribute given by key for SPRoot objects to the value specified by value. + * This is a destructor routine for SPRoot objects. It de-references any \ items and calls + * the parent class destructor. */ -static void sp_root_set(SPObject *object, unsigned int key, gchar const *value) +static void sp_root_release(SPObject *object) { - SPRoot *root = SP_ROOT(object); + ((SPRoot*)object)->croot->onRelease(); +} + +void CRoot::onSet(unsigned int key, const gchar* value) { + SPRoot* object = this->sproot; + SPRoot *root = object; switch (key) { case SP_ATTR_VERSION: @@ -315,25 +337,27 @@ static void sp_root_set(SPObject *object, unsigned int key, gchar const *value) break; default: /* Pass the set event to the parent */ - if (((SPObjectClass *) parent_class)->set) { - ((SPObjectClass *) parent_class)->set(object, key, value); - } + CGroup::onSet(key, value); break; } } +// CPPIFY: remove /** - * This routine is for adding a child SVG object to an SPRoot object. - * The SPRoot object is taken to be an SPGroup. + * Sets the attribute given by key for SPRoot objects to the value specified by value. */ -static void sp_root_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref) +static void sp_root_set(SPObject *object, unsigned int key, gchar const *value) { + ((SPRoot*)object)->croot->onSet(key, value); +} + +void CRoot::onChildAdded(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { + SPRoot* object = this->sproot; + SPRoot *root = (SPRoot *) object; SPGroup *group = (SPGroup *) object; - if (((SPObjectClass *) (parent_class))->child_added) { - (* ((SPObjectClass *) (parent_class))->child_added)(object, child, ref); - } + CGroup::onChildAdded(child, ref); SPObject *co = object->document->getObjectByRepr(child); g_assert (co != NULL || !strcmp("comment", child->name())); // comment repr node has no object @@ -349,11 +373,19 @@ static void sp_root_child_added(SPObject *object, Inkscape::XML::Node *child, In } } +// CPPIFY: remove /** - * Removes the given child from this SPRoot object. + * This routine is for adding a child SVG object to an SPRoot object. + * The SPRoot object is taken to be an SPGroup. */ -static void sp_root_remove_child(SPObject *object, Inkscape::XML::Node *child) +static void sp_root_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { + ((SPRoot*)object)->croot->onChildAdded(child, ref); +} + +void CRoot::onRemoveChild(Inkscape::XML::Node* child) { + SPRoot* object = this->sproot; + SPRoot *root = (SPRoot *) object; if ( root->defs && (root->defs->getRepr() == child) ) { @@ -371,16 +403,21 @@ static void sp_root_remove_child(SPObject *object, Inkscape::XML::Node *child) } } - if (((SPObjectClass *) (parent_class))->remove_child) { - (* ((SPObjectClass *) (parent_class))->remove_child)(object, child); - } + CGroup::onRemoveChild(child); } +// CPPIFY: remove /** - * This callback routine updates the SPRoot object when its attributes have been changed. + * Removes the given child from this SPRoot object. */ -static void sp_root_update(SPObject *object, SPCtx *ctx, guint flags) +static void sp_root_remove_child(SPObject *object, Inkscape::XML::Node *child) { + ((SPRoot*)object)->croot->onRemoveChild(child); +} + +void CRoot::onUpdate(SPCtx *ctx, guint flags) { + SPRoot* object = this->sproot; + SPRoot *root = SP_ROOT(object); SPItemCtx *ictx = (SPItemCtx *) ctx; @@ -508,8 +545,7 @@ static void sp_root_update(SPObject *object, SPCtx *ctx, guint flags) rctx.i2vp = Geom::identity(); /* And invoke parent method */ - if (((SPObjectClass *) (parent_class))->update) - ((SPObjectClass *) (parent_class))->update(object, (SPCtx *) &rctx, flags); + CGroup::onUpdate((SPCtx *) &rctx, flags); /* As last step set additional transform of drawing group */ for (SPItemView *v = root->display; v != NULL; v = v->next) { @@ -518,17 +554,21 @@ static void sp_root_update(SPObject *object, SPCtx *ctx, guint flags) } } +// CPPIFY: remove /** - * Calls the modified routine of the SPRoot object's parent class. - * Also, if the viewport has been modified, it sets the document size to the new - * height and width. + * This callback routine updates the SPRoot object when its attributes have been changed. */ -static void sp_root_modified(SPObject *object, guint flags) +static void sp_root_update(SPObject *object, SPCtx *ctx, guint flags) { + ((SPRoot*)object)->croot->onUpdate(ctx, flags); +} + +void CRoot::onModified(unsigned int flags) { + SPRoot* object = this->sproot; + SPRoot *root = SP_ROOT(object); - if (((SPObjectClass *) (parent_class))->modified) - (* ((SPObjectClass *) (parent_class))->modified)(object, flags); + CGroup::onModified(flags); /* fixme: (Lauris) */ if (!object->parent && (flags & SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) { @@ -536,12 +576,20 @@ static void sp_root_modified(SPObject *object, guint flags) } } +// CPPIFY: remove /** - * Writes the object into the repr object, then calls the parent's write routine. + * Calls the modified routine of the SPRoot object's parent class. + * Also, if the viewport has been modified, it sets the document size to the new + * height and width. */ -static Inkscape::XML::Node * -sp_root_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) +static void sp_root_modified(SPObject *object, guint flags) { + ((SPRoot*)object)->croot->onModified(flags); +} + +Inkscape::XML::Node* CRoot::onWrite(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { + SPRoot* object = this->sproot; + SPRoot *root = SP_ROOT(object); if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { @@ -576,39 +624,51 @@ sp_root_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML: repr->setAttribute("viewBox", os.str().c_str()); } - if (((SPObjectClass *) (parent_class))->write) - ((SPObjectClass *) (parent_class))->write(object, xml_doc, repr, flags); + CGroup::onWrite(xml_doc, repr, flags); return repr; } +// CPPIFY: remove /** - * Displays the SPRoot item on the drawing. + * Writes the object into the repr object, then calls the parent's write routine. */ -static Inkscape::DrawingItem * -sp_root_show(SPItem *item, Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) +static Inkscape::XML::Node * +sp_root_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { + return ((SPRoot*)object)->croot->onWrite(xml_doc, repr, flags); +} + +Inkscape::DrawingItem* CRoot::onShow(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { + SPRoot* item = this->sproot; + SPRoot *root = SP_ROOT(item); - Inkscape::DrawingItem *ai; - if (((SPItemClass *) (parent_class))->show) { - ai = ((SPItemClass *) (parent_class))->show(item, drawing, key, flags); - if (ai) { - Inkscape::DrawingGroup *g = dynamic_cast(ai); - g->setChildTransform(root->c2p); - } - } else { - ai = NULL; + Inkscape::DrawingItem *ai = 0; + + ai = CGroup::onShow(drawing, key, flags); + + if (ai) { + Inkscape::DrawingGroup *g = dynamic_cast(ai); + g->setChildTransform(root->c2p); } return ai; } +// CPPIFY: remove /** - * Virtual print callback. + * Displays the SPRoot item on the drawing. */ -static void sp_root_print(SPItem *item, SPPrintContext *ctx) +static Inkscape::DrawingItem * +sp_root_show(SPItem *item, Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { + return ((SPRoot*)item)->croot->onShow(drawing, key, flags); +} + +void CRoot::onPrint(SPPrintContext* ctx) { + SPRoot* item = this->sproot; + SPRoot *root = SP_ROOT(item); sp_print_bind(ctx, root->c2p, 1.0); @@ -620,6 +680,14 @@ static void sp_root_print(SPItem *item, SPPrintContext *ctx) sp_print_release(ctx); } +// CPPIFY: remove +/** + * Virtual print callback. + */ +static void sp_root_print(SPItem *item, SPPrintContext *ctx) +{ + ((SPRoot*)item)->croot->onPrint(ctx); +} /* Local Variables: -- cgit v1.2.3 From 99cb30e28d4ee193f39e23464abbd7630cac8a2d Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 6 Oct 2012 23:56:27 +0200 Subject: Added virtual pad to SPFlowtext; removed old calls to virtual SPItem methods. (bzr r11608.1.46) --- src/sp-root.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src/sp-root.cpp') diff --git a/src/sp-root.cpp b/src/sp-root.cpp index 2b1ab3884..96b9f4ef9 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -92,8 +92,8 @@ static void sp_root_class_init(SPRootClass *klass) sp_object_class->modified = sp_root_modified; sp_object_class->write = sp_root_write; - sp_item_class->show = sp_root_show; - sp_item_class->print = sp_root_print; +// sp_item_class->show = sp_root_show; +// sp_item_class->print = sp_root_print; } CRoot::CRoot(SPRoot* root) : CGroup(root) { @@ -673,9 +673,11 @@ void CRoot::onPrint(SPPrintContext* ctx) { sp_print_bind(ctx, root->c2p, 1.0); - if (((SPItemClass *) (parent_class))->print) { - ((SPItemClass *) (parent_class))->print(item, ctx); - } +// if (((SPItemClass *) (parent_class))->print) { +// ((SPItemClass *) (parent_class))->print(item, ctx); +// } + // CPPIFY: correct one? + CGroup::onPrint(ctx); sp_print_release(ctx); } -- cgit v1.2.3 From a0a8d020201e0e38a63d9aa3dce228d7d9e6fb35 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Thu, 14 Mar 2013 12:42:39 +0100 Subject: Various changes. (bzr r11608.1.48) --- src/sp-root.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-root.cpp') diff --git a/src/sp-root.cpp b/src/sp-root.cpp index 96b9f4ef9..2d6cf0fc4 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -83,7 +83,7 @@ static void sp_root_class_init(SPRootClass *klass) parent_class = reinterpret_cast(g_type_class_ref(SP_TYPE_GROUP)); - sp_object_class->build = sp_root_build; + //sp_object_class->build = sp_root_build; sp_object_class->release = sp_root_release; sp_object_class->set = sp_root_set; sp_object_class->child_added = sp_root_child_added; -- cgit v1.2.3 From 957c3e4b7909d42c5a13f1b1dd583f877fc32259 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 30 Mar 2013 00:46:57 +0100 Subject: Removed function pointers from SPObject and subclasses. Added some missing virtual pads for classes that were hidden by preprocessor macros. (bzr r11608.1.55) --- src/sp-root.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src/sp-root.cpp') diff --git a/src/sp-root.cpp b/src/sp-root.cpp index 2d6cf0fc4..d19629a24 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -84,13 +84,13 @@ static void sp_root_class_init(SPRootClass *klass) parent_class = reinterpret_cast(g_type_class_ref(SP_TYPE_GROUP)); //sp_object_class->build = sp_root_build; - sp_object_class->release = sp_root_release; - sp_object_class->set = sp_root_set; - sp_object_class->child_added = sp_root_child_added; - sp_object_class->remove_child = sp_root_remove_child; - sp_object_class->update = sp_root_update; - sp_object_class->modified = sp_root_modified; - sp_object_class->write = sp_root_write; +// sp_object_class->release = sp_root_release; +// sp_object_class->set = sp_root_set; +// sp_object_class->child_added = sp_root_child_added; +// sp_object_class->remove_child = sp_root_remove_child; +// sp_object_class->update = sp_root_update; +// sp_object_class->modified = sp_root_modified; +// sp_object_class->write = sp_root_write; // sp_item_class->show = sp_root_show; // sp_item_class->print = sp_root_print; -- cgit v1.2.3 From 7df6616da5ea2debb86838366ddf746841549cdb Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 30 Mar 2013 00:56:13 +0100 Subject: Renamed virtual function names. (bzr r11608.1.57) --- src/sp-root.cpp | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'src/sp-root.cpp') diff --git a/src/sp-root.cpp b/src/sp-root.cpp index 9a38cd05d..715d4659e 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -81,7 +81,7 @@ static void sp_root_init(SPRoot *root) root->defs = NULL; } -void CRoot::onBuild(SPDocument *document, Inkscape::XML::Node *repr) { +void CRoot::build(SPDocument *document, Inkscape::XML::Node *repr) { SPRoot* object = this->sproot; SPGroup *group = (SPGroup *) object; @@ -103,7 +103,7 @@ void CRoot::onBuild(SPDocument *document, Inkscape::XML::Node *repr) { object->readAttr( "preserveAspectRatio" ); object->readAttr( "onload" ); - CGroup::onBuild(document, repr); + CGroup::build(document, repr); // Search for first node for (SPObject *o = group->firstChild() ; o ; o = o->getNext() ) { @@ -117,17 +117,17 @@ void CRoot::onBuild(SPDocument *document, Inkscape::XML::Node *repr) { SP_ITEM(object)->transform = Geom::identity(); } -void CRoot::onRelease() { +void CRoot::release() { SPRoot* object = this->sproot; SPRoot *root = (SPRoot *) object; root->defs = NULL; - CGroup::onRelease(); + CGroup::release(); } -void CRoot::onSet(unsigned int key, const gchar* value) { +void CRoot::set(unsigned int key, const gchar* value) { SPRoot* object = this->sproot; SPRoot *root = object; @@ -264,18 +264,18 @@ void CRoot::onSet(unsigned int key, const gchar* value) { break; default: /* Pass the set event to the parent */ - CGroup::onSet(key, value); + CGroup::set(key, value); break; } } -void CRoot::onChildAdded(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { +void CRoot::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { SPRoot* object = this->sproot; SPRoot *root = (SPRoot *) object; SPGroup *group = (SPGroup *) object; - CGroup::onChildAdded(child, ref); + CGroup::child_added(child, ref); SPObject *co = object->document->getObjectByRepr(child); g_assert (co != NULL || !strcmp("comment", child->name())); // comment repr node has no object @@ -291,7 +291,7 @@ void CRoot::onChildAdded(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { } } -void CRoot::onRemoveChild(Inkscape::XML::Node* child) { +void CRoot::remove_child(Inkscape::XML::Node* child) { SPRoot* object = this->sproot; SPRoot *root = (SPRoot *) object; @@ -311,10 +311,10 @@ void CRoot::onRemoveChild(Inkscape::XML::Node* child) { } } - CGroup::onRemoveChild(child); + CGroup::remove_child(child); } -void CRoot::onUpdate(SPCtx *ctx, guint flags) { +void CRoot::update(SPCtx *ctx, guint flags) { SPRoot* object = this->sproot; SPRoot *root = SP_ROOT(object); @@ -444,7 +444,7 @@ void CRoot::onUpdate(SPCtx *ctx, guint flags) { rctx.i2vp = Geom::identity(); /* And invoke parent method */ - CGroup::onUpdate((SPCtx *) &rctx, flags); + CGroup::update((SPCtx *) &rctx, flags); /* As last step set additional transform of drawing group */ for (SPItemView *v = root->display; v != NULL; v = v->next) { @@ -453,12 +453,12 @@ void CRoot::onUpdate(SPCtx *ctx, guint flags) { } } -void CRoot::onModified(unsigned int flags) { +void CRoot::modified(unsigned int flags) { SPRoot* object = this->sproot; SPRoot *root = SP_ROOT(object); - CGroup::onModified(flags); + CGroup::modified(flags); /* fixme: (Lauris) */ if (!object->parent && (flags & SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) { @@ -467,7 +467,7 @@ void CRoot::onModified(unsigned int flags) { } -Inkscape::XML::Node* CRoot::onWrite(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { +Inkscape::XML::Node* CRoot::write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { SPRoot* object = this->sproot; SPRoot *root = SP_ROOT(object); @@ -504,19 +504,19 @@ Inkscape::XML::Node* CRoot::onWrite(Inkscape::XML::Document *xml_doc, Inkscape:: repr->setAttribute("viewBox", os.str().c_str()); } - CGroup::onWrite(xml_doc, repr, flags); + CGroup::write(xml_doc, repr, flags); return repr; } -Inkscape::DrawingItem* CRoot::onShow(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { +Inkscape::DrawingItem* CRoot::show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { SPRoot* item = this->sproot; SPRoot *root = SP_ROOT(item); Inkscape::DrawingItem *ai = 0; - ai = CGroup::onShow(drawing, key, flags); + ai = CGroup::show(drawing, key, flags); if (ai) { Inkscape::DrawingGroup *g = dynamic_cast(ai); @@ -526,14 +526,14 @@ Inkscape::DrawingItem* CRoot::onShow(Inkscape::Drawing &drawing, unsigned int ke return ai; } -void CRoot::onPrint(SPPrintContext* ctx) { +void CRoot::print(SPPrintContext* ctx) { SPRoot* item = this->sproot; SPRoot *root = SP_ROOT(item); sp_print_bind(ctx, root->c2p, 1.0); - CGroup::onPrint(ctx); + CGroup::print(ctx); sp_print_release(ctx); } -- cgit v1.2.3 From a5d6e692d661f0bf7648e64e8fcb04588bb8f3ab Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Mon, 1 Apr 2013 00:07:00 +0200 Subject: Prepared exchange of casting macros. (bzr r11608.1.63) --- src/sp-root.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/sp-root.cpp') diff --git a/src/sp-root.cpp b/src/sp-root.cpp index 715d4659e..1767c4cd2 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -54,6 +54,7 @@ CRoot::~CRoot() { static void sp_root_init(SPRoot *root) { root->croot = new CRoot(root); + root->typeHierarchy.insert(typeid(SPRoot)); delete root->cgroup; root->cgroup = root->croot; -- cgit v1.2.3 From 69f3b6f1abb2bb422935d43262e1e99aab359954 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Tue, 2 Apr 2013 01:41:30 +0200 Subject: Added constructors to SP classes. (bzr r11608.1.67) --- src/sp-root.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'src/sp-root.cpp') diff --git a/src/sp-root.cpp b/src/sp-root.cpp index 1767c4cd2..ac2ffdbf7 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -31,7 +31,7 @@ #include "svg/svg.h" #include "xml/repr.h" -G_DEFINE_TYPE(SPRoot, sp_root, SP_TYPE_GROUP); +G_DEFINE_TYPE(SPRoot, sp_root, G_TYPE_OBJECT); /** * Initializes an SPRootClass object by setting its class and parent class objects, and registering @@ -48,11 +48,9 @@ CRoot::CRoot(SPRoot* root) : CGroup(root) { CRoot::~CRoot() { } -/** - * Initializes an SPRoot object by setting its default parameter values. - */ -static void sp_root_init(SPRoot *root) -{ +SPRoot::SPRoot() : SPGroup() { + SPRoot* root = this; + root->croot = new CRoot(root); root->typeHierarchy.insert(typeid(SPRoot)); @@ -62,6 +60,11 @@ static void sp_root_init(SPRoot *root) root->citem = root->croot; root->cobject = root->croot; + root->aspect_set = 0; + root->aspect_align = 0; + root->onload = NULL; + root->aspect_clip = 0; + static Inkscape::Version const zero_version(0, 0); sp_version_from_string(SVG_VERSION, &root->original.svg); @@ -82,6 +85,14 @@ static void sp_root_init(SPRoot *root) root->defs = NULL; } +/** + * Initializes an SPRoot object by setting its default parameter values. + */ +static void sp_root_init(SPRoot *root) +{ + new (root) SPRoot(); +} + void CRoot::build(SPDocument *document, Inkscape::XML::Node *repr) { SPRoot* object = this->sproot; -- cgit v1.2.3 From d1af3566872dfff2aeec84859c87f1f8d13f79df Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Tue, 2 Apr 2013 19:14:36 +0200 Subject: Registered classes with new factory. Hkern, Vkern and FeFuncX have to be rewritten, as they aren't real classes. (bzr r11608.1.69) --- src/sp-root.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/sp-root.cpp') diff --git a/src/sp-root.cpp b/src/sp-root.cpp index ac2ffdbf7..8dcae05be 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -31,6 +31,16 @@ #include "svg/svg.h" #include "xml/repr.h" +#include "sp-factory.h" + +namespace { + SPObject* createRoot() { + return new SPRoot(); + } + + bool rootRegistered = SPFactory::instance().registerObject("svg:svg", createRoot); +} + G_DEFINE_TYPE(SPRoot, sp_root, G_TYPE_OBJECT); /** -- cgit v1.2.3 From dbda80349e95767e390a178cda7c05787fbce1fe Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Fri, 5 Apr 2013 17:51:29 +0200 Subject: Merged Group and subclasses. (bzr r11608.1.77) --- src/sp-root.cpp | 459 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 233 insertions(+), 226 deletions(-) (limited to 'src/sp-root.cpp') diff --git a/src/sp-root.cpp b/src/sp-root.cpp index 8dcae05be..77ae15f85 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -41,206 +41,214 @@ namespace { bool rootRegistered = SPFactory::instance().registerObject("svg:svg", createRoot); } -G_DEFINE_TYPE(SPRoot, sp_root, G_TYPE_OBJECT); - -/** - * Initializes an SPRootClass object by setting its class and parent class objects, and registering - * function pointers (i.e.\ gobject-style virtual functions) for various operations. - */ -static void sp_root_class_init(SPRootClass *klass) -{ -} - -CRoot::CRoot(SPRoot* root) : CGroup(root) { - this->sproot = root; -} - -CRoot::~CRoot() { -} - SPRoot::SPRoot() : SPGroup() { - SPRoot* root = this; - - root->croot = new CRoot(root); - root->typeHierarchy.insert(typeid(SPRoot)); + this->clpeitem = this; + this->citem = this; + this->cobject = this; - delete root->cgroup; - root->cgroup = root->croot; - root->clpeitem = root->croot; - root->citem = root->croot; - root->cobject = root->croot; - - root->aspect_set = 0; - root->aspect_align = 0; - root->onload = NULL; - root->aspect_clip = 0; + this->aspect_set = 0; + this->aspect_align = 0; + this->onload = NULL; + this->aspect_clip = 0; static Inkscape::Version const zero_version(0, 0); - sp_version_from_string(SVG_VERSION, &root->original.svg); - root->version.svg = zero_version; - root->original.svg = zero_version; - root->version.inkscape = zero_version; - root->original.inkscape = zero_version; + sp_version_from_string(SVG_VERSION, &this->original.svg); + this->version.svg = zero_version; + this->original.svg = zero_version; + this->version.inkscape = zero_version; + this->original.inkscape = zero_version; - root->x.unset(); - root->y.unset(); - root->width.unset(SVGLength::PERCENT, 1.0, 1.0); - root->height.unset(SVGLength::PERCENT, 1.0, 1.0); + this->x.unset(); + this->y.unset(); + this->width.unset(SVGLength::PERCENT, 1.0, 1.0); + this->height.unset(SVGLength::PERCENT, 1.0, 1.0); - root->viewBox_set = FALSE; + this->viewBox_set = FALSE; - root->c2p.setIdentity(); + this->c2p.setIdentity(); - root->defs = NULL; + this->defs = NULL; } -/** - * Initializes an SPRoot object by setting its default parameter values. - */ -static void sp_root_init(SPRoot *root) -{ - new (root) SPRoot(); +SPRoot::~SPRoot() { } -void CRoot::build(SPDocument *document, Inkscape::XML::Node *repr) { - SPRoot* object = this->sproot; - - SPGroup *group = (SPGroup *) object; - SPRoot *root = (SPRoot *) object; - +void SPRoot::build(SPDocument *document, Inkscape::XML::Node *repr) { //XML Tree being used directly here while it shouldn't be. - if ( !object->getRepr()->attribute("version") ) { + if ( !this->getRepr()->attribute("version") ) { repr->setAttribute("version", SVG_VERSION); } - object->readAttr( "version" ); - object->readAttr( "inkscape:version" ); + this->readAttr( "version" ); + this->readAttr( "inkscape:version" ); /* It is important to parse these here, so objects will have viewport build-time */ - object->readAttr( "x" ); - object->readAttr( "y" ); - object->readAttr( "width" ); - object->readAttr( "height" ); - object->readAttr( "viewBox" ); - object->readAttr( "preserveAspectRatio" ); - object->readAttr( "onload" ); + this->readAttr( "x" ); + this->readAttr( "y" ); + this->readAttr( "width" ); + this->readAttr( "height" ); + this->readAttr( "viewBox" ); + this->readAttr( "preserveAspectRatio" ); + this->readAttr( "onload" ); - CGroup::build(document, repr); + SPGroup::build(document, repr); // Search for first node - for (SPObject *o = group->firstChild() ; o ; o = o->getNext() ) { + for (SPObject *o = this->firstChild() ; o ; o = o->getNext() ) { if (SP_IS_DEFS(o)) { - root->defs = SP_DEFS(o); + this->defs = SP_DEFS(o); break; } } // clear transform, if any was read in - SVG does not allow transform= on - SP_ITEM(object)->transform = Geom::identity(); + SP_ITEM(this)->transform = Geom::identity(); } -void CRoot::release() { - SPRoot* object = this->sproot; - - SPRoot *root = (SPRoot *) object; - root->defs = NULL; +void SPRoot::release() { + this->defs = NULL; - CGroup::release(); + SPGroup::release(); } -void CRoot::set(unsigned int key, const gchar* value) { - SPRoot* object = this->sproot; - SPRoot *root = object; - +void SPRoot::set(unsigned int key, const gchar* value) { switch (key) { case SP_ATTR_VERSION: - if (!sp_version_from_string(value, &root->version.svg)) { - root->version.svg = root->original.svg; + if (!sp_version_from_string(value, &this->version.svg)) { + this->version.svg = this->original.svg; } break; + case SP_ATTR_INKSCAPE_VERSION: - if (!sp_version_from_string(value, &root->version.inkscape)) { - root->version.inkscape = root->original.inkscape; + if (!sp_version_from_string(value, &this->version.inkscape)) { + this->version.inkscape = this->original.inkscape; } break; + case SP_ATTR_X: - if (!root->x.readAbsolute(value)) { + if (!this->x.readAbsolute(value)) { /* fixme: em, ex, % are probably valid, but require special treatment (Lauris) */ - root->x.unset(); + this->x.unset(); } + /* fixme: I am almost sure these do not require viewport flag (Lauris) */ - object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG); + this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG); break; + case SP_ATTR_Y: - if (!root->y.readAbsolute(value)) { + if (!this->y.readAbsolute(value)) { /* fixme: em, ex, % are probably valid, but require special treatment (Lauris) */ - root->y.unset(); + this->y.unset(); } + /* fixme: I am almost sure these do not require viewport flag (Lauris) */ - object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG); + this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG); break; + case SP_ATTR_WIDTH: - if (!root->width.readAbsolute(value) || !(root->width.computed > 0.0)) { + if (!this->width.readAbsolute(value) || !(this->width.computed > 0.0)) { /* fixme: em, ex, % are probably valid, but require special treatment (Lauris) */ - root->width.unset(SVGLength::PERCENT, 1.0, 1.0); + this->width.unset(SVGLength::PERCENT, 1.0, 1.0); } - object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG); + + this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG); break; + case SP_ATTR_HEIGHT: - if (!root->height.readAbsolute(value) || !(root->height.computed > 0.0)) { + if (!this->height.readAbsolute(value) || !(this->height.computed > 0.0)) { /* fixme: em, ex, % are probably valid, but require special treatment (Lauris) */ - root->height.unset(SVGLength::PERCENT, 1.0, 1.0); + this->height.unset(SVGLength::PERCENT, 1.0, 1.0); } - object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG); + + this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG); break; + case SP_ATTR_VIEWBOX: if (value) { double x, y, width, height; char *eptr; + /* fixme: We have to take original item affine into account */ /* fixme: Think (Lauris) */ eptr = (gchar *) value; x = g_ascii_strtod(eptr, &eptr); - while (*eptr && ((*eptr == ',') || (*eptr == ' '))) eptr++; + + while (*eptr && ((*eptr == ',') || (*eptr == ' '))) { + eptr++; + } + y = g_ascii_strtod(eptr, &eptr); - while (*eptr && ((*eptr == ',') || (*eptr == ' '))) eptr++; + + while (*eptr && ((*eptr == ',') || (*eptr == ' '))) { + eptr++; + } + width = g_ascii_strtod(eptr, &eptr); - while (*eptr && ((*eptr == ',') || (*eptr == ' '))) eptr++; + + while (*eptr && ((*eptr == ',') || (*eptr == ' '))) { + eptr++; + } + height = g_ascii_strtod(eptr, &eptr); - while (*eptr && ((*eptr == ',') || (*eptr == ' '))) eptr++; + + while (*eptr && ((*eptr == ',') || (*eptr == ' '))) { + eptr++; + } + if ((width > 0) && (height > 0)) { /* Set viewbox */ - root->viewBox = Geom::Rect::from_xywh(x, y, width, height); - root->viewBox_set = TRUE; + this->viewBox = Geom::Rect::from_xywh(x, y, width, height); + this->viewBox_set = TRUE; } else { - root->viewBox_set = FALSE; + this->viewBox_set = FALSE; } } else { - root->viewBox_set = FALSE; + this->viewBox_set = FALSE; } - object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG); + + this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG); break; + case SP_ATTR_PRESERVEASPECTRATIO: /* Do setup before, so we can use break to escape */ - root->aspect_set = FALSE; - root->aspect_align = SP_ASPECT_XMID_YMID; - root->aspect_clip = SP_ASPECT_MEET; - object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG); + this->aspect_set = FALSE; + this->aspect_align = SP_ASPECT_XMID_YMID; + this->aspect_clip = SP_ASPECT_MEET; + + this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG); + if (value) { int len; gchar c[256]; gchar const *p, *e; unsigned int align, clip; p = value; - while (*p && *p == 32) p += 1; - if (!*p) break; + + while (*p && *p == 32) { + p += 1; + } + + if (!*p) { + break; + } + e = p; - while (*e && *e != 32) e += 1; + + while (*e && *e != 32) { + e += 1; + } + len = e - p; - if (len > 8) break; + + if (len > 8) { + break; + } + memcpy(c, value, len); + c[len] = 0; + /* Now the actual part */ if (!strcmp(c, "none")) { align = SP_ASPECT_NONE; @@ -265,8 +273,13 @@ void CRoot::set(unsigned int key, const gchar* value) { } else { break; } + clip = SP_ASPECT_MEET; - while (*e && *e == 32) e += 1; + + while (*e && *e == 32) { + e += 1; + } + if (*e) { if (!strcmp(e, "meet")) { clip = SP_ASPECT_MEET; @@ -276,95 +289,91 @@ void CRoot::set(unsigned int key, const gchar* value) { break; } } - root->aspect_set = TRUE; - root->aspect_align = align; - root->aspect_clip = clip; + + this->aspect_set = TRUE; + this->aspect_align = align; + this->aspect_clip = clip; } break; + case SP_ATTR_ONLOAD: - root->onload = (char *) value; + this->onload = (char *) value; break; + default: /* Pass the set event to the parent */ - CGroup::set(key, value); + SPGroup::set(key, value); break; } } -void CRoot::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { - SPRoot* object = this->sproot; - - SPRoot *root = (SPRoot *) object; - SPGroup *group = (SPGroup *) object; +void SPRoot::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { + SPGroup::child_added(child, ref); - CGroup::child_added(child, ref); - - SPObject *co = object->document->getObjectByRepr(child); + SPObject *co = this->document->getObjectByRepr(child); g_assert (co != NULL || !strcmp("comment", child->name())); // comment repr node has no object if (co && SP_IS_DEFS(co)) { // We search for first node - it is not beautiful, but works - for (SPObject *c = group->firstChild() ; c ; c = c->getNext() ) { + for (SPObject *c = this->firstChild() ; c ; c = c->getNext() ) { if (SP_IS_DEFS(c)) { - root->defs = SP_DEFS(c); + this->defs = SP_DEFS(c); break; } } } } -void CRoot::remove_child(Inkscape::XML::Node* child) { - SPRoot* object = this->sproot; - - SPRoot *root = (SPRoot *) object; - - if ( root->defs && (root->defs->getRepr() == child) ) { +void SPRoot::remove_child(Inkscape::XML::Node* child) { + if ( this->defs && (this->defs->getRepr() == child) ) { SPObject *iter = 0; + // We search for first remaining node - it is not beautiful, but works - for ( iter = object->firstChild() ; iter ; iter = iter->getNext() ) { - if ( SP_IS_DEFS(iter) && (SPDefs *)iter != root->defs ) { - root->defs = (SPDefs *)iter; + for ( iter = this->firstChild() ; iter ; iter = iter->getNext() ) { + if ( SP_IS_DEFS(iter) && (SPDefs *)iter != this->defs ) { + this->defs = (SPDefs *)iter; break; } } + if (!iter) { /* we should probably create a new here? */ - root->defs = NULL; + this->defs = NULL; } } - CGroup::remove_child(child); + SPGroup::remove_child(child); } -void CRoot::update(SPCtx *ctx, guint flags) { - SPRoot* object = this->sproot; - - SPRoot *root = SP_ROOT(object); +void SPRoot::update(SPCtx *ctx, guint flags) { SPItemCtx *ictx = (SPItemCtx *) ctx; /* fixme: This will be invoked too often (Lauris) */ /* fixme: We should calculate only if parent viewport has changed (Lauris) */ /* If position is specified as percentage, calculate actual values */ - if (root->x.unit == SVGLength::PERCENT) { - root->x.computed = root->x.value * ictx->viewport.width(); + if (this->x.unit == SVGLength::PERCENT) { + this->x.computed = this->x.value * ictx->viewport.width(); } - if (root->y.unit == SVGLength::PERCENT) { - root->y.computed = root->y.value * ictx->viewport.height(); + + if (this->y.unit == SVGLength::PERCENT) { + this->y.computed = this->y.value * ictx->viewport.height(); } - if (root->width.unit == SVGLength::PERCENT) { - root->width.computed = root->width.value * ictx->viewport.width(); + + if (this->width.unit == SVGLength::PERCENT) { + this->width.computed = this->width.value * ictx->viewport.width(); } - if (root->height.unit == SVGLength::PERCENT) { - root->height.computed = root->height.value * ictx->viewport.height(); + + if (this->height.unit == SVGLength::PERCENT) { + this->height.computed = this->height.value * ictx->viewport.height(); } /* Create copy of item context */ SPItemCtx rctx = *ictx; /* Calculate child to parent transformation */ - root->c2p.setIdentity(); + this->c2p.setIdentity(); - if (object->parent) { + if (this->parent) { /* * fixme: I am not sure whether setting x and y does or does not * fixme: translate the content of inner SVG. @@ -372,66 +381,75 @@ void CRoot::update(SPCtx *ctx, guint flags) { * fixme: height seems natural, as this makes the inner svg element * fixme: self-contained. The spec is vague here. */ - root->c2p = Geom::Affine(Geom::Translate(root->x.computed, - root->y.computed)); + this->c2p = Geom::Affine(Geom::Translate(this->x.computed, this->y.computed)); } - if (root->viewBox_set) { + if (this->viewBox_set) { double x, y, width, height; /* Determine actual viewbox in viewport coordinates */ - if (root->aspect_align == SP_ASPECT_NONE) { + if (this->aspect_align == SP_ASPECT_NONE) { x = 0.0; y = 0.0; - width = root->width.computed; - height = root->height.computed; + width = this->width.computed; + height = this->height.computed; } else { double scalex, scaley, scale; /* Things are getting interesting */ - scalex = root->width.computed / root->viewBox.width(); - scaley = root->height.computed / root->viewBox.height(); - scale = (root->aspect_clip == SP_ASPECT_MEET) ? MIN(scalex, scaley) : MAX(scalex, scaley); - width = root->viewBox.width() * scale; - height = root->viewBox.height() * scale; + scalex = this->width.computed / this->viewBox.width(); + scaley = this->height.computed / this->viewBox.height(); + scale = (this->aspect_clip == SP_ASPECT_MEET) ? MIN(scalex, scaley) : MAX(scalex, scaley); + width = this->viewBox.width() * scale; + height = this->viewBox.height() * scale; + /* Now place viewbox to requested position */ /* todo: Use an array lookup to find the 0.0/0.5/1.0 coefficients, as is done for dialogs/align.cpp. */ - switch (root->aspect_align) { + switch (this->aspect_align) { case SP_ASPECT_XMIN_YMIN: x = 0.0; y = 0.0; break; + case SP_ASPECT_XMID_YMIN: - x = 0.5 * (root->width.computed - width); + x = 0.5 * (this->width.computed - width); y = 0.0; break; + case SP_ASPECT_XMAX_YMIN: - x = 1.0 * (root->width.computed - width); + x = 1.0 * (this->width.computed - width); y = 0.0; break; + case SP_ASPECT_XMIN_YMID: x = 0.0; - y = 0.5 * (root->height.computed - height); + y = 0.5 * (this->height.computed - height); break; + case SP_ASPECT_XMID_YMID: - x = 0.5 * (root->width.computed - width); - y = 0.5 * (root->height.computed - height); + x = 0.5 * (this->width.computed - width); + y = 0.5 * (this->height.computed - height); break; + case SP_ASPECT_XMAX_YMID: - x = 1.0 * (root->width.computed - width); - y = 0.5 * (root->height.computed - height); + x = 1.0 * (this->width.computed - width); + y = 0.5 * (this->height.computed - height); break; + case SP_ASPECT_XMIN_YMAX: x = 0.0; - y = 1.0 * (root->height.computed - height); + y = 1.0 * (this->height.computed - height); break; + case SP_ASPECT_XMID_YMAX: - x = 0.5 * (root->width.computed - width); - y = 1.0 * (root->height.computed - height); + x = 0.5 * (this->width.computed - width); + y = 1.0 * (this->height.computed - height); break; + case SP_ASPECT_XMAX_YMAX: - x = 1.0 * (root->width.computed - width); - y = 1.0 * (root->height.computed - height); + x = 1.0 * (this->width.computed - width); + y = 1.0 * (this->height.computed - height); break; + default: x = 0.0; y = 0.0; @@ -440,60 +458,53 @@ void CRoot::update(SPCtx *ctx, guint flags) { } /* Compose additional transformation from scale and position */ - Geom::Scale const viewBox_length( root->viewBox.dimensions() ); + Geom::Scale const viewBox_length( this->viewBox.dimensions() ); Geom::Scale const new_length(width, height); /* Append viewbox transformation */ /* TODO: The below looks suspicious to me (pjrm): I wonder whether the RHS expression should have c2p at the beginning rather than at the end. Test it. */ - root->c2p = Geom::Translate(-root->viewBox.min()) * ( new_length * viewBox_length.inverse() ) * Geom::Translate(x, y) * root->c2p; + this->c2p = Geom::Translate(-this->viewBox.min()) * ( new_length * viewBox_length.inverse() ) * Geom::Translate(x, y) * this->c2p; } - rctx.i2doc = root->c2p * rctx.i2doc; + rctx.i2doc = this->c2p * rctx.i2doc; /* Initialize child viewport */ - if (root->viewBox_set) { - rctx.viewport = root->viewBox; + if (this->viewBox_set) { + rctx.viewport = this->viewBox; } else { /* fixme: I wonder whether this logic is correct (Lauris) */ Geom::Point minp(0,0); - if (object->parent) { - minp = Geom::Point(root->x.computed, root->y.computed); + if (this->parent) { + minp = Geom::Point(this->x.computed, this->y.computed); } - rctx.viewport = Geom::Rect::from_xywh(minp[Geom::X], minp[Geom::Y], root->width.computed, root->height.computed); + + rctx.viewport = Geom::Rect::from_xywh(minp[Geom::X], minp[Geom::Y], this->width.computed, this->height.computed); } rctx.i2vp = Geom::identity(); /* And invoke parent method */ - CGroup::update((SPCtx *) &rctx, flags); + SPGroup::update((SPCtx *) &rctx, flags); /* As last step set additional transform of drawing group */ - for (SPItemView *v = root->display; v != NULL; v = v->next) { + for (SPItemView *v = this->display; v != NULL; v = v->next) { Inkscape::DrawingGroup *g = dynamic_cast(v->arenaitem); - g->setChildTransform(root->c2p); + g->setChildTransform(this->c2p); } } -void CRoot::modified(unsigned int flags) { - SPRoot* object = this->sproot; - - SPRoot *root = SP_ROOT(object); - - CGroup::modified(flags); +void SPRoot::modified(unsigned int flags) { + SPGroup::modified(flags); /* fixme: (Lauris) */ - if (!object->parent && (flags & SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) { - root->document->emitResizedSignal(root->width.computed, root->height.computed); + if (!this->parent && (flags & SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) { + this->document->emitResizedSignal(this->width.computed, this->height.computed); } } -Inkscape::XML::Node* CRoot::write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { - SPRoot* object = this->sproot; - - SPRoot *root = SP_ROOT(object); - +Inkscape::XML::Node* SPRoot::write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { repr = xml_doc->createElement("svg:svg"); } @@ -503,59 +514,55 @@ Inkscape::XML::Node* CRoot::write(Inkscape::XML::Document *xml_doc, Inkscape::XM } if ( !repr->attribute("version") ) { - gchar* myversion = sp_version_to_string(root->version.svg); + gchar* myversion = sp_version_to_string(this->version.svg); repr->setAttribute("version", myversion); g_free(myversion); } - if (fabs(root->x.computed) > 1e-9) - sp_repr_set_svg_double(repr, "x", root->x.computed); - if (fabs(root->y.computed) > 1e-9) - sp_repr_set_svg_double(repr, "y", root->y.computed); + if (fabs(this->x.computed) > 1e-9) { + sp_repr_set_svg_double(repr, "x", this->x.computed); + } + + if (fabs(this->y.computed) > 1e-9) { + sp_repr_set_svg_double(repr, "y", this->y.computed); + } /* Unlike all other SPObject, here we want to preserve absolute units too (and only here, * according to the recommendation in http://www.w3.org/TR/SVG11/coords.html#Units). */ - repr->setAttribute("width", sp_svg_length_write_with_units(root->width).c_str()); - repr->setAttribute("height", sp_svg_length_write_with_units(root->height).c_str()); + repr->setAttribute("width", sp_svg_length_write_with_units(this->width).c_str()); + repr->setAttribute("height", sp_svg_length_write_with_units(this->height).c_str()); - if (root->viewBox_set) { + if (this->viewBox_set) { Inkscape::SVGOStringStream os; - os << root->viewBox.left() << " " << root->viewBox.top() << " " - << root->viewBox.width() << " " << root->viewBox.height(); + os << this->viewBox.left() << " " << this->viewBox.top() << " " + << this->viewBox.width() << " " << this->viewBox.height(); + repr->setAttribute("viewBox", os.str().c_str()); } - CGroup::write(xml_doc, repr, flags); + SPGroup::write(xml_doc, repr, flags); return repr; } -Inkscape::DrawingItem* CRoot::show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { - SPRoot* item = this->sproot; - - SPRoot *root = SP_ROOT(item); - +Inkscape::DrawingItem* SPRoot::show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { Inkscape::DrawingItem *ai = 0; - ai = CGroup::show(drawing, key, flags); + ai = SPGroup::show(drawing, key, flags); if (ai) { Inkscape::DrawingGroup *g = dynamic_cast(ai); - g->setChildTransform(root->c2p); + g->setChildTransform(this->c2p); } return ai; } -void CRoot::print(SPPrintContext* ctx) { - SPRoot* item = this->sproot; - - SPRoot *root = SP_ROOT(item); - - sp_print_bind(ctx, root->c2p, 1.0); +void SPRoot::print(SPPrintContext* ctx) { + sp_print_bind(ctx, this->c2p, 1.0); - CGroup::print(ctx); + SPGroup::print(ctx); sp_print_release(ctx); } -- cgit v1.2.3 From 19d00efa85cfc42ccae9bd17ef575602f0d22c50 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Fri, 5 Apr 2013 19:42:32 +0200 Subject: Merged more classes. (bzr r11608.1.78) --- src/sp-root.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/sp-root.cpp') diff --git a/src/sp-root.cpp b/src/sp-root.cpp index 77ae15f85..c0e71ed2c 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -42,7 +42,6 @@ namespace { } SPRoot::SPRoot() : SPGroup() { - this->clpeitem = this; this->citem = this; this->cobject = this; -- cgit v1.2.3 From 8073924aacdda310fb7492750f78d5389b3186af Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Fri, 5 Apr 2013 22:45:01 +0200 Subject: Merged Item. (bzr r11608.1.81) --- src/sp-root.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/sp-root.cpp') diff --git a/src/sp-root.cpp b/src/sp-root.cpp index c0e71ed2c..b1484759d 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -42,7 +42,6 @@ namespace { } SPRoot::SPRoot() : SPGroup() { - this->citem = this; this->cobject = this; this->aspect_set = 0; -- cgit v1.2.3 From 27e2102f96a5554bcd5310ec11435d155773b279 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sun, 7 Apr 2013 18:28:22 +0200 Subject: Merge Object and subclasses. Merging of SP- and C-classes complete. (bzr r11608.1.86) --- src/sp-root.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/sp-root.cpp') diff --git a/src/sp-root.cpp b/src/sp-root.cpp index b1484759d..4faefabef 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -42,8 +42,6 @@ namespace { } SPRoot::SPRoot() : SPGroup() { - this->cobject = this; - this->aspect_set = 0; this->aspect_align = 0; this->onload = NULL; -- cgit v1.2.3