From 62fbbefccbe10ec11e727735e6bfe890003b0af2 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Tue, 21 Aug 2012 02:54:06 +0200 Subject: 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) --- src/sp-pattern.cpp | 91 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 67 insertions(+), 24 deletions(-) (limited to 'src/sp-pattern.cpp') 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(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 */ @@ -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++ -- 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-pattern.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index 5e55cbe34..729a68dfc 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -90,7 +90,7 @@ sp_pattern_class_init (SPPatternClass *klass) pattern_parent_class = (SPPaintServerClass*)g_type_class_ref (SP_TYPE_PAINT_SERVER); - sp_object_class->build = sp_pattern_build; + //sp_object_class->build = sp_pattern_build; sp_object_class->release = sp_pattern_release; sp_object_class->set = sp_pattern_set; sp_object_class->update = sp_pattern_update; -- cgit v1.2.3 From c8e0129ab4988f2fc5cb06c56ff47b38dfde143f Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 30 Mar 2013 00:46:44 +0100 Subject: Replaced calls to "pattern_new". (bzr r11608.1.54) --- src/sp-pattern.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index 729a68dfc..0c82c9bb8 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -98,7 +98,7 @@ sp_pattern_class_init (SPPatternClass *klass) // do we need _write? seems to work without it - ps_class->pattern_new = sp_pattern_create_pattern; + //ps_class->pattern_new = sp_pattern_create_pattern; } CPattern::CPattern(SPPattern* pattern) : CPaintServer(pattern) { -- 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-pattern.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index 0c82c9bb8..6a1d567dd 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -91,10 +91,10 @@ sp_pattern_class_init (SPPatternClass *klass) pattern_parent_class = (SPPaintServerClass*)g_type_class_ref (SP_TYPE_PAINT_SERVER); //sp_object_class->build = sp_pattern_build; - sp_object_class->release = sp_pattern_release; - sp_object_class->set = sp_pattern_set; - sp_object_class->update = sp_pattern_update; - sp_object_class->modified = sp_pattern_modified; +// sp_object_class->release = sp_pattern_release; +// sp_object_class->set = sp_pattern_set; +// sp_object_class->update = sp_pattern_update; +// sp_object_class->modified = sp_pattern_modified; // do we need _write? seems to work without it -- 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-pattern.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index 16528e129..46e1978d3 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -88,10 +88,10 @@ sp_pattern_init (SPPattern *pat) new (&pat->modified_connection) sigc::connection(); } -void CPattern::onBuild(SPDocument* doc, Inkscape::XML::Node* repr) { +void CPattern::build(SPDocument* doc, Inkscape::XML::Node* repr) { SPPattern* object = this->sppattern; - CPaintServer::onBuild(doc, repr); + CPaintServer::build(doc, repr); object->readAttr( "patternUnits" ); object->readAttr( "patternContentUnits" ); @@ -107,7 +107,7 @@ void CPattern::onBuild(SPDocument* doc, Inkscape::XML::Node* repr) { doc->addResource("pattern", object); } -void CPattern::onRelease() { +void CPattern::release() { SPPattern* object = this->sppattern; SPPattern *pat = reinterpret_cast(object); @@ -126,10 +126,10 @@ void CPattern::onRelease() { pat->modified_connection.~connection(); - CPaintServer::onRelease(); + CPaintServer::release(); } -void CPattern::onSet(unsigned int key, const gchar* value) { +void CPattern::set(unsigned int key, const gchar* value) { SPPattern* object = this->sppattern; SPPattern *pat = SP_PATTERN (object); @@ -240,7 +240,7 @@ void CPattern::onSet(unsigned int key, const gchar* value) { } break; default: - CPaintServer::onSet(key, value); + CPaintServer::set(key, value); break; } } @@ -266,7 +266,7 @@ static GSList *pattern_getchildren(SPPattern *pat) return l; } -void CPattern::onUpdate(SPCtx* ctx, unsigned int flags) { +void CPattern::update(SPCtx* ctx, unsigned int flags) { SPPattern* object = this->sppattern; SPPattern *pat = SP_PATTERN (object); @@ -288,7 +288,7 @@ void CPattern::onUpdate(SPCtx* ctx, unsigned int flags) { } } -void CPattern::onModified(unsigned int flags) { +void CPattern::modified(unsigned int flags) { SPPattern* object = this->sppattern; SPPattern *pat = SP_PATTERN (object); @@ -561,7 +561,7 @@ static bool pattern_hasItemChildren (SPPattern const *pat) return hasChildren; } -cairo_pattern_t* CPattern::onCreatePattern(cairo_t *base_ct, Geom::OptRect const &bbox, double opacity) { +cairo_pattern_t* CPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &bbox, double opacity) { SPPattern* ps = this->sppattern; SPPattern *pat = SP_PATTERN (ps); -- 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-pattern.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index 46e1978d3..f04ba3f0a 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -61,6 +61,7 @@ static void sp_pattern_init (SPPattern *pat) { pat->cpattern = new CPattern(pat); + pat->typeHierarchy.insert(typeid(SPPattern)); delete pat->cpaintserver; pat->cpaintserver = pat->cpattern; -- 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-pattern.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index f04ba3f0a..a9b8ae2ed 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -43,7 +43,7 @@ static void pattern_ref_changed(SPObject *old_ref, SPObject *ref, SPPattern *pat); static void pattern_ref_modified (SPObject *ref, guint flags, SPPattern *pattern); -G_DEFINE_TYPE(SPPattern, sp_pattern, SP_TYPE_PAINT_SERVER); +G_DEFINE_TYPE(SPPattern, sp_pattern, G_TYPE_OBJECT); static void sp_pattern_class_init (SPPatternClass *klass) @@ -57,9 +57,9 @@ CPattern::CPattern(SPPattern* pattern) : CPaintServer(pattern) { CPattern::~CPattern() { } -static void -sp_pattern_init (SPPattern *pat) -{ +SPPattern::SPPattern() : SPPaintServer() { + SPPattern* pat = this; + pat->cpattern = new CPattern(pat); pat->typeHierarchy.insert(typeid(SPPattern)); @@ -67,6 +67,8 @@ sp_pattern_init (SPPattern *pat) pat->cpaintserver = pat->cpattern; pat->cobject = pat->cpattern; + pat->href = NULL; + pat->ref = new SPPatternReference(pat); pat->ref->changedSignal().connect(sigc::bind(sigc::ptr_fun(pattern_ref_changed), pat)); @@ -89,6 +91,12 @@ sp_pattern_init (SPPattern *pat) new (&pat->modified_connection) sigc::connection(); } +static void +sp_pattern_init (SPPattern *pat) +{ + new (pat) SPPattern(); +} + void CPattern::build(SPDocument* doc, Inkscape::XML::Node* repr) { SPPattern* object = this->sppattern; -- 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-pattern.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index a9b8ae2ed..e4132ac1d 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -43,6 +43,16 @@ static void pattern_ref_changed(SPObject *old_ref, SPObject *ref, SPPattern *pat); static void pattern_ref_modified (SPObject *ref, guint flags, SPPattern *pattern); +#include "sp-factory.h" + +namespace { + SPObject* createPattern() { + return new SPPattern(); + } + + bool patternRegistered = SPFactory::instance().registerObject("svg:pattern", createPattern); +} + G_DEFINE_TYPE(SPPattern, sp_pattern, G_TYPE_OBJECT); static void -- cgit v1.2.3 From b0cc47554b385fb68643d07efe6e42366c7121ad Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 6 Apr 2013 01:36:16 +0200 Subject: Merged PaintServer and subclasses; moved Gradient classes to own files. (bzr r11608.1.82) --- src/sp-pattern.cpp | 300 ++++++++++++++++++++++++++--------------------------- 1 file changed, 150 insertions(+), 150 deletions(-) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index e4132ac1d..27c5e9a25 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -53,161 +53,139 @@ namespace { bool patternRegistered = SPFactory::instance().registerObject("svg:pattern", createPattern); } -G_DEFINE_TYPE(SPPattern, sp_pattern, G_TYPE_OBJECT); - -static void -sp_pattern_class_init (SPPatternClass *klass) -{ -} - -CPattern::CPattern(SPPattern* pattern) : CPaintServer(pattern) { - this->sppattern = pattern; -} - -CPattern::~CPattern() { -} - SPPattern::SPPattern() : SPPaintServer() { - SPPattern* pat = this; - - pat->cpattern = new CPattern(pat); - pat->typeHierarchy.insert(typeid(SPPattern)); + this->cobject = this; - delete pat->cpaintserver; - pat->cpaintserver = pat->cpattern; - pat->cobject = pat->cpattern; + this->href = NULL; - pat->href = NULL; + this->ref = new SPPatternReference(this); + this->ref->changedSignal().connect(sigc::bind(sigc::ptr_fun(pattern_ref_changed), this)); - pat->ref = new SPPatternReference(pat); - pat->ref->changedSignal().connect(sigc::bind(sigc::ptr_fun(pattern_ref_changed), pat)); + this->patternUnits = SP_PATTERN_UNITS_OBJECTBOUNDINGBOX; + this->patternUnits_set = FALSE; - pat->patternUnits = SP_PATTERN_UNITS_OBJECTBOUNDINGBOX; - pat->patternUnits_set = FALSE; + this->patternContentUnits = SP_PATTERN_UNITS_USERSPACEONUSE; + this->patternContentUnits_set = FALSE; - pat->patternContentUnits = SP_PATTERN_UNITS_USERSPACEONUSE; - pat->patternContentUnits_set = FALSE; + this->patternTransform = Geom::identity(); + this->patternTransform_set = FALSE; - pat->patternTransform = Geom::identity(); - pat->patternTransform_set = FALSE; + this->x.unset(); + this->y.unset(); + this->width.unset(); + this->height.unset(); - pat->x.unset(); - pat->y.unset(); - pat->width.unset(); - pat->height.unset(); + this->viewBox_set = FALSE; - pat->viewBox_set = FALSE; - - new (&pat->modified_connection) sigc::connection(); + new (&this->modified_connection) sigc::connection(); } -static void -sp_pattern_init (SPPattern *pat) -{ - new (pat) SPPattern(); +SPPattern::~SPPattern() { } -void CPattern::build(SPDocument* doc, Inkscape::XML::Node* repr) { - SPPattern* object = this->sppattern; - - CPaintServer::build(doc, repr); +void SPPattern::build(SPDocument* doc, Inkscape::XML::Node* repr) { + SPPaintServer::build(doc, repr); - object->readAttr( "patternUnits" ); - object->readAttr( "patternContentUnits" ); - object->readAttr( "patternTransform" ); - object->readAttr( "x" ); - object->readAttr( "y" ); - object->readAttr( "width" ); - object->readAttr( "height" ); - object->readAttr( "viewBox" ); - object->readAttr( "xlink:href" ); + this->readAttr( "patternUnits" ); + this->readAttr( "patternContentUnits" ); + this->readAttr( "patternTransform" ); + this->readAttr( "x" ); + this->readAttr( "y" ); + this->readAttr( "width" ); + this->readAttr( "height" ); + this->readAttr( "viewBox" ); + this->readAttr( "xlink:href" ); /* Register ourselves */ - doc->addResource("pattern", object); + doc->addResource("pattern", this); } -void CPattern::release() { - SPPattern* object = this->sppattern; - - SPPattern *pat = reinterpret_cast(object); - - if (object->document) { +void SPPattern::release() { + if (this->document) { // Unregister ourselves - object->document->removeResource("pattern", object); + this->document->removeResource("pattern", this); } - if (pat->ref) { - pat->modified_connection.disconnect(); - pat->ref->detach(); - delete pat->ref; - pat->ref = NULL; + if (this->ref) { + this->modified_connection.disconnect(); + this->ref->detach(); + delete this->ref; + this->ref = NULL; } - pat->modified_connection.~connection(); + this->modified_connection.~connection(); - CPaintServer::release(); + SPPaintServer::release(); } -void CPattern::set(unsigned int key, const gchar* value) { - SPPattern* object = this->sppattern; - - SPPattern *pat = SP_PATTERN (object); - +void SPPattern::set(unsigned int key, const gchar* value) { switch (key) { case SP_ATTR_PATTERNUNITS: if (value) { if (!strcmp (value, "userSpaceOnUse")) { - pat->patternUnits = SP_PATTERN_UNITS_USERSPACEONUSE; + this->patternUnits = SP_PATTERN_UNITS_USERSPACEONUSE; } else { - pat->patternUnits = SP_PATTERN_UNITS_OBJECTBOUNDINGBOX; + this->patternUnits = SP_PATTERN_UNITS_OBJECTBOUNDINGBOX; } - pat->patternUnits_set = TRUE; + + this->patternUnits_set = TRUE; } else { - pat->patternUnits_set = FALSE; + this->patternUnits_set = FALSE; } - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; + case SP_ATTR_PATTERNCONTENTUNITS: if (value) { if (!strcmp (value, "userSpaceOnUse")) { - pat->patternContentUnits = SP_PATTERN_UNITS_USERSPACEONUSE; + this->patternContentUnits = SP_PATTERN_UNITS_USERSPACEONUSE; } else { - pat->patternContentUnits = SP_PATTERN_UNITS_OBJECTBOUNDINGBOX; + this->patternContentUnits = SP_PATTERN_UNITS_OBJECTBOUNDINGBOX; } - pat->patternContentUnits_set = TRUE; + + this->patternContentUnits_set = TRUE; } else { - pat->patternContentUnits_set = FALSE; + this->patternContentUnits_set = FALSE; } - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; + case SP_ATTR_PATTERNTRANSFORM: { Geom::Affine t; + if (value && sp_svg_transform_read (value, &t)) { - pat->patternTransform = t; - pat->patternTransform_set = TRUE; + this->patternTransform = t; + this->patternTransform_set = TRUE; } else { - pat->patternTransform = Geom::identity(); - pat->patternTransform_set = FALSE; + this->patternTransform = Geom::identity(); + this->patternTransform_set = FALSE; } - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; } case SP_ATTR_X: - pat->x.readOrUnset(value); - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->x.readOrUnset(value); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; + case SP_ATTR_Y: - pat->y.readOrUnset(value); - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->y.readOrUnset(value); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; + case SP_ATTR_WIDTH: - pat->width.readOrUnset(value); - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->width.readOrUnset(value); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; + case SP_ATTR_HEIGHT: - pat->height.readOrUnset(value); - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->height.readOrUnset(value); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; + case SP_ATTR_VIEWBOX: { /* fixme: Think (Lauris) */ double x, y, width, height; @@ -216,50 +194,69 @@ void CPattern::set(unsigned int key, const gchar* value) { if (value) { eptr = (gchar *) value; x = g_ascii_strtod (eptr, &eptr); - while (*eptr && ((*eptr == ',') || (*eptr == ' '))) eptr++; + + while (*eptr && ((*eptr == ',') || (*eptr == ' '))) { + eptr++; + } + y = g_ascii_strtod (eptr, &eptr); - while (*eptr && ((*eptr == ',') || (*eptr == ' '))) eptr++; + + while (*eptr && ((*eptr == ',') || (*eptr == ' '))) { + eptr++; + } + width = g_ascii_strtod (eptr, &eptr); - while (*eptr && ((*eptr == ',') || (*eptr == ' '))) eptr++; + + while (*eptr && ((*eptr == ',') || (*eptr == ' '))) { + eptr++; + } + height = g_ascii_strtod (eptr, &eptr); - while (*eptr && ((*eptr == ',') || (*eptr == ' '))) eptr++; + + while (*eptr && ((*eptr == ',') || (*eptr == ' '))) { + eptr++; + } + if ((width > 0) && (height > 0)) { - pat->viewBox = Geom::Rect::from_xywh(x, y, width, height); - pat->viewBox_set = TRUE; + this->viewBox = Geom::Rect::from_xywh(x, y, width, height); + this->viewBox_set = TRUE; } else { - pat->viewBox_set = FALSE; + this->viewBox_set = FALSE; } } else { - pat->viewBox_set = FALSE; + this->viewBox_set = FALSE; } - object->requestModified(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG); + + this->requestModified(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG); break; } case SP_ATTR_XLINK_HREF: - if ( value && pat->href && ( strcmp(value, pat->href) == 0 ) ) { + if ( value && this->href && ( strcmp(value, this->href) == 0 ) ) { /* Href unchanged, do nothing. */ } else { - g_free(pat->href); - pat->href = NULL; + g_free(this->href); + this->href = NULL; + if (value) { // First, set the href field; it's only used in the "unchanged" check above. - pat->href = g_strdup(value); + this->href = g_strdup(value); // Now do the attaching, which emits the changed signal. if (value) { try { - pat->ref->attach(Inkscape::URI(value)); + this->ref->attach(Inkscape::URI(value)); } catch (Inkscape::BadURIException &e) { g_warning("%s", e.what()); - pat->ref->detach(); + this->ref->detach(); } } else { - pat->ref->detach(); + this->ref->detach(); } } } break; + default: - CPaintServer::set(key, value); + SPPaintServer::set(key, value); break; } } @@ -275,56 +272,60 @@ static GSList *pattern_getchildren(SPPattern *pat) for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { if (pat_i->firstChild()) { // find the first one with children - for (SPObject *child = pat->firstChild() ; child ; child = child->getNext() ) { - l = g_slist_prepend (l, child); - } - break; // do not go further up the chain if children are found - } + for (SPObject *child = pat->firstChild() ; child ; child = child->getNext() ) { + l = g_slist_prepend (l, child); + } + break; // do not go further up the chain if children are found + } } - return l; + return l; } -void CPattern::update(SPCtx* ctx, unsigned int flags) { - SPPattern* object = this->sppattern; - - SPPattern *pat = SP_PATTERN (object); +void SPPattern::update(SPCtx* ctx, unsigned int flags) { + 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; - GSList *l = pattern_getchildren (pat); + GSList *l = pattern_getchildren (this); l = g_slist_reverse (l); while (l) { SPObject *child = SP_OBJECT (l->data); + sp_object_ref (child, NULL); l = g_slist_remove (l, child); + if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { child->updateDisplay(ctx, flags); } + sp_object_unref (child, NULL); } } -void CPattern::modified(unsigned int flags) { - SPPattern* object = this->sppattern; - - SPPattern *pat = SP_PATTERN (object); +void SPPattern::modified(unsigned int flags) { + 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; - GSList *l = pattern_getchildren (pat); + GSList *l = pattern_getchildren (this); l = g_slist_reverse (l); while (l) { SPObject *child = SP_OBJECT (l->data); + sp_object_ref (child, NULL); 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, NULL); } } @@ -338,6 +339,7 @@ pattern_ref_changed(SPObject *old_ref, SPObject *ref, SPPattern *pat) if (old_ref) { pat->modified_connection.disconnect(); } + if (SP_IS_PATTERN (ref)) { pat->modified_connection = ref->connectModified(sigc::bind<2>(sigc::ptr_fun(&pattern_ref_modified), pat)); } @@ -580,20 +582,18 @@ static bool pattern_hasItemChildren (SPPattern const *pat) return hasChildren; } -cairo_pattern_t* CPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &bbox, double opacity) { - SPPattern* ps = this->sppattern; - - SPPattern *pat = SP_PATTERN (ps); - +cairo_pattern_t* SPPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &bbox, double opacity) { bool needs_opacity = (1.0 - opacity) >= 1e-3; bool visible = opacity >= 1e-3; - if (!visible) + if (!visible) { return NULL; + } /* Show items */ SPPattern *shown = NULL; - for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { + + for (SPPattern *pat_i = this; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { // find the first one with item children if (pat_i && SP_IS_OBJECT (pat_i) && pattern_hasItemChildren(pat_i)) { shown = pat_i; @@ -623,13 +623,13 @@ cairo_pattern_t* CPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &bb // viewBox to pattern server Geom::Affine vb2ps = Geom::identity(); - if (pat->viewBox_set) { - Geom::Rect vb = *pattern_viewBox(pat); - gdouble tmp_x = pattern_width (pat) / vb.width(); - gdouble tmp_y = pattern_height (pat) / vb.height(); + if (this->viewBox_set) { + Geom::Rect vb = *pattern_viewBox(this); + gdouble tmp_x = pattern_width (this) / vb.width(); + gdouble tmp_y = pattern_height (this) / vb.height(); // FIXME: preserveAspectRatio must be taken into account here too! - vb2ps = Geom::Affine(tmp_x, 0.0, 0.0, tmp_y, pattern_x(pat) - vb.left() * tmp_x, pattern_y(pat) - vb.top() * tmp_y); + vb2ps = Geom::Affine(tmp_x, 0.0, 0.0, tmp_y, pattern_x(this) - vb.left() * tmp_x, pattern_y(this) - vb.top() * tmp_y); } // We must determine the size and scaling of the pattern at the time it is displayed and render @@ -637,19 +637,19 @@ cairo_pattern_t* CPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &bb // Pattern server to user Geom::Affine ps2user; - ps2user = pattern_patternTransform(pat); - if (!pat->viewBox_set && pattern_patternContentUnits (pat) == SP_PATTERN_UNITS_OBJECTBOUNDINGBOX) { + ps2user = pattern_patternTransform(this); + if (!this->viewBox_set && pattern_patternContentUnits (this) == SP_PATTERN_UNITS_OBJECTBOUNDINGBOX) { /* BBox to user coordinate system */ Geom::Affine bbox2user (bbox->width(), 0.0, 0.0, bbox->height(), bbox->left(), bbox->top()); ps2user *= bbox2user; } - ps2user = Geom::Translate (pattern_x (pat), pattern_y (pat)) * ps2user; + ps2user = Geom::Translate (pattern_x (this), pattern_y (this)) * ps2user; // Pattern size in pattern space - Geom::Rect pattern_tile = Geom::Rect::from_xywh(pattern_x(pat), pattern_y(pat), - pattern_width(pat), pattern_height(pat)); + Geom::Rect pattern_tile = Geom::Rect::from_xywh(pattern_x(this), pattern_y(this), + pattern_width(this), pattern_height(this)); - if (pattern_patternUnits(pat) == SP_PATTERN_UNITS_OBJECTBOUNDINGBOX) { + if (pattern_patternUnits(this) == SP_PATTERN_UNITS_OBJECTBOUNDINGBOX) { // interpret x, y, width, height in relation to bbox Geom::Affine bbox2user(bbox->width(), 0.0, 0.0, bbox->height(), bbox->left(), bbox->top()); pattern_tile = pattern_tile * bbox2user; -- 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-pattern.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index 27c5e9a25..e88bd2886 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -54,8 +54,6 @@ namespace { } SPPattern::SPPattern() : SPPaintServer() { - this->cobject = this; - this->href = NULL; this->ref = new SPPatternReference(this); -- 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-pattern.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index 34063cb16..1aec904ae 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -75,7 +75,7 @@ SPPattern::SPPattern() : SPPaintServer() { this->viewBox_set = FALSE; - new (&this->modified_connection) sigc::connection(); + //new (&this->modified_connection) sigc::connection(); } SPPattern::~SPPattern() { @@ -111,7 +111,7 @@ void SPPattern::release() { this->ref = NULL; } - this->modified_connection.~connection(); + //this->modified_connection.~connection(); SPPaintServer::release(); } -- 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-pattern.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'src/sp-pattern.cpp') diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index 1aec904ae..408a57195 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -74,8 +74,6 @@ SPPattern::SPPattern() : SPPaintServer() { this->height.unset(); this->viewBox_set = FALSE; - - //new (&this->modified_connection) sigc::connection(); } SPPattern::~SPPattern() { @@ -111,8 +109,6 @@ void SPPattern::release() { this->ref = NULL; } - //this->modified_connection.~connection(); - SPPaintServer::release(); } -- cgit v1.2.3