From 2cc1782f12955a7145318a492b28c13f3492b430 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Tue, 21 Aug 2012 15:44:00 +0200 Subject: Added "virtual pad" to SPMask. (bzr r11608.1.39) --- src/sp-mask.cpp | 96 ++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 72 insertions(+), 24 deletions(-) (limited to 'src/sp-mask.cpp') diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index f955e5428..8e92afb6e 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -85,9 +85,20 @@ sp_mask_class_init (SPMaskClass *klass) sp_object_class->write = sp_mask_write; } +CMask::CMask(SPMask* mask) : CObjectGroup(mask) { + this->spmask = mask; +} + +CMask::~CMask() { +} + static void sp_mask_init (SPMask *mask) { + mask->cmask = new CMask(mask); + mask->cobjectgroup = mask->cmask; + mask->cobject = mask->cmask; + mask->maskUnits_set = FALSE; mask->maskUnits = SP_CONTENT_UNITS_OBJECTBOUNDINGBOX; @@ -97,22 +108,27 @@ sp_mask_init (SPMask *mask) mask->display = NULL; } -static void -sp_mask_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) -{ - if (((SPObjectClass *) parent_class)->build) { - ((SPObjectClass *) parent_class)->build (object, document, repr); - } +void CMask::onBuild(SPDocument* doc, Inkscape::XML::Node* repr) { + SPMask* object = this->spmask; + + CObjectGroup::onBuild(doc, repr); object->readAttr( "maskUnits" ); object->readAttr( "maskContentUnits" ); /* Register ourselves */ - document->addResource("mask", object); + doc->addResource("mask", object); } -static void sp_mask_release (SPObject * object) +static void +sp_mask_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { + ((SPMask*)object)->cmask->onBuild(document, repr); +} + +void CMask::onRelease() { + SPMask* object = this->spmask; + if (object->document) { // Unregister ourselves object->document->removeResource("mask", object); @@ -124,14 +140,17 @@ static void sp_mask_release (SPObject * object) cp->display = sp_mask_view_list_remove (cp->display, cp->display); } - if (((SPObjectClass *) (parent_class))->release) { - ((SPObjectClass *) parent_class)->release (object); - } + CObjectGroup::onRelease(); } -static void -sp_mask_set (SPObject *object, unsigned int key, const gchar *value) +static void sp_mask_release (SPObject * object) { + ((SPMask*)object)->cmask->onRelease(); +} + +void CMask::onSet(unsigned int key, const gchar* value) { + SPMask* object = this->spmask; + SPMask *mask = SP_MASK (object); switch (key) { @@ -162,24 +181,29 @@ sp_mask_set (SPObject *object, unsigned int key, const gchar *value) object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); break; default: - if (((SPObjectClass *) parent_class)->set) - ((SPObjectClass *) parent_class)->set (object, key, value); + CObjectGroup::onSet(key, value); break; } } static void -sp_mask_child_added (SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref) +sp_mask_set (SPObject *object, unsigned int key, const gchar *value) { + ((SPMask*)object)->cmask->onSet(key, value); +} + +void CMask::onChildAdded(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { + SPMask* object = this->spmask; + /* Invoke SPObjectGroup implementation */ - ((SPObjectClass *) (parent_class))->child_added (object, child, ref); + CObjectGroup::onChildAdded(child, ref); /* Show new object */ SPObject *ochild = object->document->getObjectByRepr(child); if (SP_IS_ITEM (ochild)) { SPMask *cp = SP_MASK (object); for (SPMaskView *v = cp->display; v != NULL; v = v->next) { - Inkscape::DrawingItem *ac = SP_ITEM (ochild)->invoke_show ( v->arenaitem->drawing(), + Inkscape::DrawingItem *ac = SP_ITEM (ochild)->invoke_show (v->arenaitem->drawing(), v->key, SP_ITEM_REFERENCE_FLAGS); if (ac) { @@ -189,8 +213,15 @@ sp_mask_child_added (SPObject *object, Inkscape::XML::Node *child, Inkscape::XML } } -static void sp_mask_update(SPObject *object, SPCtx *ctx, guint flags) +static void +sp_mask_child_added (SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { + ((SPMask*)object)->cmask->onChildAdded(child, ref); +} + +void CMask::onUpdate(SPCtx* ctx, unsigned int flags) { + SPMask* object = this->spmask; + if (flags & SP_OBJECT_MODIFIED_FLAG) { flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; } @@ -226,8 +257,14 @@ static void sp_mask_update(SPObject *object, SPCtx *ctx, guint flags) } } -static void sp_mask_modified(SPObject *object, guint flags) +static void sp_mask_update(SPObject *object, SPCtx *ctx, guint flags) { + ((SPMask*)object)->cmask->onUpdate(ctx, flags); +} + +void CMask::onModified(unsigned int flags) { + SPMask* object = this->spmask; + if (flags & SP_OBJECT_MODIFIED_FLAG) { flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; } @@ -251,19 +288,27 @@ static void sp_mask_modified(SPObject *object, guint flags) } } -static Inkscape::XML::Node * -sp_mask_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) +static void sp_mask_modified(SPObject *object, guint flags) { + ((SPMask*)object)->cmask->onModified(flags); +} + +Inkscape::XML::Node* CMask::onWrite(Inkscape::XML::Document* xml_doc, Inkscape::XML::Node* repr, guint flags) { if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { repr = xml_doc->createElement("svg:mask"); } - if (((SPObjectClass *) (parent_class))->write) - ((SPObjectClass *) (parent_class))->write (object, xml_doc, repr, flags); + CObjectGroup::onWrite(xml_doc, repr, flags); return repr; } +static Inkscape::XML::Node * +sp_mask_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) +{ + return ((SPMask*)object)->cmask->onWrite(xml_doc, repr, flags); +} + // Create a mask element (using passed elements), add it to const gchar * sp_mask_create (GSList *reprs, SPDocument *document, Geom::Affine const* applyTransform) @@ -296,6 +341,9 @@ sp_mask_create (GSList *reprs, SPDocument *document, Geom::Affine const* applyTr return mask_id; } + +// CPPIFY: These methods are virtual in SPItem. So wouldn't it be better to derive SPMask from SPItem? + Inkscape::DrawingItem *sp_mask_show(SPMask *mask, Inkscape::Drawing &drawing, unsigned int key) { g_return_val_if_fail (mask != NULL, NULL); -- 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-mask.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-mask.cpp') diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index 8e92afb6e..eb39ebf3d 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -76,7 +76,7 @@ sp_mask_class_init (SPMaskClass *klass) parent_class = (SPObjectGroupClass*) g_type_class_ref (SP_TYPE_OBJECTGROUP); SPObjectClass *sp_object_class = (SPObjectClass *) klass; - sp_object_class->build = sp_mask_build; + //sp_object_class->build = sp_mask_build; sp_object_class->release = sp_mask_release; sp_object_class->set = sp_mask_set; sp_object_class->child_added = sp_mask_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-mask.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/sp-mask.cpp') diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index eb39ebf3d..bc203b857 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -77,12 +77,12 @@ sp_mask_class_init (SPMaskClass *klass) SPObjectClass *sp_object_class = (SPObjectClass *) klass; //sp_object_class->build = sp_mask_build; - sp_object_class->release = sp_mask_release; - sp_object_class->set = sp_mask_set; - sp_object_class->child_added = sp_mask_child_added; - sp_object_class->update = sp_mask_update; - sp_object_class->modified = sp_mask_modified; - sp_object_class->write = sp_mask_write; +// sp_object_class->release = sp_mask_release; +// sp_object_class->set = sp_mask_set; +// sp_object_class->child_added = sp_mask_child_added; +// sp_object_class->update = sp_mask_update; +// sp_object_class->modified = sp_mask_modified; +// sp_object_class->write = sp_mask_write; } CMask::CMask(SPMask* mask) : CObjectGroup(mask) { -- 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-mask.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src/sp-mask.cpp') diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index 161fc3e59..e777ee154 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -69,10 +69,10 @@ sp_mask_init (SPMask *mask) mask->display = NULL; } -void CMask::onBuild(SPDocument* doc, Inkscape::XML::Node* repr) { +void CMask::build(SPDocument* doc, Inkscape::XML::Node* repr) { SPMask* object = this->spmask; - CObjectGroup::onBuild(doc, repr); + CObjectGroup::build(doc, repr); object->readAttr( "maskUnits" ); object->readAttr( "maskContentUnits" ); @@ -81,7 +81,7 @@ void CMask::onBuild(SPDocument* doc, Inkscape::XML::Node* repr) { doc->addResource("mask", object); } -void CMask::onRelease() { +void CMask::release() { SPMask* object = this->spmask; if (object->document) { @@ -95,10 +95,10 @@ void CMask::onRelease() { cp->display = sp_mask_view_list_remove (cp->display, cp->display); } - CObjectGroup::onRelease(); + CObjectGroup::release(); } -void CMask::onSet(unsigned int key, const gchar* value) { +void CMask::set(unsigned int key, const gchar* value) { SPMask* object = this->spmask; SPMask *mask = SP_MASK (object); @@ -131,16 +131,16 @@ void CMask::onSet(unsigned int key, const gchar* value) { object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); break; default: - CObjectGroup::onSet(key, value); + CObjectGroup::set(key, value); break; } } -void CMask::onChildAdded(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { +void CMask::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { SPMask* object = this->spmask; /* Invoke SPObjectGroup implementation */ - CObjectGroup::onChildAdded(child, ref); + CObjectGroup::child_added(child, ref); /* Show new object */ SPObject *ochild = object->document->getObjectByRepr(child); @@ -158,7 +158,7 @@ void CMask::onChildAdded(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { } -void CMask::onUpdate(SPCtx* ctx, unsigned int flags) { +void CMask::update(SPCtx* ctx, unsigned int flags) { SPMask* object = this->spmask; if (flags & SP_OBJECT_MODIFIED_FLAG) { @@ -196,7 +196,7 @@ void CMask::onUpdate(SPCtx* ctx, unsigned int flags) { } } -void CMask::onModified(unsigned int flags) { +void CMask::modified(unsigned int flags) { SPMask* object = this->spmask; if (flags & SP_OBJECT_MODIFIED_FLAG) { @@ -222,12 +222,12 @@ void CMask::onModified(unsigned int flags) { } } -Inkscape::XML::Node* CMask::onWrite(Inkscape::XML::Document* xml_doc, Inkscape::XML::Node* repr, guint flags) { +Inkscape::XML::Node* CMask::write(Inkscape::XML::Document* xml_doc, Inkscape::XML::Node* repr, guint flags) { if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { repr = xml_doc->createElement("svg:mask"); } - CObjectGroup::onWrite(xml_doc, repr, flags); + CObjectGroup::write(xml_doc, repr, flags); return repr; } -- 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-mask.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/sp-mask.cpp') diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index e777ee154..8c7fbe53e 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -55,6 +55,7 @@ static void sp_mask_init (SPMask *mask) { mask->cmask = new CMask(mask); + mask->typeHierarchy.insert(typeid(SPMask)); delete mask->cobjectgroup; mask->cobjectgroup = mask->cmask; -- 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-mask.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/sp-mask.cpp') diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index 8c7fbe53e..4029d03aa 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -171,7 +171,7 @@ void CMask::update(SPCtx* ctx, unsigned int flags) { SPObjectGroup *og = SP_OBJECTGROUP(object); GSList *l = NULL; for (SPObject *child = og->firstChild(); child; child = child->getNext()) { - g_object_ref(G_OBJECT (child)); + sp_object_ref(child); l = g_slist_prepend (l, child); } l = g_slist_reverse (l); @@ -181,7 +181,7 @@ void CMask::update(SPCtx* ctx, unsigned int flags) { if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { child->updateDisplay(ctx, flags); } - g_object_unref(G_OBJECT(child)); + sp_object_unref(child); } SPMask *mask = SP_MASK(object); @@ -209,7 +209,7 @@ void CMask::modified(unsigned int flags) { SPObjectGroup *og = SP_OBJECTGROUP(object); GSList *l = NULL; for (SPObject *child = og->firstChild(); child; child = child->getNext()) { - g_object_ref(G_OBJECT(child)); + sp_object_ref(child); l = g_slist_prepend(l, child); } l = g_slist_reverse(l); @@ -219,7 +219,7 @@ void CMask::modified(unsigned int 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-mask.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/sp-mask.cpp') diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index 4029d03aa..cb91418b6 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -37,7 +37,7 @@ struct SPMaskView { SPMaskView *sp_mask_view_new_prepend (SPMaskView *list, unsigned int key, Inkscape::DrawingItem *arenaitem); SPMaskView *sp_mask_view_list_remove (SPMaskView *list, SPMaskView *view); -G_DEFINE_TYPE(SPMask, sp_mask, SP_TYPE_OBJECTGROUP); +G_DEFINE_TYPE(SPMask, sp_mask, G_TYPE_OBJECT); static void sp_mask_class_init (SPMaskClass *klass) @@ -51,9 +51,9 @@ CMask::CMask(SPMask* mask) : CObjectGroup(mask) { CMask::~CMask() { } -static void -sp_mask_init (SPMask *mask) -{ +SPMask::SPMask() : SPObjectGroup() { + SPMask* mask = this; + mask->cmask = new CMask(mask); mask->typeHierarchy.insert(typeid(SPMask)); @@ -70,6 +70,12 @@ sp_mask_init (SPMask *mask) mask->display = NULL; } +static void +sp_mask_init (SPMask *mask) +{ + new (mask) SPMask(); +} + void CMask::build(SPDocument* doc, Inkscape::XML::Node* repr) { SPMask* object = this->spmask; -- 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-mask.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/sp-mask.cpp') diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index cb91418b6..014d40a6a 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -37,6 +37,16 @@ struct SPMaskView { SPMaskView *sp_mask_view_new_prepend (SPMaskView *list, unsigned int key, Inkscape::DrawingItem *arenaitem); SPMaskView *sp_mask_view_list_remove (SPMaskView *list, SPMaskView *view); +#include "sp-factory.h" + +namespace { + SPObject* createMask() { + return new SPMask(); + } + + bool maskRegistered = SPFactory::instance().registerObject("svg:mask", createMask); +} + G_DEFINE_TYPE(SPMask, sp_mask, G_TYPE_OBJECT); static void -- cgit v1.2.3 From 8f5e6d495f0478701218adc8078db5063b710a05 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 6 Apr 2013 16:26:39 +0200 Subject: Merged ObjectGroup and subclasses. (bzr r11608.1.83) --- src/sp-mask.cpp | 74 +++++++++++++++++++-------------------------------------- 1 file changed, 25 insertions(+), 49 deletions(-) (limited to 'src/sp-mask.cpp') diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index 014d40a6a..101c041d2 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -47,49 +47,25 @@ namespace { bool maskRegistered = SPFactory::instance().registerObject("svg:mask", createMask); } -G_DEFINE_TYPE(SPMask, sp_mask, G_TYPE_OBJECT); - -static void -sp_mask_class_init (SPMaskClass *klass) -{ -} - -CMask::CMask(SPMask* mask) : CObjectGroup(mask) { - this->spmask = mask; -} - -CMask::~CMask() { -} - SPMask::SPMask() : SPObjectGroup() { - SPMask* mask = this; - - mask->cmask = new CMask(mask); - mask->typeHierarchy.insert(typeid(SPMask)); + this->cobject = this; - delete mask->cobjectgroup; - mask->cobjectgroup = mask->cmask; - mask->cobject = mask->cmask; + this->maskUnits_set = FALSE; + this->maskUnits = SP_CONTENT_UNITS_OBJECTBOUNDINGBOX; - mask->maskUnits_set = FALSE; - mask->maskUnits = SP_CONTENT_UNITS_OBJECTBOUNDINGBOX; + this->maskContentUnits_set = FALSE; + this->maskContentUnits = SP_CONTENT_UNITS_USERSPACEONUSE; - mask->maskContentUnits_set = FALSE; - mask->maskContentUnits = SP_CONTENT_UNITS_USERSPACEONUSE; - - mask->display = NULL; + this->display = NULL; } -static void -sp_mask_init (SPMask *mask) -{ - new (mask) SPMask(); +SPMask::~SPMask() { } -void CMask::build(SPDocument* doc, Inkscape::XML::Node* repr) { - SPMask* object = this->spmask; +void SPMask::build(SPDocument* doc, Inkscape::XML::Node* repr) { + SPMask* object = this; - CObjectGroup::build(doc, repr); + SPObjectGroup::build(doc, repr); object->readAttr( "maskUnits" ); object->readAttr( "maskContentUnits" ); @@ -98,8 +74,8 @@ void CMask::build(SPDocument* doc, Inkscape::XML::Node* repr) { doc->addResource("mask", object); } -void CMask::release() { - SPMask* object = this->spmask; +void SPMask::release() { + SPMask* object = this; if (object->document) { // Unregister ourselves @@ -112,11 +88,11 @@ void CMask::release() { cp->display = sp_mask_view_list_remove (cp->display, cp->display); } - CObjectGroup::release(); + SPObjectGroup::release(); } -void CMask::set(unsigned int key, const gchar* value) { - SPMask* object = this->spmask; +void SPMask::set(unsigned int key, const gchar* value) { + SPMask* object = this; SPMask *mask = SP_MASK (object); @@ -148,16 +124,16 @@ void CMask::set(unsigned int key, const gchar* value) { object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); break; default: - CObjectGroup::set(key, value); + SPObjectGroup::set(key, value); break; } } -void CMask::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { - SPMask* object = this->spmask; +void SPMask::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { + SPMask* object = this; /* Invoke SPObjectGroup implementation */ - CObjectGroup::child_added(child, ref); + SPObjectGroup::child_added(child, ref); /* Show new object */ SPObject *ochild = object->document->getObjectByRepr(child); @@ -175,8 +151,8 @@ void CMask::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { } -void CMask::update(SPCtx* ctx, unsigned int flags) { - SPMask* object = this->spmask; +void SPMask::update(SPCtx* ctx, unsigned int flags) { + SPMask* object = this; if (flags & SP_OBJECT_MODIFIED_FLAG) { flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; @@ -213,8 +189,8 @@ void CMask::update(SPCtx* ctx, unsigned int flags) { } } -void CMask::modified(unsigned int flags) { - SPMask* object = this->spmask; +void SPMask::modified(unsigned int flags) { + SPMask* object = this; if (flags & SP_OBJECT_MODIFIED_FLAG) { flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; @@ -239,12 +215,12 @@ void CMask::modified(unsigned int flags) { } } -Inkscape::XML::Node* CMask::write(Inkscape::XML::Document* xml_doc, Inkscape::XML::Node* repr, guint flags) { +Inkscape::XML::Node* SPMask::write(Inkscape::XML::Document* xml_doc, Inkscape::XML::Node* repr, guint flags) { if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { repr = xml_doc->createElement("svg:mask"); } - CObjectGroup::write(xml_doc, repr, flags); + SPObjectGroup::write(xml_doc, repr, flags); return repr; } -- 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-mask.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/sp-mask.cpp') diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index 101c041d2..186e927f7 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -48,8 +48,6 @@ namespace { } SPMask::SPMask() : SPObjectGroup() { - this->cobject = this; - this->maskUnits_set = FALSE; this->maskUnits = SP_CONTENT_UNITS_OBJECTBOUNDINGBOX; -- cgit v1.2.3 From bf4a1d2d49850170b936c30cfe2b30e798716406 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 3 Aug 2013 03:03:43 +0200 Subject: Cleaned up. (bzr r11608.1.117) --- src/sp-mask.cpp | 125 ++++++++++++++++++++++++++------------------------------ 1 file changed, 58 insertions(+), 67 deletions(-) (limited to 'src/sp-mask.cpp') diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index 186e927f7..9707c9d8e 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -61,65 +61,60 @@ SPMask::~SPMask() { } void SPMask::build(SPDocument* doc, Inkscape::XML::Node* repr) { - SPMask* object = this; - SPObjectGroup::build(doc, repr); - object->readAttr( "maskUnits" ); - object->readAttr( "maskContentUnits" ); + this->readAttr( "maskUnits" ); + this->readAttr( "maskContentUnits" ); /* Register ourselves */ - doc->addResource("mask", object); + doc->addResource("mask", this); } void SPMask::release() { - SPMask* object = this; - - if (object->document) { + if (this->document) { // Unregister ourselves - object->document->removeResource("mask", object); + this->document->removeResource("mask", this); } - SPMask *cp = SP_MASK (object); - while (cp->display) { + while (this->display) { // We simply unref and let item manage this in handler - cp->display = sp_mask_view_list_remove (cp->display, cp->display); + this->display = sp_mask_view_list_remove(this->display, this->display); } SPObjectGroup::release(); } void SPMask::set(unsigned int key, const gchar* value) { - SPMask* object = this; - - SPMask *mask = SP_MASK (object); - switch (key) { case SP_ATTR_MASKUNITS: - mask->maskUnits = SP_CONTENT_UNITS_OBJECTBOUNDINGBOX; - mask->maskUnits_set = FALSE; + this->maskUnits = SP_CONTENT_UNITS_OBJECTBOUNDINGBOX; + this->maskUnits_set = FALSE; + if (value) { if (!strcmp (value, "userSpaceOnUse")) { - mask->maskUnits = SP_CONTENT_UNITS_USERSPACEONUSE; - mask->maskUnits_set = TRUE; + this->maskUnits = SP_CONTENT_UNITS_USERSPACEONUSE; + this->maskUnits_set = TRUE; } else if (!strcmp (value, "objectBoundingBox")) { - mask->maskUnits_set = TRUE; + this->maskUnits_set = TRUE; } } - object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); + + this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); break; case SP_ATTR_MASKCONTENTUNITS: - mask->maskContentUnits = SP_CONTENT_UNITS_USERSPACEONUSE; - mask->maskContentUnits_set = FALSE; + this->maskContentUnits = SP_CONTENT_UNITS_USERSPACEONUSE; + this->maskContentUnits_set = FALSE; + if (value) { if (!strcmp (value, "userSpaceOnUse")) { - mask->maskContentUnits_set = TRUE; + this->maskContentUnits_set = TRUE; } else if (!strcmp (value, "objectBoundingBox")) { - mask->maskContentUnits = SP_CONTENT_UNITS_OBJECTBOUNDINGBOX; - mask->maskContentUnits_set = TRUE; + this->maskContentUnits = SP_CONTENT_UNITS_OBJECTBOUNDINGBOX; + this->maskContentUnits_set = TRUE; } } - object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); + + this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); break; default: SPObjectGroup::set(key, value); @@ -128,19 +123,16 @@ void SPMask::set(unsigned int key, const gchar* value) { } void SPMask::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { - SPMask* object = this; - /* Invoke SPObjectGroup implementation */ SPObjectGroup::child_added(child, ref); /* Show new object */ - SPObject *ochild = object->document->getObjectByRepr(child); + SPObject *ochild = this->document->getObjectByRepr(child); + if (SP_IS_ITEM (ochild)) { - SPMask *cp = SP_MASK (object); - for (SPMaskView *v = cp->display; v != NULL; v = v->next) { - Inkscape::DrawingItem *ac = SP_ITEM (ochild)->invoke_show ( v->arenaitem->drawing(), - v->key, - SP_ITEM_REFERENCE_FLAGS); + for (SPMaskView *v = this->display; v != NULL; v = v->next) { + Inkscape::DrawingItem *ac = SP_ITEM (ochild)->invoke_show(v->arenaitem->drawing(), v->key, SP_ITEM_REFERENCE_FLAGS); + if (ac) { v->arenaitem->prependChild(ac); } @@ -150,34 +142,35 @@ void SPMask::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { void SPMask::update(SPCtx* ctx, unsigned int flags) { - SPMask* object = this; - if (flags & SP_OBJECT_MODIFIED_FLAG) { flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; } flags &= SP_OBJECT_MODIFIED_CASCADE; - SPObjectGroup *og = SP_OBJECTGROUP(object); GSList *l = NULL; - for (SPObject *child = og->firstChild(); child; child = child->getNext()) { + for (SPObject *child = this->firstChild(); child; child = child->getNext()) { sp_object_ref(child); l = g_slist_prepend (l, child); } + l = g_slist_reverse (l); + 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))) { child->updateDisplay(ctx, flags); } + sp_object_unref(child); } - SPMask *mask = SP_MASK(object); - for (SPMaskView *v = mask->display; v != NULL; v = v->next) { + for (SPMaskView *v = this->display; v != NULL; v = v->next) { Inkscape::DrawingGroup *g = dynamic_cast(v->arenaitem); - if (mask->maskContentUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX && v->bbox) { + + if (this->maskContentUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX && v->bbox) { Geom::Affine t = Geom::Scale(v->bbox->dimensions()); t.setTranslation(v->bbox->min()); g->setChildTransform(t); @@ -188,27 +181,28 @@ void SPMask::update(SPCtx* ctx, unsigned int flags) { } void SPMask::modified(unsigned int flags) { - SPMask* object = this; - if (flags & SP_OBJECT_MODIFIED_FLAG) { flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; } flags &= SP_OBJECT_MODIFIED_CASCADE; - SPObjectGroup *og = SP_OBJECTGROUP(object); GSList *l = NULL; - for (SPObject *child = og->firstChild(); child; child = child->getNext()) { + for (SPObject *child = this->firstChild(); child; child = child->getNext()) { sp_object_ref(child); l = g_slist_prepend(l, child); } + l = g_slist_reverse(l); + while (l) { SPObject *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); } } @@ -255,47 +249,46 @@ sp_mask_create (GSList *reprs, SPDocument *document, Geom::Affine const* applyTr return mask_id; } -Inkscape::DrawingItem *sp_mask_show(SPMask *mask, Inkscape::Drawing &drawing, unsigned int key) -{ - g_return_val_if_fail (mask != NULL, NULL); - g_return_val_if_fail (SP_IS_MASK (mask), NULL); +Inkscape::DrawingItem *SPMask::sp_mask_show(Inkscape::Drawing &drawing, unsigned int key) { + g_return_val_if_fail (this != NULL, NULL); + g_return_val_if_fail (SP_IS_MASK (this), NULL); Inkscape::DrawingGroup *ai = new Inkscape::DrawingGroup(drawing); - mask->display = sp_mask_view_new_prepend (mask->display, key, ai); + this->display = sp_mask_view_new_prepend (this->display, key, ai); - for ( SPObject *child = mask->firstChild() ; child; child = child->getNext() ) { + for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { if (SP_IS_ITEM (child)) { Inkscape::DrawingItem *ac = SP_ITEM (child)->invoke_show (drawing, key, SP_ITEM_REFERENCE_FLAGS); + if (ac) { ai->prependChild(ac); } } } - if (mask->maskContentUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX && mask->display->bbox) { - Geom::Affine t = Geom::Scale(mask->display->bbox->dimensions()); - t.setTranslation(mask->display->bbox->min()); + if (this->maskContentUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX && this->display->bbox) { + Geom::Affine t = Geom::Scale(this->display->bbox->dimensions()); + t.setTranslation(this->display->bbox->min()); ai->setChildTransform(t); } return ai; } -void sp_mask_hide(SPMask *cp, unsigned int key) -{ - g_return_if_fail (cp != NULL); - g_return_if_fail (SP_IS_MASK (cp)); +void SPMask::sp_mask_hide(unsigned int key) { + g_return_if_fail (this != NULL); + g_return_if_fail (SP_IS_MASK (this)); - for ( SPObject *child = cp->firstChild(); child; child = child->getNext()) { + for ( SPObject *child = this->firstChild(); child; child = child->getNext()) { if (SP_IS_ITEM (child)) { SP_ITEM(child)->invoke_hide (key); } } - for (SPMaskView *v = cp->display; v != NULL; v = v->next) { + for (SPMaskView *v = this->display; v != NULL; v = v->next) { if (v->key == key) { /* We simply unref and let item to manage this in handler */ - cp->display = sp_mask_view_list_remove (cp->display, v); + this->display = sp_mask_view_list_remove (this->display, v); return; } } @@ -303,10 +296,8 @@ void sp_mask_hide(SPMask *cp, unsigned int key) g_assert_not_reached (); } -void -sp_mask_set_bbox (SPMask *mask, unsigned int key, Geom::OptRect const &bbox) -{ - for (SPMaskView *v = mask->display; v != NULL; v = v->next) { +void SPMask::sp_mask_set_bbox(unsigned int key, Geom::OptRect const &bbox) { + for (SPMaskView *v = this->display; v != NULL; v = v->next) { if (v->key == key) { v->bbox = bbox; break; -- cgit v1.2.3