diff options
| author | Markus Engel <markus.engel@tum.de> | 2012-08-21 13:44:00 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2012-08-21 13:44:00 +0000 |
| commit | 2cc1782f12955a7145318a492b28c13f3492b430 (patch) | |
| tree | bbdcbeebc16a87d92a0169cd7338c58b9056da0e /src/sp-mask.cpp | |
| parent | Added "virtual pad" to SPClipPath. (diff) | |
| download | inkscape-2cc1782f12955a7145318a492b28c13f3492b430.tar.gz inkscape-2cc1782f12955a7145318a492b28c13f3492b430.zip | |
Added "virtual pad" to SPMask.
(bzr r11608.1.39)
Diffstat (limited to 'src/sp-mask.cpp')
| -rw-r--r-- | src/sp-mask.cpp | 96 |
1 files changed, 72 insertions, 24 deletions
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 <defs> 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); |
