diff options
| author | Markus Engel <markus.engel@tum.de> | 2012-08-21 00:54:06 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2012-08-21 00:54:06 +0000 |
| commit | 62fbbefccbe10ec11e727735e6bfe890003b0af2 (patch) | |
| tree | 1741dcb7c61f75230ba00489ee2d9f3c0d11692f /src/sp-pattern.cpp | |
| parent | Added "virtual pad" to SPScript. (diff) | |
| download | inkscape-62fbbefccbe10ec11e727735e6bfe890003b0af2.tar.gz inkscape-62fbbefccbe10ec11e727735e6bfe890003b0af2.zip | |
Added "virtual pad" to
- SPPaintServer
- SPPattern
- SPGradient
- SPStop
- SPLinearGradient
- SPMeshGradient
- SPMeshPatch
- SPMeshRow
- SPRadialGradient
As all subclasses of SPPaintServer now have "virtual pads" with correct inheritance, the virtual function call to "onCreatePattern" was converted to C++ style.
(bzr r11608.1.35)
Diffstat (limited to 'src/sp-pattern.cpp')
| -rw-r--r-- | src/sp-pattern.cpp | 91 |
1 files changed, 67 insertions, 24 deletions
diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index 03afc1bf3..5e55cbe34 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -101,9 +101,20 @@ sp_pattern_class_init (SPPatternClass *klass) ps_class->pattern_new = sp_pattern_create_pattern; } +CPattern::CPattern(SPPattern* pattern) : CPaintServer(pattern) { + this->sppattern = pattern; +} + +CPattern::~CPattern() { +} + static void sp_pattern_init (SPPattern *pat) { + pat->cpattern = new CPattern(pat); + pat->cpaintserver = pat->cpattern; + pat->cobject = pat->cpattern; + pat->ref = new SPPatternReference(pat); pat->ref->changedSignal().connect(sigc::bind(sigc::ptr_fun(pattern_ref_changed), pat)); @@ -126,11 +137,10 @@ sp_pattern_init (SPPattern *pat) new (&pat->modified_connection) sigc::connection(); } -static void -sp_pattern_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) -{ - if (((SPObjectClass *) pattern_parent_class)->build) - (* ((SPObjectClass *) pattern_parent_class)->build) (object, document, repr); +void CPattern::onBuild(SPDocument* doc, Inkscape::XML::Node* repr) { + SPPattern* object = this->sppattern; + + CPaintServer::onBuild(doc, repr); object->readAttr( "patternUnits" ); object->readAttr( "patternContentUnits" ); @@ -143,11 +153,18 @@ sp_pattern_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *r object->readAttr( "xlink:href" ); /* Register ourselves */ - document->addResource("pattern", object); + doc->addResource("pattern", object); } -static void sp_pattern_release(SPObject *object) +static void +sp_pattern_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { + ((SPPattern*)object)->cpattern->onBuild(document, repr); +} + +void CPattern::onRelease() { + SPPattern* object = this->sppattern; + SPPattern *pat = reinterpret_cast<SPPattern *>(object); if (object->document) { @@ -164,14 +181,17 @@ static void sp_pattern_release(SPObject *object) pat->modified_connection.~connection(); - if (((SPObjectClass *) pattern_parent_class)->release) { - ((SPObjectClass *) pattern_parent_class)->release (object); - } + CPaintServer::onRelease(); } -static void -sp_pattern_set (SPObject *object, unsigned int key, const gchar *value) +static void sp_pattern_release(SPObject *object) { + ((SPPattern*)object)->cpattern->onRelease(); +} + +void CPattern::onSet(unsigned int key, const gchar* value) { + SPPattern* object = this->sppattern; + SPPattern *pat = SP_PATTERN (object); switch (key) { @@ -280,12 +300,17 @@ sp_pattern_set (SPObject *object, unsigned int key, const gchar *value) } break; default: - if (((SPObjectClass *) pattern_parent_class)->set) - ((SPObjectClass *) pattern_parent_class)->set (object, key, value); + CPaintServer::onSet(key, value); break; } } +static void +sp_pattern_set (SPObject *object, unsigned int key, const gchar *value) +{ + ((SPPattern*)object)->cpattern->onSet(key, value); +} + /* TODO: do we need a ::remove_child handler? */ /* fixme: We need ::order_changed handler too (Lauris) */ @@ -306,9 +331,9 @@ GSList *pattern_getchildren(SPPattern *pat) return l; } -static void -sp_pattern_update (SPObject *object, SPCtx *ctx, unsigned int flags) -{ +void CPattern::onUpdate(SPCtx* ctx, unsigned int flags) { + SPPattern* object = this->sppattern; + SPPattern *pat = SP_PATTERN (object); if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; @@ -329,8 +354,14 @@ sp_pattern_update (SPObject *object, SPCtx *ctx, unsigned int flags) } static void -sp_pattern_modified (SPObject *object, guint flags) +sp_pattern_update (SPObject *object, SPCtx *ctx, unsigned int flags) { + ((SPPattern*)object)->cpattern->onUpdate(ctx, flags); +} + +void CPattern::onModified(unsigned int flags) { + SPPattern* object = this->sppattern; + SPPattern *pat = SP_PATTERN (object); if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; @@ -350,6 +381,12 @@ sp_pattern_modified (SPObject *object, guint flags) } } +static void +sp_pattern_modified (SPObject *object, guint flags) +{ + ((SPPattern*)object)->cpattern->onModified(flags); +} + /** Gets called when the pattern is reattached to another <pattern> */ @@ -601,12 +638,9 @@ bool pattern_hasItemChildren (SPPattern *pat) return hasChildren; } -static cairo_pattern_t * -sp_pattern_create_pattern(SPPaintServer *ps, - cairo_t *base_ct, - Geom::OptRect const &bbox, - double opacity) -{ +cairo_pattern_t* CPattern::onCreatePattern(cairo_t *base_ct, Geom::OptRect const &bbox, double opacity) { + SPPattern* ps = this->sppattern; + SPPattern *pat = SP_PATTERN (ps); Geom::Affine ps2user; Geom::Affine vb2ps = Geom::identity(); @@ -719,6 +753,15 @@ sp_pattern_create_pattern(SPPaintServer *ps, return cp; } +static cairo_pattern_t * +sp_pattern_create_pattern(SPPaintServer *ps, + cairo_t *base_ct, + Geom::OptRect const &bbox, + double opacity) +{ + return ((SPPattern*)ps)->cpattern->onCreatePattern(base_ct, bbox, opacity); +} + /* Local Variables: mode:c++ |
