From fa56037ac97f54aededa4f24b609d6ad734b58c1 Mon Sep 17 00:00:00 2001 From: Adonis Papaderos Date: Mon, 6 Aug 2012 13:05:43 +0300 Subject: hack for 898797 (bzr r11595.1.1) --- src/sp-item-group.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index b54ec65e2..f9d74d089 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -853,7 +853,9 @@ sp_group_perform_patheffect(SPGroup *group, SPGroup *topgroup, bool write) } // only run LPEs when the shape has a curve defined if (c) { + c->transform(i2anc_affine(subitem, topgroup)); sp_lpe_item_perform_path_effect(SP_LPE_ITEM(topgroup), c); + c->transform(i2anc_affine(subitem, topgroup).inverse()); SP_SHAPE(subitem)->setCurve(c, TRUE); if (write) { -- cgit v1.2.3 From 72f9ed8e6a94b65a3fbc9582179e6e72330ff144 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sun, 19 Aug 2012 01:40:03 +0200 Subject: Added "virtual pad" to SPGroup and SPSwitch. There was some weird try by someone else. SPGroup should work as expected, SPSwitch may still be buggy. (bzr r11608.1.16) --- src/sp-item-group.cpp | 539 +++++++++++++++++++++++++++----------------------- 1 file changed, 290 insertions(+), 249 deletions(-) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index b54ec65e2..406db4d8f 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -138,90 +138,232 @@ sp_group_class_init (SPGroupClass *klass) lpe_item_class->update_patheffect = sp_group_update_patheffect; } +CGroup::CGroup(SPGroup *group) : CLPEItem(group) { + this->spgroup = group; +} + +CGroup::~CGroup() { +} + static void sp_group_init (SPGroup *group) { + group->cgroup = new CGroup(group); + group->clpeitem = group->cgroup; + group->citem = group->cgroup; + group->cobject = group->cgroup; + group->_layer_mode = SPGroup::GROUP; - group->group = new CGroup(group); - new (&group->_display_modes) std::map(); + new (&group->_display_modes) std::map(); } -static void sp_group_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) -{ +void CGroup::onBuild(SPDocument *document, Inkscape::XML::Node *repr) { + SPGroup* object = this->spgroup; + object->readAttr( "inkscape:groupmode" ); - if (((SPObjectClass *)parent_class)->build) { - ((SPObjectClass *)parent_class)->build(object, document, repr); - } + CLPEItem::onBuild(document, repr); } -static void sp_group_release(SPObject *object) { +// CPPIFY: remove +static void sp_group_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) +{ + ((SPGroup*)object)->cgroup->onBuild(document, repr); +} + +void CGroup::onRelease() { + SPGroup* object = this->spgroup; + if ( SP_GROUP(object)->_layer_mode == SPGroup::LAYER ) { object->document->removeResource("layer", object); } - if (((SPObjectClass *)parent_class)->release) { - ((SPObjectClass *)parent_class)->release(object); - } + + CLPEItem::onRelease(); +} + +// CPPIFY: remove +static void sp_group_release(SPObject *object) { + ((SPGroup*)object)->cgroup->onRelease(); } static void sp_group_dispose(GObject *object) { SP_GROUP(object)->_display_modes.~map(); - delete SP_GROUP(object)->group; } -static void sp_group_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref) -{ - SPGroup *group = SP_GROUP(object); +void CGroup::onChildAdded(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { + CLPEItem::onChildAdded(child, ref); + + SPObject *last_child = spgroup->lastChild(); + + if (last_child && last_child->getRepr() == child) { + // optimization for the common special case where the child is being added at the end + SPObject *ochild = last_child; + if ( SP_IS_ITEM(ochild) ) { + /* TODO: this should be moved into SPItem somehow */ + SPItemView *v; + Inkscape::DrawingItem *ac; + + for (v = spgroup->display; v != NULL; v = v->next) { + ac = SP_ITEM (ochild)->invoke_show (v->arenaitem->drawing(), v->key, v->flags); + + if (ac) { + v->arenaitem->appendChild(ac); + } + } + } + } else { // general case + SPObject *ochild = spgroup->get_child_by_repr(child); + if ( ochild && SP_IS_ITEM(ochild) ) { + /* TODO: this should be moved into SPItem somehow */ + SPItemView *v; + Inkscape::DrawingItem *ac; + + unsigned position = SP_ITEM(ochild)->pos_in_parent(); + + for (v = spgroup->display; v != NULL; v = v->next) { + ac = SP_ITEM (ochild)->invoke_show (v->arenaitem->drawing(), v->key, v->flags); - if (((SPObjectClass *) (parent_class))->child_added) { - (* ((SPObjectClass *) (parent_class))->child_added) (object, child, ref); + if (ac) { + v->arenaitem->prependChild(ac); + ac->setZOrder(position); + } + } + } } - group->group->onChildAdded(child); + spgroup->requestModified(SP_OBJECT_MODIFIED_FLAG); +} + +// CPPIFY: remove +static void sp_group_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref) +{ + ((SPGroup*)object)->cgroup->onChildAdded(child, ref); } /* fixme: hide (Lauris) */ +void CGroup::onRemoveChild(Inkscape::XML::Node *child) { + CLPEItem::onRemoveChild(child); + + spgroup->requestModified(SP_OBJECT_MODIFIED_FLAG); +} + +// CPPIFY: remove static void sp_group_remove_child (SPObject * object, Inkscape::XML::Node * child) { - if (((SPObjectClass *) (parent_class))->remove_child) - (* ((SPObjectClass *) (parent_class))->remove_child) (object, child); + ((SPGroup*)object)->cgroup->onRemoveChild(child); +} + +void CGroup::onOrderChanged (Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref) +{ + CLPEItem::onOrderChanged(child, old_ref, new_ref); - SP_GROUP(object)->group->onChildRemoved(child); + SPObject *ochild = spgroup->get_child_by_repr(child); + if ( ochild && SP_IS_ITEM(ochild) ) { + /* TODO: this should be moved into SPItem somehow */ + SPItemView *v; + unsigned position = SP_ITEM(ochild)->pos_in_parent(); + for ( v = SP_ITEM (ochild)->display ; v != NULL ; v = v->next ) { + v->arenaitem->setZOrder(position); + } + } + + spgroup->requestModified(SP_OBJECT_MODIFIED_FLAG); } +// CPPIFY: remove static void sp_group_order_changed (SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref) { - if (((SPObjectClass *) (parent_class))->order_changed) - (* ((SPObjectClass *) (parent_class))->order_changed) (object, child, old_ref, new_ref); + ((SPGroup*)object)->cgroup->onOrderChanged(child, old_ref, new_ref); +} + +void CGroup::onUpdate(SPCtx *ctx, unsigned int flags) { + CLPEItem::onUpdate(ctx, flags); + + SPItemCtx *ictx, cctx; + + ictx = (SPItemCtx *) ctx; + cctx = *ictx; - SP_GROUP(object)->group->onOrderChanged(child, old_ref, new_ref); + if (flags & SP_OBJECT_MODIFIED_FLAG) { + flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; + } + + flags &= SP_OBJECT_MODIFIED_CASCADE; + + if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) { + SPObject *object = spgroup; + for (SPItemView *v = spgroup->display; v != NULL; v = v->next) { + Inkscape::DrawingGroup *group = dynamic_cast(v->arenaitem); + group->setStyle(object->style); + } + } + + GSList *l = g_slist_reverse(spgroup->childList(true, SPObject::ActionUpdate)); + while (l) { + SPObject *child = SP_OBJECT (l->data); + l = g_slist_remove (l, child); + if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { + if (SP_IS_ITEM (child)) { + SPItem const &chi = *SP_ITEM(child); + cctx.i2doc = chi.transform * ictx->i2doc; + cctx.i2vp = chi.transform * ictx->i2vp; + child->updateDisplay((SPCtx *)&cctx, flags); + } else { + child->updateDisplay(ctx, flags); + } + } + g_object_unref (G_OBJECT (child)); + } } +// CPPIFY: remove static void sp_group_update (SPObject *object, SPCtx *ctx, unsigned int flags) { - if (((SPObjectClass *) (parent_class))->update) - ((SPObjectClass *) (parent_class))->update (object, ctx, flags); + ((SPGroup*)object)->cgroup->onUpdate(ctx, flags); +} + +void CGroup::onModified(guint flags) { + CLPEItem::onModified(flags); + + SPObject *child; + + if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; + flags &= SP_OBJECT_MODIFIED_CASCADE; - SP_GROUP(object)->group->onUpdate(ctx, flags); + if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) { + SPObject *object = spgroup; + for (SPItemView *v = spgroup->display; v != NULL; v = v->next) { + Inkscape::DrawingGroup *group = dynamic_cast(v->arenaitem); + group->setStyle(object->style); + } + } + + GSList *l = g_slist_reverse(spgroup->childList(true)); + while (l) { + child = SP_OBJECT (l->data); + l = g_slist_remove (l, child); + if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { + child->emitModified(flags); + } + g_object_unref (G_OBJECT (child)); + } } +// CPPIFY: remove static void sp_group_modified (SPObject *object, guint flags) { - if (((SPObjectClass *) (parent_class))->modified) - ((SPObjectClass *) (parent_class))->modified (object, flags); - - SP_GROUP(object)->group->onModified(flags); + ((SPGroup*)object)->cgroup->onModified(flags); } -static Inkscape::XML::Node * sp_group_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) -{ +Inkscape::XML::Node* CGroup::onWrite(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { + SPGroup* object = this->spgroup; SPGroup *group = SP_GROUP(object); if (flags & SP_OBJECT_WRITE_BUILD) { @@ -269,32 +411,75 @@ static Inkscape::XML::Node * sp_group_write(SPObject *object, Inkscape::XML::Doc repr->setAttribute("inkscape:groupmode", value); } - if (((SPObjectClass *) (parent_class))->write) { - ((SPObjectClass *) (parent_class))->write (object, xml_doc, repr, flags); - } + CLPEItem::onWrite(xml_doc, repr, flags); return repr; } +// CPPIFY: remove +static Inkscape::XML::Node * sp_group_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) +{ + return ((SPGroup*)object)->cgroup->onWrite(xml_doc, repr, flags); +} + +Geom::OptRect CGroup::onBbox(Geom::Affine const &transform, SPItem::BBoxType bboxtype) +{ + Geom::OptRect bbox; + + GSList *l = spgroup->childList(false, SPObject::ActionBBox); + while (l) { + SPObject *o = SP_OBJECT (l->data); + if (SP_IS_ITEM(o) && !SP_ITEM(o)->isHidden()) { + SPItem *child = SP_ITEM(o); + Geom::Affine const ct(child->transform * transform); + bbox |= child->bounds(bboxtype, ct); + } + l = g_slist_remove (l, o); + } + return bbox; +} + +// CPPIFY: remove static Geom::OptRect sp_group_bbox(SPItem const *item, Geom::Affine const &transform, SPItem::BBoxType type) { - return SP_GROUP(item)->group->bounds(type, transform); + return ((SPGroup*)item)->cgroup->onBbox(transform, type); +} + +void CGroup::onPrint(SPPrintContext *ctx) { + GSList *l = g_slist_reverse(spgroup->childList(false)); + while (l) { + SPObject *o = SP_OBJECT (l->data); + if (SP_IS_ITEM(o)) { + SP_ITEM(o)->invoke_print (ctx); + } + l = g_slist_remove (l, o); + } } +// CPPIFY: remove static void sp_group_print (SPItem * item, SPPrintContext *ctx) { - SP_GROUP(item)->group->onPrint(ctx); + ((SPGroup*)item)->cgroup->onPrint(ctx); } +gchar *CGroup::onDescription() { + gint len = this->spgroup->getItemCount(); + return g_strdup_printf( + ngettext("Group of %d object", + "Group of %d objects", + len), len); +} + +// CPPIFY: remove static gchar * sp_group_description (SPItem * item) { - return SP_GROUP(item)->group->getDescription(); + return ((SPGroup*)item)->cgroup->onDescription(); } -static void sp_group_set(SPObject *object, unsigned key, char const *value) { - SPGroup *group = SP_GROUP(object); +void CGroup::onSet(unsigned int key, gchar const* value) { + SPGroup *group = this->spgroup; switch (key) { case SP_ATTR_INKSCAPE_GROUPMODE: @@ -307,27 +492,65 @@ static void sp_group_set(SPObject *object, unsigned key, char const *value) { } break; default: { - if (((SPObjectClass *) (parent_class))->set) { - (* ((SPObjectClass *) (parent_class))->set)(object, key, value); - } + CLPEItem::onSet(key, value); } } } +// CPPIFY: remove +static void sp_group_set(SPObject *object, unsigned key, char const *value) { + ((SPGroup*)object)->cgroup->onSet(key, value); +} + +Inkscape::DrawingItem *CGroup::onShow (Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { + Inkscape::DrawingGroup *ai; + SPObject *object = spgroup; + + ai = new Inkscape::DrawingGroup(drawing); + ai->setPickChildren(spgroup->effectiveLayerMode(key) == SPGroup::LAYER); + ai->setStyle(object->style); + + this->spgroup->_showChildren(drawing, ai, key, flags); + return ai; +} + +// CPPIFY: remove static Inkscape::DrawingItem * sp_group_show (SPItem *item, Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { - return SP_GROUP(item)->group->show(drawing, key, flags); + return ((SPGroup*)item)->cgroup->onShow(drawing, key, flags); } +void CGroup::onHide (unsigned int key) { + SPItem * child; + + GSList *l = g_slist_reverse(spgroup->childList(false, SPObject::ActionShow)); + while (l) { + SPObject *o = SP_OBJECT (l->data); + if (SP_IS_ITEM (o)) { + child = SP_ITEM (o); + child->invoke_hide (key); + } + l = g_slist_remove (l, o); + } + + // CPPIFY: This doesn't make no sense. + // CItem::onHide is pure and CLPEItem doesn't override it. What was the idea behind these lines? +// if (((SPItemClass *) parent_class)->hide) +// ((SPItemClass *) parent_class)->hide (spgroup, key); +// CLPEItem::onHide(key); +} + +// CPPIFY: remove static void sp_group_hide (SPItem *item, unsigned int key) { - SP_GROUP(item)->group->hide(key); + ((SPGroup*)item)->cgroup->onHide(key); } -static void sp_group_snappoints(SPItem const *item, std::vector &p, Inkscape::SnapPreferences const *snapprefs) -{ +void CGroup::onSnappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) { + SPGroup* item = this->spgroup; + for ( SPObject const *o = item->firstChild(); o; o = o->getNext() ) { if (SP_IS_ITEM(o)) { @@ -336,6 +559,12 @@ static void sp_group_snappoints(SPItem const *item, std::vector &p, Inkscape::SnapPreferences const *snapprefs) +{ + ((SPGroup*)item)->cgroup->onSnappoints(p, snapprefs); +} + void sp_item_group_ungroup (SPGroup *group, GSList **children, bool do_done) @@ -583,152 +812,9 @@ void SPGroup::translateChildItems(Geom::Translate const &tr) } } -CGroup::CGroup(SPGroup *group) { - _group = group; -} - -CGroup::~CGroup() { -} - -void CGroup::onChildAdded(Inkscape::XML::Node *child) { - SPObject *last_child = _group->lastChild(); - if (last_child && last_child->getRepr() == child) { - // optimization for the common special case where the child is being added at the end - SPObject *ochild = last_child; - if ( SP_IS_ITEM(ochild) ) { - /* TODO: this should be moved into SPItem somehow */ - SPItemView *v; - Inkscape::DrawingItem *ac; - - for (v = _group->display; v != NULL; v = v->next) { - ac = SP_ITEM (ochild)->invoke_show (v->arenaitem->drawing(), v->key, v->flags); - - if (ac) { - v->arenaitem->appendChild(ac); - } - } - } - } else { // general case - SPObject *ochild = _group->get_child_by_repr(child); - if ( ochild && SP_IS_ITEM(ochild) ) { - /* TODO: this should be moved into SPItem somehow */ - SPItemView *v; - Inkscape::DrawingItem *ac; - - unsigned position = SP_ITEM(ochild)->pos_in_parent(); - - for (v = _group->display; v != NULL; v = v->next) { - ac = SP_ITEM (ochild)->invoke_show (v->arenaitem->drawing(), v->key, v->flags); - - if (ac) { - v->arenaitem->prependChild(ac); - ac->setZOrder(position); - } - } - } - } - - _group->requestModified(SP_OBJECT_MODIFIED_FLAG); -} - -void CGroup::onChildRemoved(Inkscape::XML::Node */*child*/) { - _group->requestModified(SP_OBJECT_MODIFIED_FLAG); -} - -void CGroup::onUpdate(SPCtx *ctx, unsigned int flags) { - SPItemCtx *ictx, cctx; - - ictx = (SPItemCtx *) ctx; - cctx = *ictx; - - if (flags & SP_OBJECT_MODIFIED_FLAG) { - flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; - } - - flags &= SP_OBJECT_MODIFIED_CASCADE; - - if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) { - SPObject *object = _group; - for (SPItemView *v = _group->display; v != NULL; v = v->next) { - Inkscape::DrawingGroup *group = dynamic_cast(v->arenaitem); - group->setStyle(object->style); - } - } - - GSList *l = g_slist_reverse(_group->childList(true, SPObject::ActionUpdate)); - while (l) { - SPObject *child = SP_OBJECT (l->data); - l = g_slist_remove (l, child); - if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { - if (SP_IS_ITEM (child)) { - SPItem const &chi = *SP_ITEM(child); - cctx.i2doc = chi.transform * ictx->i2doc; - cctx.i2vp = chi.transform * ictx->i2vp; - child->updateDisplay((SPCtx *)&cctx, flags); - } else { - child->updateDisplay(ctx, flags); - } - } - g_object_unref (G_OBJECT (child)); - } -} - -void CGroup::onModified(guint flags) { - SPObject *child; - - if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; - flags &= SP_OBJECT_MODIFIED_CASCADE; - - if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) { - SPObject *object = _group; - for (SPItemView *v = _group->display; v != NULL; v = v->next) { - Inkscape::DrawingGroup *group = dynamic_cast(v->arenaitem); - group->setStyle(object->style); - } - } - - GSList *l = g_slist_reverse(_group->childList(true)); - while (l) { - child = SP_OBJECT (l->data); - l = g_slist_remove (l, child); - if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { - child->emitModified(flags); - } - g_object_unref (G_OBJECT (child)); - } -} - -Geom::OptRect CGroup::bounds(SPItem::BBoxType type, Geom::Affine const &transform) -{ - Geom::OptRect bbox; - - GSList *l = _group->childList(false, SPObject::ActionBBox); - while (l) { - SPObject *o = SP_OBJECT (l->data); - if (SP_IS_ITEM(o) && !SP_ITEM(o)->isHidden()) { - SPItem *child = SP_ITEM(o); - Geom::Affine const ct(child->transform * transform); - bbox |= child->bounds(type, ct); - } - l = g_slist_remove (l, o); - } - return bbox; -} - -void CGroup::onPrint(SPPrintContext *ctx) { - GSList *l = g_slist_reverse(_group->childList(false)); - while (l) { - SPObject *o = SP_OBJECT (l->data); - if (SP_IS_ITEM(o)) { - SP_ITEM(o)->invoke_print (ctx); - } - l = g_slist_remove (l, o); - } -} - -gint CGroup::getItemCount() { +gint SPGroup::getItemCount() { gint len = 0; - for (SPObject *o = _group->firstChild() ; o ; o = o->getNext() ) { + for (SPObject *o = this->firstChild() ; o ; o = o->getNext() ) { if (SP_IS_ITEM(o)) { len++; } @@ -737,30 +823,10 @@ gint CGroup::getItemCount() { return len; } -gchar *CGroup::getDescription() { - gint len = getItemCount(); - return g_strdup_printf( - ngettext("Group of %d object", - "Group of %d objects", - len), len); -} - -Inkscape::DrawingItem *CGroup::show (Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { - Inkscape::DrawingGroup *ai; - SPObject *object = _group; - - ai = new Inkscape::DrawingGroup(drawing); - ai->setPickChildren(_group->effectiveLayerMode(key) == SPGroup::LAYER); - ai->setStyle(object->style); - - _showChildren(drawing, ai, key, flags); - return ai; -} - -void CGroup::_showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem *ai, unsigned int key, unsigned int flags) { +void SPGroup::_showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem *ai, unsigned int key, unsigned int flags) { Inkscape::DrawingItem *ac = NULL; SPItem * child = NULL; - GSList *l = g_slist_reverse(_group->childList(false, SPObject::ActionShow)); + GSList *l = g_slist_reverse(this->childList(false, SPObject::ActionShow)); while (l) { SPObject *o = SP_OBJECT (l->data); if (SP_IS_ITEM (o)) { @@ -772,41 +838,9 @@ void CGroup::_showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem *a } } -void CGroup::hide (unsigned int key) { - SPItem * child; - - GSList *l = g_slist_reverse(_group->childList(false, SPObject::ActionShow)); - while (l) { - SPObject *o = SP_OBJECT (l->data); - if (SP_IS_ITEM (o)) { - child = SP_ITEM (o); - child->invoke_hide (key); - } - l = g_slist_remove (l, o); - } - - if (((SPItemClass *) parent_class)->hide) - ((SPItemClass *) parent_class)->hide (_group, key); -} - -void CGroup::onOrderChanged (Inkscape::XML::Node *child, Inkscape::XML::Node *, Inkscape::XML::Node *) -{ - SPObject *ochild = _group->get_child_by_repr(child); - if ( ochild && SP_IS_ITEM(ochild) ) { - /* TODO: this should be moved into SPItem somehow */ - SPItemView *v; - unsigned position = SP_ITEM(ochild)->pos_in_parent(); - for ( v = SP_ITEM (ochild)->display ; v != NULL ; v = v->next ) { - v->arenaitem->setZOrder(position); - } - } - - _group->requestModified(SP_OBJECT_MODIFIED_FLAG); -} +void CGroup::onUpdatePatheffect(bool write) { + SPGroup* lpeitem = this->spgroup; -static void -sp_group_update_patheffect (SPLPEItem *lpeitem, bool write) -{ #ifdef GROUP_VERBOSE g_message("sp_group_update_patheffect: %p\n", lpeitem); #endif @@ -836,6 +870,13 @@ sp_group_update_patheffect (SPLPEItem *lpeitem, bool write) } } +// CPPIFY: remove +static void +sp_group_update_patheffect (SPLPEItem *lpeitem, bool write) +{ + ((SPGroup*)lpeitem)->cgroup->onUpdatePatheffect(write); +} + static void sp_group_perform_patheffect(SPGroup *group, SPGroup *topgroup, bool write) { -- cgit v1.2.3 From 260c7156ca920232cca2e829782373a805d59cae Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 29 Sep 2012 17:43:15 +0200 Subject: Removed old calls to set_shape and update_patheffect. (bzr r11608.1.45) --- src/sp-item-group.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 406db4d8f..507dab20b 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -135,7 +135,7 @@ sp_group_class_init (SPGroupClass *klass) item_class->hide = sp_group_hide; item_class->snappoints = sp_group_snappoints; - lpe_item_class->update_patheffect = sp_group_update_patheffect; + //lpe_item_class->update_patheffect = sp_group_update_patheffect; } CGroup::CGroup(SPGroup *group) : CLPEItem(group) { @@ -851,9 +851,10 @@ void CGroup::onUpdatePatheffect(bool write) { for ( GSList const *iter = item_list; iter; iter = iter->next ) { SPObject *subitem = static_cast(iter->data); if (SP_IS_LPE_ITEM(subitem)) { - if (SP_LPE_ITEM_CLASS (G_OBJECT_GET_CLASS (subitem))->update_patheffect) { - SP_LPE_ITEM_CLASS (G_OBJECT_GET_CLASS (subitem))->update_patheffect (SP_LPE_ITEM(subitem), write); - } + //if (SP_LPE_ITEM_CLASS (G_OBJECT_GET_CLASS (subitem))->update_patheffect) { + // SP_LPE_ITEM_CLASS (G_OBJECT_GET_CLASS (subitem))->update_patheffect (SP_LPE_ITEM(subitem), write); + //} + ((SPLPEItem*)subitem)->clpeitem->onUpdatePatheffect(write); } } -- 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-item-group.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 507dab20b..e3b48d4cf 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -128,12 +128,12 @@ sp_group_class_init (SPGroupClass *klass) sp_object_class->release = sp_group_release; sp_object_class->build = sp_group_build; - item_class->bbox = sp_group_bbox; - item_class->print = sp_group_print; - item_class->description = sp_group_description; - item_class->show = sp_group_show; - item_class->hide = sp_group_hide; - item_class->snappoints = sp_group_snappoints; +// item_class->bbox = sp_group_bbox; +// item_class->print = sp_group_print; +// item_class->description = sp_group_description; +// item_class->show = sp_group_show; +// item_class->hide = sp_group_hide; +// item_class->snappoints = sp_group_snappoints; //lpe_item_class->update_patheffect = sp_group_update_patheffect; } -- 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-item-group.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index e3b48d4cf..105ec03a7 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -126,7 +126,7 @@ sp_group_class_init (SPGroupClass *klass) sp_object_class->set = sp_group_set; sp_object_class->write = sp_group_write; sp_object_class->release = sp_group_release; - sp_object_class->build = sp_group_build; + //sp_object_class->build = sp_group_build; // item_class->bbox = sp_group_bbox; // item_class->print = sp_group_print; -- 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-item-group.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 105ec03a7..45d00c653 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -118,14 +118,14 @@ sp_group_class_init (SPGroupClass *klass) object_class->dispose = sp_group_dispose; - sp_object_class->child_added = sp_group_child_added; - sp_object_class->remove_child = sp_group_remove_child; - sp_object_class->order_changed = sp_group_order_changed; - sp_object_class->update = sp_group_update; - sp_object_class->modified = sp_group_modified; - sp_object_class->set = sp_group_set; - sp_object_class->write = sp_group_write; - sp_object_class->release = sp_group_release; +// sp_object_class->child_added = sp_group_child_added; +// sp_object_class->remove_child = sp_group_remove_child; +// sp_object_class->order_changed = sp_group_order_changed; +// sp_object_class->update = sp_group_update; +// sp_object_class->modified = sp_group_modified; +// sp_object_class->set = sp_group_set; +// sp_object_class->write = sp_group_write; +// sp_object_class->release = sp_group_release; //sp_object_class->build = sp_group_build; // item_class->bbox = sp_group_bbox; -- 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-item-group.cpp | 52 +++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 587b82607..7a6e0c1ba 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -88,21 +88,21 @@ sp_group_init (SPGroup *group) new (&group->_display_modes) std::map(); } -void CGroup::onBuild(SPDocument *document, Inkscape::XML::Node *repr) { +void CGroup::build(SPDocument *document, Inkscape::XML::Node *repr) { SPGroup* object = this->spgroup; object->readAttr( "inkscape:groupmode" ); - CLPEItem::onBuild(document, repr); + CLPEItem::build(document, repr); } -void CGroup::onRelease() { +void CGroup::release() { SPGroup* object = this->spgroup; if ( SP_GROUP(object)->_layer_mode == SPGroup::LAYER ) { object->document->removeResource("layer", object); } - CLPEItem::onRelease(); + CLPEItem::release(); } static void @@ -111,8 +111,8 @@ sp_group_dispose(GObject *object) SP_GROUP(object)->_display_modes.~map(); } -void CGroup::onChildAdded(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { - CLPEItem::onChildAdded(child, ref); +void CGroup::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { + CLPEItem::child_added(child, ref); SPObject *last_child = spgroup->lastChild(); @@ -157,15 +157,15 @@ void CGroup::onChildAdded(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) /* fixme: hide (Lauris) */ -void CGroup::onRemoveChild(Inkscape::XML::Node *child) { - CLPEItem::onRemoveChild(child); +void CGroup::remove_child(Inkscape::XML::Node *child) { + CLPEItem::remove_child(child); spgroup->requestModified(SP_OBJECT_MODIFIED_FLAG); } -void CGroup::onOrderChanged (Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref) +void CGroup::order_changed (Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref) { - CLPEItem::onOrderChanged(child, old_ref, new_ref); + CLPEItem::order_changed(child, old_ref, new_ref); SPObject *ochild = spgroup->get_child_by_repr(child); if ( ochild && SP_IS_ITEM(ochild) ) { @@ -180,8 +180,8 @@ void CGroup::onOrderChanged (Inkscape::XML::Node *child, Inkscape::XML::Node *ol spgroup->requestModified(SP_OBJECT_MODIFIED_FLAG); } -void CGroup::onUpdate(SPCtx *ctx, unsigned int flags) { - CLPEItem::onUpdate(ctx, flags); +void CGroup::update(SPCtx *ctx, unsigned int flags) { + CLPEItem::update(ctx, flags); SPItemCtx *ictx, cctx; @@ -220,8 +220,8 @@ void CGroup::onUpdate(SPCtx *ctx, unsigned int flags) { } } -void CGroup::onModified(guint flags) { - CLPEItem::onModified(flags); +void CGroup::modified(guint flags) { + CLPEItem::modified(flags); SPObject *child; @@ -247,7 +247,7 @@ void CGroup::onModified(guint flags) { } } -Inkscape::XML::Node* CGroup::onWrite(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { +Inkscape::XML::Node* CGroup::write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { SPGroup* object = this->spgroup; SPGroup *group = SP_GROUP(object); @@ -296,12 +296,12 @@ Inkscape::XML::Node* CGroup::onWrite(Inkscape::XML::Document *xml_doc, Inkscape: repr->setAttribute("inkscape:groupmode", value); } - CLPEItem::onWrite(xml_doc, repr, flags); + CLPEItem::write(xml_doc, repr, flags); return repr; } -Geom::OptRect CGroup::onBbox(Geom::Affine const &transform, SPItem::BBoxType bboxtype) +Geom::OptRect CGroup::bbox(Geom::Affine const &transform, SPItem::BBoxType bboxtype) { Geom::OptRect bbox; @@ -318,7 +318,7 @@ Geom::OptRect CGroup::onBbox(Geom::Affine const &transform, SPItem::BBoxType bbo return bbox; } -void CGroup::onPrint(SPPrintContext *ctx) { +void CGroup::print(SPPrintContext *ctx) { GSList *l = g_slist_reverse(spgroup->childList(false)); while (l) { SPObject *o = SP_OBJECT (l->data); @@ -329,7 +329,7 @@ void CGroup::onPrint(SPPrintContext *ctx) { } } -gchar *CGroup::onDescription() { +gchar *CGroup::description() { gint len = this->spgroup->getItemCount(); return g_strdup_printf( ngettext("Group of %d object", @@ -337,7 +337,7 @@ gchar *CGroup::onDescription() { len), len); } -void CGroup::onSet(unsigned int key, gchar const* value) { +void CGroup::set(unsigned int key, gchar const* value) { SPGroup *group = this->spgroup; switch (key) { @@ -351,12 +351,12 @@ void CGroup::onSet(unsigned int key, gchar const* value) { } break; default: { - CLPEItem::onSet(key, value); + CLPEItem::set(key, value); } } } -Inkscape::DrawingItem *CGroup::onShow (Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { +Inkscape::DrawingItem *CGroup::show (Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { Inkscape::DrawingGroup *ai; SPObject *object = spgroup; @@ -368,7 +368,7 @@ Inkscape::DrawingItem *CGroup::onShow (Inkscape::Drawing &drawing, unsigned int return ai; } -void CGroup::onHide (unsigned int key) { +void CGroup::hide (unsigned int key) { SPItem * child; GSList *l = g_slist_reverse(spgroup->childList(false, SPObject::ActionShow)); @@ -385,7 +385,7 @@ void CGroup::onHide (unsigned int key) { } -void CGroup::onSnappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) { +void CGroup::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) { SPGroup* item = this->spgroup; for ( SPObject const *o = item->firstChild(); o; o = o->getNext() ) @@ -671,7 +671,7 @@ void SPGroup::_showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem * } } -void CGroup::onUpdatePatheffect(bool write) { +void CGroup::update_patheffect(bool write) { SPGroup* lpeitem = this->spgroup; #ifdef GROUP_VERBOSE @@ -684,7 +684,7 @@ void CGroup::onUpdatePatheffect(bool write) { for ( GSList const *iter = item_list; iter; iter = iter->next ) { SPObject *subitem = static_cast(iter->data); if (SP_IS_LPE_ITEM(subitem)) { - ((SPLPEItem*)subitem)->clpeitem->onUpdatePatheffect(write); + ((SPLPEItem*)subitem)->clpeitem->update_patheffect(write); } } -- 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-item-group.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 7a6e0c1ba..a95b347cf 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -78,6 +78,7 @@ static void sp_group_init (SPGroup *group) { group->cgroup = new CGroup(group); + group->typeHierarchy.insert(typeid(SPGroup)); delete group->clpeitem; group->clpeitem = group->cgroup; -- cgit v1.2.3 From 7eb077e4097aed62c11e5b4e97ff4b16039e73fa Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Mon, 1 Apr 2013 23:04:54 +0200 Subject: Replaced calls to g_object_(un)ref with sp_object_(un)ref. (bzr r11608.1.65) --- src/sp-item-group.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index a95b347cf..cc617c9c4 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -217,7 +217,7 @@ void CGroup::update(SPCtx *ctx, unsigned int flags) { child->updateDisplay(ctx, flags); } } - g_object_unref (G_OBJECT (child)); + sp_object_unref(child); } } @@ -244,7 +244,7 @@ void CGroup::modified(guint flags) { if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { child->emitModified(flags); } - g_object_unref (G_OBJECT (child)); + sp_object_unref(child); } } -- 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-item-group.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index cc617c9c4..0dbb078dd 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -57,7 +57,7 @@ static void sp_group_dispose(GObject *object); static void sp_group_perform_patheffect(SPGroup *group, SPGroup *topgroup, bool write); -G_DEFINE_TYPE(SPGroup, sp_group, SP_TYPE_LPE_ITEM); +G_DEFINE_TYPE(SPGroup, sp_group, G_TYPE_OBJECT); static void sp_group_class_init (SPGroupClass *klass) @@ -74,9 +74,9 @@ CGroup::CGroup(SPGroup *group) : CLPEItem(group) { CGroup::~CGroup() { } -static void -sp_group_init (SPGroup *group) -{ +SPGroup::SPGroup() : SPLPEItem() { + SPGroup* group = this; + group->cgroup = new CGroup(group); group->typeHierarchy.insert(typeid(SPGroup)); @@ -89,6 +89,12 @@ sp_group_init (SPGroup *group) new (&group->_display_modes) std::map(); } +static void +sp_group_init (SPGroup *group) +{ + new (group) SPGroup(); +} + void CGroup::build(SPDocument *document, Inkscape::XML::Node *repr) { SPGroup* object = this->spgroup; -- 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-item-group.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 0dbb078dd..10e84f2da 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -57,6 +57,16 @@ static void sp_group_dispose(GObject *object); static void sp_group_perform_patheffect(SPGroup *group, SPGroup *topgroup, bool write); +#include "sp-factory.h" + +namespace { + SPObject* createGroup() { + return new SPGroup(); + } + + bool groupRegistered = SPFactory::instance().registerObject("svg:g", createGroup); +} + G_DEFINE_TYPE(SPGroup, sp_group, G_TYPE_OBJECT); static void -- 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-item-group.cpp | 202 ++++++++++++++++++++++++-------------------------- 1 file changed, 95 insertions(+), 107 deletions(-) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 10e84f2da..5956b16a9 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -67,71 +67,38 @@ namespace { bool groupRegistered = SPFactory::instance().registerObject("svg:g", createGroup); } -G_DEFINE_TYPE(SPGroup, sp_group, G_TYPE_OBJECT); +SPGroup::SPGroup() : SPLPEItem(), CLPEItem(this) { + delete this->clpeitem; + this->clpeitem = this; + this->citem = this; + this->cobject = this; -static void -sp_group_class_init (SPGroupClass *klass) -{ - GObjectClass * object_class; - object_class = (GObjectClass *) klass; - object_class->dispose = sp_group_dispose; -} - -CGroup::CGroup(SPGroup *group) : CLPEItem(group) { - this->spgroup = group; + this->_layer_mode = SPGroup::GROUP; + new (&this->_display_modes) std::map(); } -CGroup::~CGroup() { +SPGroup::~SPGroup() { + this->_display_modes.~map(); } -SPGroup::SPGroup() : SPLPEItem() { - SPGroup* group = this; - - group->cgroup = new CGroup(group); - group->typeHierarchy.insert(typeid(SPGroup)); - - delete group->clpeitem; - group->clpeitem = group->cgroup; - group->citem = group->cgroup; - group->cobject = group->cgroup; - - group->_layer_mode = SPGroup::GROUP; - new (&group->_display_modes) std::map(); -} - -static void -sp_group_init (SPGroup *group) -{ - new (group) SPGroup(); -} - -void CGroup::build(SPDocument *document, Inkscape::XML::Node *repr) { - SPGroup* object = this->spgroup; - - object->readAttr( "inkscape:groupmode" ); +void SPGroup::build(SPDocument *document, Inkscape::XML::Node *repr) { + this->readAttr( "inkscape:groupmode" ); CLPEItem::build(document, repr); } -void CGroup::release() { - SPGroup* object = this->spgroup; - - if ( SP_GROUP(object)->_layer_mode == SPGroup::LAYER ) { - object->document->removeResource("layer", object); +void SPGroup::release() { + if (this->_layer_mode == SPGroup::LAYER) { + this->document->removeResource("layer", this); } - CLPEItem::release(); -} -static void -sp_group_dispose(GObject *object) -{ - SP_GROUP(object)->_display_modes.~map(); + CLPEItem::release(); } -void CGroup::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { +void SPGroup::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { CLPEItem::child_added(child, ref); - SPObject *last_child = spgroup->lastChild(); + SPObject *last_child = this->lastChild(); if (last_child && last_child->getRepr() == child) { // optimization for the common special case where the child is being added at the end @@ -141,7 +108,7 @@ void CGroup::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { SPItemView *v; Inkscape::DrawingItem *ac; - for (v = spgroup->display; v != NULL; v = v->next) { + for (v = this->display; v != NULL; v = v->next) { ac = SP_ITEM (ochild)->invoke_show (v->arenaitem->drawing(), v->key, v->flags); if (ac) { @@ -150,7 +117,7 @@ void CGroup::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { } } } else { // general case - SPObject *ochild = spgroup->get_child_by_repr(child); + SPObject *ochild = this->get_child_by_repr(child); if ( ochild && SP_IS_ITEM(ochild) ) { /* TODO: this should be moved into SPItem somehow */ SPItemView *v; @@ -158,7 +125,7 @@ void CGroup::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { unsigned position = SP_ITEM(ochild)->pos_in_parent(); - for (v = spgroup->display; v != NULL; v = v->next) { + for (v = this->display; v != NULL; v = v->next) { ac = SP_ITEM (ochild)->invoke_show (v->arenaitem->drawing(), v->key, v->flags); if (ac) { @@ -169,22 +136,22 @@ void CGroup::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { } } - spgroup->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); } /* fixme: hide (Lauris) */ -void CGroup::remove_child(Inkscape::XML::Node *child) { +void SPGroup::remove_child(Inkscape::XML::Node *child) { CLPEItem::remove_child(child); - spgroup->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); } -void CGroup::order_changed (Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref) +void SPGroup::order_changed (Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref) { CLPEItem::order_changed(child, old_ref, new_ref); - SPObject *ochild = spgroup->get_child_by_repr(child); + SPObject *ochild = this->get_child_by_repr(child); if ( ochild && SP_IS_ITEM(ochild) ) { /* TODO: this should be moved into SPItem somehow */ SPItemView *v; @@ -194,10 +161,10 @@ void CGroup::order_changed (Inkscape::XML::Node *child, Inkscape::XML::Node *old } } - spgroup->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); } -void CGroup::update(SPCtx *ctx, unsigned int flags) { +void SPGroup::update(SPCtx *ctx, unsigned int flags) { CLPEItem::update(ctx, flags); SPItemCtx *ictx, cctx; @@ -212,17 +179,17 @@ void CGroup::update(SPCtx *ctx, unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) { - SPObject *object = spgroup; - for (SPItemView *v = spgroup->display; v != NULL; v = v->next) { + for (SPItemView *v = this->display; v != NULL; v = v->next) { Inkscape::DrawingGroup *group = dynamic_cast(v->arenaitem); - group->setStyle(object->style); + group->setStyle(this->style); } } - GSList *l = g_slist_reverse(spgroup->childList(true, SPObject::ActionUpdate)); + GSList *l = g_slist_reverse(this->childList(true, SPObject::ActionUpdate)); while (l) { SPObject *child = SP_OBJECT (l->data); l = g_slist_remove (l, child); + if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { if (SP_IS_ITEM (child)) { SPItem const &chi = *SP_ITEM(child); @@ -233,43 +200,50 @@ void CGroup::update(SPCtx *ctx, unsigned int flags) { child->updateDisplay(ctx, flags); } } + sp_object_unref(child); } } -void CGroup::modified(guint flags) { +void SPGroup::modified(guint flags) { CLPEItem::modified(flags); SPObject *child; - if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; + if (flags & SP_OBJECT_MODIFIED_FLAG) { + flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; + } + flags &= SP_OBJECT_MODIFIED_CASCADE; if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) { - SPObject *object = spgroup; - for (SPItemView *v = spgroup->display; v != NULL; v = v->next) { + for (SPItemView *v = this->display; v != NULL; v = v->next) { Inkscape::DrawingGroup *group = dynamic_cast(v->arenaitem); - group->setStyle(object->style); + group->setStyle(this->style); } } - GSList *l = g_slist_reverse(spgroup->childList(true)); + GSList *l = g_slist_reverse(this->childList(true)); + while (l) { child = SP_OBJECT (l->data); l = g_slist_remove (l, child); + if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { child->emitModified(flags); } + sp_object_unref(child); } } -Inkscape::XML::Node* CGroup::write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { - SPGroup* object = this->spgroup; +Inkscape::XML::Node* SPGroup::write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { + SPGroup* object = this; SPGroup *group = SP_GROUP(object); if (flags & SP_OBJECT_WRITE_BUILD) { GSList *l; + if (!repr) { if (SP_IS_SWITCH(object)) { repr = xml_doc->createElement("svg:switch"); @@ -277,15 +251,19 @@ Inkscape::XML::Node* CGroup::write(Inkscape::XML::Document *xml_doc, Inkscape::X repr = xml_doc->createElement("svg:g"); } } + l = NULL; + for (SPObject *child = object->firstChild(); child; child = child->getNext() ) { if ( !SP_IS_TITLE(child) && !SP_IS_DESC(child) ) { Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + if (crepr) { l = g_slist_prepend (l, crepr); } } } + while (l) { repr->addChild((Inkscape::XML::Node *) l->data, NULL); Inkscape::GC::release((Inkscape::XML::Node *) l->data); @@ -310,6 +288,7 @@ Inkscape::XML::Node* CGroup::write(Inkscape::XML::Document *xml_doc, Inkscape::X } else { value = NULL; } + repr->setAttribute("inkscape:groupmode", value); } @@ -318,83 +297,91 @@ Inkscape::XML::Node* CGroup::write(Inkscape::XML::Document *xml_doc, Inkscape::X return repr; } -Geom::OptRect CGroup::bbox(Geom::Affine const &transform, SPItem::BBoxType bboxtype) +Geom::OptRect SPGroup::bbox(Geom::Affine const &transform, SPItem::BBoxType bboxtype) { Geom::OptRect bbox; - GSList *l = this->spgroup->childList(false, SPObject::ActionBBox); + GSList *l = this->childList(false, SPObject::ActionBBox); + while (l) { SPObject *o = SP_OBJECT (l->data); + if (SP_IS_ITEM(o) && !SP_ITEM(o)->isHidden()) { SPItem *child = SP_ITEM(o); Geom::Affine const ct(child->transform * transform); bbox |= child->bounds(bboxtype, ct); } + l = g_slist_remove (l, o); } + return bbox; } -void CGroup::print(SPPrintContext *ctx) { - GSList *l = g_slist_reverse(spgroup->childList(false)); +void SPGroup::print(SPPrintContext *ctx) { + GSList *l = g_slist_reverse(this->childList(false)); + while (l) { SPObject *o = SP_OBJECT (l->data); + if (SP_IS_ITEM(o)) { SP_ITEM(o)->invoke_print (ctx); } + l = g_slist_remove (l, o); } } -gchar *CGroup::description() { - gint len = this->spgroup->getItemCount(); +gchar *SPGroup::description() { + gint len = this->getItemCount(); return g_strdup_printf( ngettext("Group of %d object", "Group of %d objects", len), len); } -void CGroup::set(unsigned int key, gchar const* value) { - SPGroup *group = this->spgroup; - +void SPGroup::set(unsigned int key, gchar const* value) { switch (key) { case SP_ATTR_INKSCAPE_GROUPMODE: if ( value && !strcmp(value, "layer") ) { - group->setLayerMode(SPGroup::LAYER); + this->setLayerMode(SPGroup::LAYER); } else if ( value && !strcmp(value, "maskhelper") ) { - group->setLayerMode(SPGroup::MASK_HELPER); + this->setLayerMode(SPGroup::MASK_HELPER); } else { - group->setLayerMode(SPGroup::GROUP); + this->setLayerMode(SPGroup::GROUP); } break; - default: { + + default: CLPEItem::set(key, value); - } + break; } } -Inkscape::DrawingItem *CGroup::show (Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { +Inkscape::DrawingItem *SPGroup::show (Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) { Inkscape::DrawingGroup *ai; - SPObject *object = spgroup; ai = new Inkscape::DrawingGroup(drawing); - ai->setPickChildren(spgroup->effectiveLayerMode(key) == SPGroup::LAYER); - ai->setStyle(object->style); + ai->setPickChildren(this->effectiveLayerMode(key) == SPGroup::LAYER); + ai->setStyle(this->style); - this->spgroup->_showChildren(drawing, ai, key, flags); + this->_showChildren(drawing, ai, key, flags); return ai; } -void CGroup::hide (unsigned int key) { +void SPGroup::hide (unsigned int key) { SPItem * child; - GSList *l = g_slist_reverse(spgroup->childList(false, SPObject::ActionShow)); + GSList *l = g_slist_reverse(this->childList(false, SPObject::ActionShow)); + while (l) { SPObject *o = SP_OBJECT (l->data); + if (SP_IS_ITEM (o)) { child = SP_ITEM (o); child->invoke_hide (key); } + l = g_slist_remove (l, o); } @@ -402,10 +389,8 @@ void CGroup::hide (unsigned int key) { } -void CGroup::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) { - SPGroup* item = this->spgroup; - - for ( SPObject const *o = item->firstChild(); o; o = o->getNext() ) +void SPGroup::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) { + for ( SPObject const *o = this->firstChild(); o; o = o->getNext() ) { if (SP_IS_ITEM(o)) { SP_ITEM(o)->getSnappoints(p, snapprefs); @@ -688,33 +673,32 @@ void SPGroup::_showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem * } } -void CGroup::update_patheffect(bool write) { - SPGroup* lpeitem = this->spgroup; - +void SPGroup::update_patheffect(bool write) { #ifdef GROUP_VERBOSE g_message("sp_group_update_patheffect: %p\n", lpeitem); #endif - g_return_if_fail (lpeitem != NULL); - g_return_if_fail (SP_IS_GROUP (lpeitem)); - GSList const *item_list = sp_item_group_item_list(SP_GROUP(lpeitem)); + GSList const *item_list = sp_item_group_item_list(this); + for ( GSList const *iter = item_list; iter; iter = iter->next ) { SPObject *subitem = static_cast(iter->data); + if (SP_IS_LPE_ITEM(subitem)) { ((SPLPEItem*)subitem)->clpeitem->update_patheffect(write); } } - if (sp_lpe_item_has_path_effect(lpeitem) && sp_lpe_item_path_effects_enabled(lpeitem)) { - for (PathEffectList::iterator it = lpeitem->path_effect_list->begin(); it != lpeitem->path_effect_list->end(); it++) + if (sp_lpe_item_has_path_effect(this) && sp_lpe_item_path_effects_enabled(this)) { + for (PathEffectList::iterator it = this->path_effect_list->begin(); it != this->path_effect_list->end(); it++) { LivePathEffectObject *lpeobj = (*it)->lpeobject; + if (lpeobj && lpeobj->get_lpe()) { - lpeobj->get_lpe()->doBeforeEffect(lpeitem); + lpeobj->get_lpe()->doBeforeEffect(this); } } - sp_group_perform_patheffect(SP_GROUP(lpeitem), SP_GROUP(lpeitem), write); + sp_group_perform_patheffect(this, this, write); } } @@ -722,17 +706,21 @@ static void sp_group_perform_patheffect(SPGroup *group, SPGroup *topgroup, bool write) { GSList const *item_list = sp_item_group_item_list(SP_GROUP(group)); + for ( GSList const *iter = item_list; iter; iter = iter->next ) { SPObject *subitem = static_cast(iter->data); + if (SP_IS_GROUP(subitem)) { sp_group_perform_patheffect(SP_GROUP(subitem), topgroup, write); } else if (SP_IS_SHAPE(subitem)) { SPCurve * c = NULL; + if (SP_IS_PATH(subitem)) { c = SP_PATH(subitem)->get_original_curve(); } else { c = SP_SHAPE(subitem)->getCurve(); } + // only run LPEs when the shape has a curve defined if (c) { sp_lpe_item_perform_path_effect(SP_LPE_ITEM(topgroup), c); -- 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-item-group.cpp | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 5956b16a9..77bf647dc 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -53,8 +53,6 @@ using Inkscape::DocumentUndo; -static void sp_group_dispose(GObject *object); - static void sp_group_perform_patheffect(SPGroup *group, SPGroup *topgroup, bool write); #include "sp-factory.h" @@ -67,9 +65,7 @@ namespace { bool groupRegistered = SPFactory::instance().registerObject("svg:g", createGroup); } -SPGroup::SPGroup() : SPLPEItem(), CLPEItem(this) { - delete this->clpeitem; - this->clpeitem = this; +SPGroup::SPGroup() : SPLPEItem() { this->citem = this; this->cobject = this; @@ -84,7 +80,7 @@ SPGroup::~SPGroup() { void SPGroup::build(SPDocument *document, Inkscape::XML::Node *repr) { this->readAttr( "inkscape:groupmode" ); - CLPEItem::build(document, repr); + SPLPEItem::build(document, repr); } void SPGroup::release() { @@ -92,11 +88,11 @@ void SPGroup::release() { this->document->removeResource("layer", this); } - CLPEItem::release(); + SPLPEItem::release(); } void SPGroup::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { - CLPEItem::child_added(child, ref); + SPLPEItem::child_added(child, ref); SPObject *last_child = this->lastChild(); @@ -142,14 +138,14 @@ void SPGroup::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) /* fixme: hide (Lauris) */ void SPGroup::remove_child(Inkscape::XML::Node *child) { - CLPEItem::remove_child(child); + SPLPEItem::remove_child(child); this->requestModified(SP_OBJECT_MODIFIED_FLAG); } void SPGroup::order_changed (Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref) { - CLPEItem::order_changed(child, old_ref, new_ref); + SPLPEItem::order_changed(child, old_ref, new_ref); SPObject *ochild = this->get_child_by_repr(child); if ( ochild && SP_IS_ITEM(ochild) ) { @@ -165,7 +161,7 @@ void SPGroup::order_changed (Inkscape::XML::Node *child, Inkscape::XML::Node *ol } void SPGroup::update(SPCtx *ctx, unsigned int flags) { - CLPEItem::update(ctx, flags); + SPLPEItem::update(ctx, flags); SPItemCtx *ictx, cctx; @@ -206,7 +202,7 @@ void SPGroup::update(SPCtx *ctx, unsigned int flags) { } void SPGroup::modified(guint flags) { - CLPEItem::modified(flags); + SPLPEItem::modified(flags); SPObject *child; @@ -292,7 +288,7 @@ Inkscape::XML::Node* SPGroup::write(Inkscape::XML::Document *xml_doc, Inkscape:: repr->setAttribute("inkscape:groupmode", value); } - CLPEItem::write(xml_doc, repr, flags); + SPLPEItem::write(xml_doc, repr, flags); return repr; } @@ -353,7 +349,7 @@ void SPGroup::set(unsigned int key, gchar const* value) { break; default: - CLPEItem::set(key, value); + SPLPEItem::set(key, value); break; } } @@ -385,7 +381,7 @@ void SPGroup::hide (unsigned int key) { l = g_slist_remove (l, o); } -// CLPEItem::onHide(key); +// SPLPEItem::onHide(key); } @@ -684,7 +680,7 @@ void SPGroup::update_patheffect(bool write) { SPObject *subitem = static_cast(iter->data); if (SP_IS_LPE_ITEM(subitem)) { - ((SPLPEItem*)subitem)->clpeitem->update_patheffect(write); + ((SPLPEItem*)subitem)->update_patheffect(write); } } -- 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-item-group.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 77bf647dc..45617e282 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -66,7 +66,6 @@ namespace { } SPGroup::SPGroup() : SPLPEItem() { - this->citem = this; this->cobject = this; this->_layer_mode = SPGroup::GROUP; -- 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-item-group.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 45617e282..ab38636f6 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -66,8 +66,6 @@ namespace { } SPGroup::SPGroup() : SPLPEItem() { - this->cobject = this; - this->_layer_mode = SPGroup::GROUP; new (&this->_display_modes) std::map(); } -- cgit v1.2.3 From 127543bae3c0a76770e197c7058a783dea18fe3e Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Wed, 31 Jul 2013 23:23:10 +0200 Subject: Removed placement news / explicit destructor calls. (bzr r11608.1.113) --- src/sp-item-group.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/sp-item-group.cpp') diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 7044f2f7f..36a42f704 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -67,11 +67,11 @@ namespace { SPGroup::SPGroup() : SPLPEItem() { this->_layer_mode = SPGroup::GROUP; - new (&this->_display_modes) std::map(); + //new (&this->_display_modes) std::map(); } SPGroup::~SPGroup() { - this->_display_modes.~map(); + //this->_display_modes.~map(); } void SPGroup::build(SPDocument *document, Inkscape::XML::Node *repr) { -- cgit v1.2.3