diff options
| author | Markus Engel <markus.engel@tum.de> | 2013-07-31 20:51:23 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2013-07-31 20:51:23 +0000 |
| commit | beecbea1b415d5b9536f2309c4f30fc258e346f5 (patch) | |
| tree | c7e2df507bb1f06e8bdf237f07c3fd4e5bc2fcce /src/filters | |
| parent | Fixed SPObject ctor and dtor; removed singleton.h; some smaller changes. (diff) | |
| download | inkscape-beecbea1b415d5b9536f2309c4f30fc258e346f5.tar.gz inkscape-beecbea1b415d5b9536f2309c4f30fc258e346f5.zip | |
Cleaned up a bit; fixed struct vs. class forward declarations.
(bzr r11608.1.111)
Diffstat (limited to 'src/filters')
| -rw-r--r-- | src/filters/componenttransfer-funcnode.cpp | 131 | ||||
| -rw-r--r-- | src/filters/componenttransfer-funcnode.h | 1 | ||||
| -rw-r--r-- | src/filters/distantlight.cpp | 90 | ||||
| -rw-r--r-- | src/filters/distantlight.h | 1 | ||||
| -rw-r--r-- | src/filters/mergenode.cpp | 29 | ||||
| -rw-r--r-- | src/filters/mergenode.h | 1 | ||||
| -rw-r--r-- | src/filters/pointlight.cpp | 119 | ||||
| -rw-r--r-- | src/filters/pointlight.h | 1 | ||||
| -rw-r--r-- | src/filters/spotlight.cpp | 296 | ||||
| -rw-r--r-- | src/filters/spotlight.h | 1 |
10 files changed, 330 insertions, 340 deletions
diff --git a/src/filters/componenttransfer-funcnode.cpp b/src/filters/componenttransfer-funcnode.cpp index 8b5a8a3ab..7c5191700 100644 --- a/src/filters/componenttransfer-funcnode.cpp +++ b/src/filters/componenttransfer-funcnode.cpp @@ -31,14 +31,9 @@ #include "macros.h" /* FeFuncNode class */ -SPFeFuncNode::SPFeFuncNode() : SPObject() { - this->type = Inkscape::Filters::COMPONENTTRANSFER_TYPE_IDENTITY; - //this->tableValues = NULL; - this->slope = 1; - this->intercept = 0; - this->amplitude = 1; - this->exponent = 1; - this->offset = 0; +SPFeFuncNode::SPFeFuncNode() + : SPObject(), type(Inkscape::Filters::COMPONENTTRANSFER_TYPE_IDENTITY), + slope(1), intercept(0), amplitude(1), exponent(1), offset(0) { } SPFeFuncNode::~SPFeFuncNode() { @@ -52,56 +47,65 @@ SPFeFuncNode::~SPFeFuncNode() { void SPFeFuncNode::build(SPDocument *document, Inkscape::XML::Node *repr) { SPObject::build(document, repr); - SPFeFuncNode* object = this; - //Read values of key attributes from XML nodes into object. - object->readAttr( "type" ); - object->readAttr( "tableValues" ); - object->readAttr( "slope" ); - object->readAttr( "intercept" ); - object->readAttr( "amplitude" ); - object->readAttr( "exponent" ); - object->readAttr( "offset" ); + this->readAttr( "type" ); + this->readAttr( "tableValues" ); + this->readAttr( "slope" ); + this->readAttr( "intercept" ); + this->readAttr( "amplitude" ); + this->readAttr( "exponent" ); + this->readAttr( "offset" ); //is this necessary? - document->addResource("fefuncnode", object); //maybe feFuncR, fefuncG, feFuncB and fefuncA ? + document->addResource("fefuncnode", this); //maybe feFuncR, fefuncG, feFuncB and fefuncA ? } /** * Drops any allocated memory. */ void SPFeFuncNode::release() { - SPFeFuncNode* object = this; - //SPFeFuncNode *fefuncnode = SP_FEFUNCNODE(object); - - if ( object->document ) { + if ( this->document ) { // Unregister ourselves - object->document->removeResource("fefuncnode", object); + this->document->removeResource("fefuncnode", this); } //TODO: release resources here } static Inkscape::Filters::FilterComponentTransferType sp_feComponenttransfer_read_type(gchar const *value){ - if (!value) return Inkscape::Filters::COMPONENTTRANSFER_TYPE_ERROR; //type attribute is REQUIRED. + if (!value) { + return Inkscape::Filters::COMPONENTTRANSFER_TYPE_ERROR; //type attribute is REQUIRED. + } + switch(value[0]){ case 'i': - if (strncmp(value, "identity", 8) == 0) return Inkscape::Filters::COMPONENTTRANSFER_TYPE_IDENTITY; + if (strncmp(value, "identity", 8) == 0) { + return Inkscape::Filters::COMPONENTTRANSFER_TYPE_IDENTITY; + } break; case 't': - if (strncmp(value, "table", 5) == 0) return Inkscape::Filters::COMPONENTTRANSFER_TYPE_TABLE; + if (strncmp(value, "table", 5) == 0) { + return Inkscape::Filters::COMPONENTTRANSFER_TYPE_TABLE; + } break; case 'd': - if (strncmp(value, "discrete", 8) == 0) return Inkscape::Filters::COMPONENTTRANSFER_TYPE_DISCRETE; + if (strncmp(value, "discrete", 8) == 0) { + return Inkscape::Filters::COMPONENTTRANSFER_TYPE_DISCRETE; + } break; case 'l': - if (strncmp(value, "linear", 6) == 0) return Inkscape::Filters::COMPONENTTRANSFER_TYPE_LINEAR; + if (strncmp(value, "linear", 6) == 0) { + return Inkscape::Filters::COMPONENTTRANSFER_TYPE_LINEAR; + } break; case 'g': - if (strncmp(value, "gamma", 5) == 0) return Inkscape::Filters::COMPONENTTRANSFER_TYPE_GAMMA; + if (strncmp(value, "gamma", 5) == 0) { + return Inkscape::Filters::COMPONENTTRANSFER_TYPE_GAMMA; + } break; } + return Inkscape::Filters::COMPONENTTRANSFER_TYPE_ERROR; //type attribute is REQUIRED. } @@ -109,63 +113,65 @@ static Inkscape::Filters::FilterComponentTransferType sp_feComponenttransfer_rea * Sets a specific value in the SPFeFuncNode. */ void SPFeFuncNode::set(unsigned int key, gchar const *value) { - SPFeFuncNode* object = this; - - SPFeFuncNode *feFuncNode = SP_FEFUNCNODE(object); Inkscape::Filters::FilterComponentTransferType type; double read_num; + switch(key) { case SP_ATTR_TYPE: type = sp_feComponenttransfer_read_type(value); - if(type != feFuncNode->type) { - feFuncNode->type = type; - object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if(type != this->type) { + this->type = type; + this->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_TABLEVALUES: if (value){ - feFuncNode->tableValues = helperfns_read_vector(value); - object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->tableValues = helperfns_read_vector(value); + this->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_SLOPE: read_num = value ? helperfns_read_number(value) : 1; - if (read_num != feFuncNode->slope) { - feFuncNode->slope = read_num; - object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (read_num != this->slope) { + this->slope = read_num; + this->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_INTERCEPT: read_num = value ? helperfns_read_number(value) : 0; - if (read_num != feFuncNode->intercept) { - feFuncNode->intercept = read_num; - object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (read_num != this->intercept) { + this->intercept = read_num; + this->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_AMPLITUDE: read_num = value ? helperfns_read_number(value) : 1; - if (read_num != feFuncNode->amplitude) { - feFuncNode->amplitude = read_num; - object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (read_num != this->amplitude) { + this->amplitude = read_num; + this->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_EXPONENT: read_num = value ? helperfns_read_number(value) : 1; - if (read_num != feFuncNode->exponent) { - feFuncNode->exponent = read_num; - object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (read_num != this->exponent) { + this->exponent = read_num; + this->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_OFFSET: read_num = value ? helperfns_read_number(value) : 0; - if (read_num != feFuncNode->offset) { - feFuncNode->offset = read_num; - object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (read_num != this->offset) { + this->offset = read_num; + this->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; default: -// if (((SPObjectClass *) feFuncNode_parent_class)->set) -// ((SPObjectClass *) feFuncNode_parent_class)->set(object, key, value); SPObject::set(key, value); break; } @@ -175,16 +181,11 @@ void SPFeFuncNode::set(unsigned int key, gchar const *value) { * * Receives update notifications. * */ void SPFeFuncNode::update(SPCtx *ctx, guint flags) { - SPFeFuncNode* object = this; - - SPFeFuncNode *feFuncNode = SP_FEFUNCNODE(object); - (void)feFuncNode; - if (flags & SP_OBJECT_MODIFIED_FLAG) { /* do something to trigger redisplay, updates? */ //TODO - //object->readAttr( "azimuth" ); - //object->readAttr( "elevation" ); + //this->readAttr( "azimuth" ); + //this->readAttr( "elevation" ); } SPObject::update(ctx, flags); @@ -194,16 +195,12 @@ void SPFeFuncNode::update(SPCtx *ctx, guint flags) { * Writes its settings to an incoming repr object, if any. */ Inkscape::XML::Node* SPFeFuncNode::write(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) { - SPFeFuncNode* object = this; - SPFeFuncNode *fefuncnode = SP_FEFUNCNODE(object); - if (!repr) { - repr = object->getRepr()->duplicate(doc); + repr = this->getRepr()->duplicate(doc); } - (void)fefuncnode; /* -TODO: I'm not sure what to do here... + TODO: I'm not sure what to do here... if (fefuncnode->azimuth_set) sp_repr_set_css_double(repr, "azimuth", fefuncnode->azimuth); diff --git a/src/filters/componenttransfer-funcnode.h b/src/filters/componenttransfer-funcnode.h index deed46839..873baa196 100644 --- a/src/filters/componenttransfer-funcnode.h +++ b/src/filters/componenttransfer-funcnode.h @@ -54,6 +54,7 @@ public: double exponent; double offset; +protected: virtual void build(SPDocument* doc, Inkscape::XML::Node* repr); virtual void release(); diff --git a/src/filters/distantlight.cpp b/src/filters/distantlight.cpp index 763ddbe7a..8b6ef023b 100644 --- a/src/filters/distantlight.cpp +++ b/src/filters/distantlight.cpp @@ -29,11 +29,8 @@ #define SP_MACROS_SILENT #include "macros.h" -SPFeDistantLight::SPFeDistantLight() : SPObject() { - this->azimuth = 0; - this->elevation = 0; - this->azimuth_set = FALSE; - this->elevation_set = FALSE; +SPFeDistantLight::SPFeDistantLight() + : SPObject(), azimuth(0), azimuth_set(FALSE), elevation(0), elevation_set(FALSE) { } SPFeDistantLight::~SPFeDistantLight() { @@ -47,27 +44,21 @@ SPFeDistantLight::~SPFeDistantLight() { void SPFeDistantLight::build(SPDocument *document, Inkscape::XML::Node *repr) { SPObject::build(document, repr); - SPFeDistantLight* object = this; - //Read values of key attributes from XML nodes into object. - object->readAttr( "azimuth" ); - object->readAttr( "elevation" ); + this->readAttr( "azimuth" ); + this->readAttr( "elevation" ); //is this necessary? - document->addResource("fedistantlight", object); + document->addResource("fedistantlight", this); } /** * Drops any allocated memory. */ void SPFeDistantLight::release() { - SPFeDistantLight* object = this; - - //SPFeDistantLight *fedistantlight = SP_FEDISTANTLIGHT(object); - - if ( object->document ) { + if ( this->document ) { // Unregister ourselves - object->document->removeResource("fedistantlight", object); + this->document->removeResource("fedistantlight", this); } //TODO: release resources here @@ -77,44 +68,51 @@ void SPFeDistantLight::release() { * Sets a specific value in the SPFeDistantLight. */ void SPFeDistantLight::set(unsigned int key, gchar const *value) { - SPFeDistantLight* object = this; - SPFeDistantLight *fedistantlight = SP_FEDISTANTLIGHT(object); gchar *end_ptr; + switch (key) { case SP_ATTR_AZIMUTH: end_ptr =NULL; + if (value) { - fedistantlight->azimuth = g_ascii_strtod(value, &end_ptr); + this->azimuth = g_ascii_strtod(value, &end_ptr); + if (end_ptr) { - fedistantlight->azimuth_set = TRUE; + this->azimuth_set = TRUE; } } + if (!value || !end_ptr) { - fedistantlight->azimuth_set = FALSE; - fedistantlight->azimuth = 0; + this->azimuth_set = FALSE; + this->azimuth = 0; } - if (object->parent && - (SP_IS_FEDIFFUSELIGHTING(object->parent) || - SP_IS_FESPECULARLIGHTING(object->parent))) { - object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (this->parent && + (SP_IS_FEDIFFUSELIGHTING(this->parent) || + SP_IS_FESPECULARLIGHTING(this->parent))) { + this->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_ELEVATION: end_ptr =NULL; + if (value) { - fedistantlight->elevation = g_ascii_strtod(value, &end_ptr); + this->elevation = g_ascii_strtod(value, &end_ptr); + if (end_ptr) { - fedistantlight->elevation_set = TRUE; + this->elevation_set = TRUE; } } + if (!value || !end_ptr) { - fedistantlight->elevation_set = FALSE; - fedistantlight->elevation = 0; + this->elevation_set = FALSE; + this->elevation = 0; } - if (object->parent && - (SP_IS_FEDIFFUSELIGHTING(object->parent) || - SP_IS_FESPECULARLIGHTING(object->parent))) { - object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (this->parent && + (SP_IS_FEDIFFUSELIGHTING(this->parent) || + SP_IS_FESPECULARLIGHTING(this->parent))) { + this->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; default: @@ -128,14 +126,10 @@ void SPFeDistantLight::set(unsigned int key, gchar const *value) { * * Receives update notifications. * */ void SPFeDistantLight::update(SPCtx *ctx, guint flags) { - SPFeDistantLight* object = this; - SPFeDistantLight *feDistantLight = SP_FEDISTANTLIGHT(object); - (void)feDistantLight; - if (flags & SP_OBJECT_MODIFIED_FLAG) { /* do something to trigger redisplay, updates? */ - object->readAttr( "azimuth" ); - object->readAttr( "elevation" ); + this->readAttr( "azimuth" ); + this->readAttr( "elevation" ); } SPObject::update(ctx, flags); @@ -145,17 +139,17 @@ void SPFeDistantLight::update(SPCtx *ctx, guint flags) { * Writes its settings to an incoming repr object, if any. */ Inkscape::XML::Node* SPFeDistantLight::write(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) { - SPFeDistantLight* object = this; - SPFeDistantLight *fedistantlight = SP_FEDISTANTLIGHT(object); - if (!repr) { - repr = object->getRepr()->duplicate(doc); + repr = this->getRepr()->duplicate(doc); + } + + if (this->azimuth_set) { + sp_repr_set_css_double(repr, "azimuth", this->azimuth); } - if (fedistantlight->azimuth_set) - sp_repr_set_css_double(repr, "azimuth", fedistantlight->azimuth); - if (fedistantlight->elevation_set) - sp_repr_set_css_double(repr, "elevation", fedistantlight->elevation); + if (this->elevation_set) { + sp_repr_set_css_double(repr, "elevation", this->elevation); + } SPObject::write(doc, repr, flags); diff --git a/src/filters/distantlight.h b/src/filters/distantlight.h index b808eb279..ad9c8f53c 100644 --- a/src/filters/distantlight.h +++ b/src/filters/distantlight.h @@ -33,6 +33,7 @@ public: gfloat elevation; guint elevation_set : 1; +protected: virtual void build(SPDocument* doc, Inkscape::XML::Node* repr); virtual void release(); diff --git a/src/filters/mergenode.cpp b/src/filters/mergenode.cpp index e356ac771..1b06db706 100644 --- a/src/filters/mergenode.cpp +++ b/src/filters/mergenode.cpp @@ -33,8 +33,8 @@ namespace { bool mergeNodeRegistered = SPFactory::instance().registerObject("svg:feMergeNode", createMergeNode); } -SPFeMergeNode::SPFeMergeNode() : SPObject() { - this->input = Inkscape::Filters::NR_FILTER_SLOT_NOT_SET; +SPFeMergeNode::SPFeMergeNode() + : SPObject(), input(Inkscape::Filters::NR_FILTER_SLOT_NOT_SET) { } SPFeMergeNode::~SPFeMergeNode() { @@ -46,8 +46,7 @@ SPFeMergeNode::~SPFeMergeNode() { * sp-object-repr.cpp's repr_name_entries array. */ void SPFeMergeNode::build(SPDocument *document, Inkscape::XML::Node *repr) { - SPFeMergeNode* object = this; - object->readAttr( "in" ); + this->readAttr( "in" ); } /** @@ -61,15 +60,13 @@ void SPFeMergeNode::release() { * Sets a specific value in the SPFeMergeNode. */ void SPFeMergeNode::set(unsigned int key, gchar const *value) { - SPFeMergeNode* object = this; - SPFeMergeNode *feMergeNode = SP_FEMERGENODE(object); - SPFeMerge *parent = SP_FEMERGE(object->parent); + SPFeMerge *parent = SP_FEMERGE(this->parent); if (key == SP_ATTR_IN) { int input = sp_filter_primitive_read_in(parent, value); - if (input != feMergeNode->input) { - feMergeNode->input = input; - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + if (input != this->input) { + this->input = input; + this->requestModified(SP_OBJECT_MODIFIED_FLAG); } } @@ -81,11 +78,8 @@ void SPFeMergeNode::set(unsigned int key, gchar const *value) { * Receives update notifications. */ void SPFeMergeNode::update(SPCtx *ctx, guint flags) { - SPFeMergeNode* object = this; - //SPFeMergeNode *feMergeNode = SP_FEMERGENODE(object); - if (flags & SP_OBJECT_MODIFIED_FLAG) { - object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } SPObject::update(ctx, flags); @@ -95,16 +89,13 @@ void SPFeMergeNode::update(SPCtx *ctx, guint flags) { * Writes its settings to an incoming repr object, if any. */ Inkscape::XML::Node* SPFeMergeNode::write(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) { - SPFeMergeNode* object = this; - //SPFeMergeNode *feMergeNode = SP_FEMERGENODE(object); - - // Inkscape-only object, not copied during an "plain SVG" dump: + // Inkscape-only this, not copied during an "plain SVG" dump: if (flags & SP_OBJECT_WRITE_EXT) { if (repr) { // is this sane? //repr->mergeFrom(object->getRepr(), "id"); } else { - repr = object->getRepr()->duplicate(doc); + repr = this->getRepr()->duplicate(doc); } } diff --git a/src/filters/mergenode.h b/src/filters/mergenode.h index 346d8da24..9182780ca 100644 --- a/src/filters/mergenode.h +++ b/src/filters/mergenode.h @@ -27,6 +27,7 @@ public: int input; +protected: virtual void build(SPDocument* doc, Inkscape::XML::Node* repr); virtual void release(); diff --git a/src/filters/pointlight.cpp b/src/filters/pointlight.cpp index ab0b1b582..1c7532b4e 100644 --- a/src/filters/pointlight.cpp +++ b/src/filters/pointlight.cpp @@ -39,14 +39,8 @@ namespace { bool pointLightRegistered = SPFactory::instance().registerObject("svg:fePointLight", createPointLight); } -SPFePointLight::SPFePointLight() : SPObject() { - this->x = 0; - this->y = 0; - this->z = 0; - - this->x_set = FALSE; - this->y_set = FALSE; - this->z_set = FALSE; +SPFePointLight::SPFePointLight() + : SPObject(), x(0), x_set(FALSE), y(0), y_set(FALSE), z(0), z_set(FALSE) { } SPFePointLight::~SPFePointLight() { @@ -61,27 +55,22 @@ SPFePointLight::~SPFePointLight() { void SPFePointLight::build(SPDocument *document, Inkscape::XML::Node *repr) { SPObject::build(document, repr); - SPFePointLight* object = this; - //Read values of key attributes from XML nodes into object. - object->readAttr( "x" ); - object->readAttr( "y" ); - object->readAttr( "z" ); + this->readAttr( "x" ); + this->readAttr( "y" ); + this->readAttr( "z" ); //is this necessary? - document->addResource("fepointlight", object); + document->addResource("fepointlight", this); } /** * Drops any allocated memory. */ void SPFePointLight::release() { - SPFePointLight* object = this; - //SPFePointLight *fepointlight = SP_FEPOINTLIGHT(object); - - if ( object->document ) { + if ( this->document ) { // Unregister ourselves - object->document->removeResource("fepointlight", object); + this->document->removeResource("fepointlight", this); } //TODO: release resources here @@ -91,63 +80,73 @@ void SPFePointLight::release() { * Sets a specific value in the SPFePointLight. */ void SPFePointLight::set(unsigned int key, gchar const *value) { - SPFePointLight* object = this; - - SPFePointLight *fepointlight = SP_FEPOINTLIGHT(object); gchar *end_ptr; + switch (key) { case SP_ATTR_X: end_ptr = NULL; + if (value) { - fepointlight->x = g_ascii_strtod(value, &end_ptr); + this->x = g_ascii_strtod(value, &end_ptr); + if (end_ptr) { - fepointlight->x_set = TRUE; + this->x_set = TRUE; } } + if (!value || !end_ptr) { - fepointlight->x = 0; - fepointlight->x_set = FALSE; + this->x = 0; + this->x_set = FALSE; } - if (object->parent && - (SP_IS_FEDIFFUSELIGHTING(object->parent) || - SP_IS_FESPECULARLIGHTING(object->parent))) { - object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (this->parent && + (SP_IS_FEDIFFUSELIGHTING(this->parent) || + SP_IS_FESPECULARLIGHTING(this->parent))) { + this->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_Y: end_ptr = NULL; + if (value) { - fepointlight->y = g_ascii_strtod(value, &end_ptr); + this->y = g_ascii_strtod(value, &end_ptr); + if (end_ptr) { - fepointlight->y_set = TRUE; + this->y_set = TRUE; } } + if (!value || !end_ptr) { - fepointlight->y = 0; - fepointlight->y_set = FALSE; + this->y = 0; + this->y_set = FALSE; } - if (object->parent && - (SP_IS_FEDIFFUSELIGHTING(object->parent) || - SP_IS_FESPECULARLIGHTING(object->parent))) { - object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (this->parent && + (SP_IS_FEDIFFUSELIGHTING(this->parent) || + SP_IS_FESPECULARLIGHTING(this->parent))) { + this->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_Z: end_ptr = NULL; + if (value) { - fepointlight->z = g_ascii_strtod(value, &end_ptr); + this->z = g_ascii_strtod(value, &end_ptr); + if (end_ptr) { - fepointlight->z_set = TRUE; + this->z_set = TRUE; } } + if (!value || !end_ptr) { - fepointlight->z = 0; - fepointlight->z_set = FALSE; + this->z = 0; + this->z_set = FALSE; } - if (object->parent && - (SP_IS_FEDIFFUSELIGHTING(object->parent) || - SP_IS_FESPECULARLIGHTING(object->parent))) { - object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (this->parent && + (SP_IS_FEDIFFUSELIGHTING(this->parent) || + SP_IS_FESPECULARLIGHTING(this->parent))) { + this->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; default: @@ -161,16 +160,11 @@ void SPFePointLight::set(unsigned int key, gchar const *value) { * * Receives update notifications. * */ void SPFePointLight::update(SPCtx *ctx, guint flags) { - SPFePointLight* object = this; - - SPFePointLight *fePointLight = SP_FEPOINTLIGHT(object); - (void)fePointLight; - if (flags & SP_OBJECT_MODIFIED_FLAG) { /* do something to trigger redisplay, updates? */ - object->readAttr( "x" ); - object->readAttr( "y" ); - object->readAttr( "z" ); + this->readAttr( "x" ); + this->readAttr( "y" ); + this->readAttr( "z" ); } SPObject::update(ctx, flags); @@ -180,19 +174,16 @@ void SPFePointLight::update(SPCtx *ctx, guint flags) { * Writes its settings to an incoming repr object, if any. */ Inkscape::XML::Node* SPFePointLight::write(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) { - SPFePointLight* object = this; - SPFePointLight *fepointlight = SP_FEPOINTLIGHT(object); - if (!repr) { - repr = object->getRepr()->duplicate(doc); + repr = this->getRepr()->duplicate(doc); } - if (fepointlight->x_set) - sp_repr_set_css_double(repr, "x", fepointlight->x); - if (fepointlight->y_set) - sp_repr_set_css_double(repr, "y", fepointlight->y); - if (fepointlight->z_set) - sp_repr_set_css_double(repr, "z", fepointlight->z); + if (this->x_set) + sp_repr_set_css_double(repr, "x", this->x); + if (this->y_set) + sp_repr_set_css_double(repr, "y", this->y); + if (this->z_set) + sp_repr_set_css_double(repr, "z", this->z); SPObject::write(doc, repr, flags); diff --git a/src/filters/pointlight.h b/src/filters/pointlight.h index 96bef8945..2379167b6 100644 --- a/src/filters/pointlight.h +++ b/src/filters/pointlight.h @@ -35,6 +35,7 @@ public: gfloat z; guint z_set : 1; +protected: virtual void build(SPDocument* doc, Inkscape::XML::Node* repr); virtual void release(); diff --git a/src/filters/spotlight.cpp b/src/filters/spotlight.cpp index 1942c7710..c0344067c 100644 --- a/src/filters/spotlight.cpp +++ b/src/filters/spotlight.cpp @@ -39,24 +39,12 @@ namespace { bool spotLightRegistered = SPFactory::instance().registerObject("svg:feSpotLight", createSpotLight); } -SPFeSpotLight::SPFeSpotLight() : SPObject() { - this->x = 0; - this->y = 0; - this->z = 0; - this->pointsAtX = 0; - this->pointsAtY = 0; - this->pointsAtZ = 0; - this->specularExponent = 1; - this->limitingConeAngle = 90; - - this->x_set = FALSE; - this->y_set = FALSE; - this->z_set = FALSE; - this->pointsAtX_set = FALSE; - this->pointsAtY_set = FALSE; - this->pointsAtZ_set = FALSE; - this->specularExponent_set = FALSE; - this->limitingConeAngle_set = FALSE; +SPFeSpotLight::SPFeSpotLight() + : SPObject(), x(0), x_set(FALSE), y(0), y_set(FALSE), z(0), z_set(FALSE), pointsAtX(0), pointsAtX_set(FALSE), + pointsAtY(0), pointsAtY_set(FALSE), pointsAtZ(0), pointsAtZ_set(FALSE), + specularExponent(1), specularExponent_set(FALSE), limitingConeAngle(90), + limitingConeAngle_set(FALSE) +{ } SPFeSpotLight::~SPFeSpotLight() { @@ -71,32 +59,27 @@ SPFeSpotLight::~SPFeSpotLight() { void SPFeSpotLight::build(SPDocument *document, Inkscape::XML::Node *repr) { SPObject::build(document, repr); - SPFeSpotLight* object = this; - //Read values of key attributes from XML nodes into object. - object->readAttr( "x" ); - object->readAttr( "y" ); - object->readAttr( "z" ); - object->readAttr( "pointsAtX" ); - object->readAttr( "pointsAtY" ); - object->readAttr( "pointsAtZ" ); - object->readAttr( "specularExponent" ); - object->readAttr( "limitingConeAngle" ); + this->readAttr( "x" ); + this->readAttr( "y" ); + this->readAttr( "z" ); + this->readAttr( "pointsAtX" ); + this->readAttr( "pointsAtY" ); + this->readAttr( "pointsAtZ" ); + this->readAttr( "specularExponent" ); + this->readAttr( "limitingConeAngle" ); //is this necessary? - document->addResource("fespotlight", object); + document->addResource("fespotlight", this); } /** * Drops any allocated memory. */ void SPFeSpotLight::release() { - SPFeSpotLight* object = this; - //SPFeSpotLight *fespotlight = SP_FESPOTLIGHT(object); - - if ( object->document ) { + if ( this->document ) { // Unregister ourselves - object->document->removeResource("fespotlight", object); + this->document->removeResource("fespotlight", this); } //TODO: release resources here @@ -106,146 +89,183 @@ void SPFeSpotLight::release() { * Sets a specific value in the SPFeSpotLight. */ void SPFeSpotLight::set(unsigned int key, gchar const *value) { - SPFeSpotLight* object = this; - - SPFeSpotLight *fespotlight = SP_FESPOTLIGHT(object); gchar *end_ptr; switch (key) { case SP_ATTR_X: end_ptr = NULL; + if (value) { - fespotlight->x = g_ascii_strtod(value, &end_ptr); - if (end_ptr) - fespotlight->x_set = TRUE; + this->x = g_ascii_strtod(value, &end_ptr); + + if (end_ptr) { + this->x_set = TRUE; + } } + if(!value || !end_ptr) { - fespotlight->x = 0; - fespotlight->x_set = FALSE; + this->x = 0; + this->x_set = FALSE; } - if (object->parent && - (SP_IS_FEDIFFUSELIGHTING(object->parent) || - SP_IS_FESPECULARLIGHTING(object->parent))) { - object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (this->parent && + (SP_IS_FEDIFFUSELIGHTING(this->parent) || + SP_IS_FESPECULARLIGHTING(this->parent))) { + this->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_Y: end_ptr = NULL; + if (value) { - fespotlight->y = g_ascii_strtod(value, &end_ptr); - if (end_ptr) - fespotlight->y_set = TRUE; + this->y = g_ascii_strtod(value, &end_ptr); + + if (end_ptr) { + this->y_set = TRUE; + } } + if(!value || !end_ptr) { - fespotlight->y = 0; - fespotlight->y_set = FALSE; + this->y = 0; + this->y_set = FALSE; } - if (object->parent && - (SP_IS_FEDIFFUSELIGHTING(object->parent) || - SP_IS_FESPECULARLIGHTING(object->parent))) { - object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (this->parent && + (SP_IS_FEDIFFUSELIGHTING(this->parent) || + SP_IS_FESPECULARLIGHTING(this->parent))) { + this->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_Z: end_ptr = NULL; + if (value) { - fespotlight->z = g_ascii_strtod(value, &end_ptr); - if (end_ptr) - fespotlight->z_set = TRUE; + this->z = g_ascii_strtod(value, &end_ptr); + + if (end_ptr) { + this->z_set = TRUE; + } } + if(!value || !end_ptr) { - fespotlight->z = 0; - fespotlight->z_set = FALSE; + this->z = 0; + this->z_set = FALSE; } - if (object->parent && - (SP_IS_FEDIFFUSELIGHTING(object->parent) || - SP_IS_FESPECULARLIGHTING(object->parent))) { - object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (this->parent && + (SP_IS_FEDIFFUSELIGHTING(this->parent) || + SP_IS_FESPECULARLIGHTING(this->parent))) { + this->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_POINTSATX: end_ptr = NULL; + if (value) { - fespotlight->pointsAtX = g_ascii_strtod(value, &end_ptr); - if (end_ptr) - fespotlight->pointsAtX_set = TRUE; + this->pointsAtX = g_ascii_strtod(value, &end_ptr); + + if (end_ptr) { + this->pointsAtX_set = TRUE; + } } + if(!value || !end_ptr) { - fespotlight->pointsAtX = 0; - fespotlight->pointsAtX_set = FALSE; + this->pointsAtX = 0; + this->pointsAtX_set = FALSE; } - if (object->parent && - (SP_IS_FEDIFFUSELIGHTING(object->parent) || - SP_IS_FESPECULARLIGHTING(object->parent))) { - object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (this->parent && + (SP_IS_FEDIFFUSELIGHTING(this->parent) || + SP_IS_FESPECULARLIGHTING(this->parent))) { + this->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_POINTSATY: end_ptr = NULL; + if (value) { - fespotlight->pointsAtY = g_ascii_strtod(value, &end_ptr); - if (end_ptr) - fespotlight->pointsAtY_set = TRUE; + this->pointsAtY = g_ascii_strtod(value, &end_ptr); + + if (end_ptr) { + this->pointsAtY_set = TRUE; + } } + if(!value || !end_ptr) { - fespotlight->pointsAtY = 0; - fespotlight->pointsAtY_set = FALSE; + this->pointsAtY = 0; + this->pointsAtY_set = FALSE; } - if (object->parent && - (SP_IS_FEDIFFUSELIGHTING(object->parent) || - SP_IS_FESPECULARLIGHTING(object->parent))) { - object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (this->parent && + (SP_IS_FEDIFFUSELIGHTING(this->parent) || + SP_IS_FESPECULARLIGHTING(this->parent))) { + this->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_POINTSATZ: end_ptr = NULL; + if (value) { - fespotlight->pointsAtZ = g_ascii_strtod(value, &end_ptr); - if (end_ptr) - fespotlight->pointsAtZ_set = TRUE; + this->pointsAtZ = g_ascii_strtod(value, &end_ptr); + + if (end_ptr) { + this->pointsAtZ_set = TRUE; + } } + if(!value || !end_ptr) { - fespotlight->pointsAtZ = 0; - fespotlight->pointsAtZ_set = FALSE; + this->pointsAtZ = 0; + this->pointsAtZ_set = FALSE; } - if (object->parent && - (SP_IS_FEDIFFUSELIGHTING(object->parent) || - SP_IS_FESPECULARLIGHTING(object->parent))) { - object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (this->parent && + (SP_IS_FEDIFFUSELIGHTING(this->parent) || + SP_IS_FESPECULARLIGHTING(this->parent))) { + this->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_SPECULAREXPONENT: end_ptr = NULL; + if (value) { - fespotlight->specularExponent = g_ascii_strtod(value, &end_ptr); - if (end_ptr) - fespotlight->specularExponent_set = TRUE; + this->specularExponent = g_ascii_strtod(value, &end_ptr); + + if (end_ptr) { + this->specularExponent_set = TRUE; + } } + if(!value || !end_ptr) { - fespotlight->specularExponent = 1; - fespotlight->specularExponent_set = FALSE; + this->specularExponent = 1; + this->specularExponent_set = FALSE; } - if (object->parent && - (SP_IS_FEDIFFUSELIGHTING(object->parent) || - SP_IS_FESPECULARLIGHTING(object->parent))) { - object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (this->parent && + (SP_IS_FEDIFFUSELIGHTING(this->parent) || + SP_IS_FESPECULARLIGHTING(this->parent))) { + this->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; case SP_ATTR_LIMITINGCONEANGLE: end_ptr = NULL; + if (value) { - fespotlight->limitingConeAngle = g_ascii_strtod(value, &end_ptr); - if (end_ptr) - fespotlight->limitingConeAngle_set = TRUE; + this->limitingConeAngle = g_ascii_strtod(value, &end_ptr); + + if (end_ptr) { + this->limitingConeAngle_set = TRUE; + } } + if(!value || !end_ptr) { - fespotlight->limitingConeAngle = 90; - fespotlight->limitingConeAngle_set = FALSE; + this->limitingConeAngle = 90; + this->limitingConeAngle_set = FALSE; } - if (object->parent && - (SP_IS_FEDIFFUSELIGHTING(object->parent) || - SP_IS_FESPECULARLIGHTING(object->parent))) { - object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + if (this->parent && + (SP_IS_FEDIFFUSELIGHTING(this->parent) || + SP_IS_FESPECULARLIGHTING(this->parent))) { + this->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; default: @@ -259,21 +279,16 @@ void SPFeSpotLight::set(unsigned int key, gchar const *value) { * * Receives update notifications. * */ void SPFeSpotLight::update(SPCtx *ctx, guint flags) { - SPFeSpotLight* object = this; - - SPFeSpotLight *feSpotLight = SP_FESPOTLIGHT(object); - (void)feSpotLight; - if (flags & SP_OBJECT_MODIFIED_FLAG) { /* do something to trigger redisplay, updates? */ - object->readAttr( "x" ); - object->readAttr( "y" ); - object->readAttr( "z" ); - object->readAttr( "pointsAtX" ); - object->readAttr( "pointsAtY" ); - object->readAttr( "pointsAtZ" ); - object->readAttr( "specularExponent" ); - object->readAttr( "limitingConeAngle" ); + this->readAttr( "x" ); + this->readAttr( "y" ); + this->readAttr( "z" ); + this->readAttr( "pointsAtX" ); + this->readAttr( "pointsAtY" ); + this->readAttr( "pointsAtZ" ); + this->readAttr( "specularExponent" ); + this->readAttr( "limitingConeAngle" ); } SPObject::update(ctx, flags); @@ -283,29 +298,26 @@ void SPFeSpotLight::update(SPCtx *ctx, guint flags) { * Writes its settings to an incoming repr object, if any. */ Inkscape::XML::Node* SPFeSpotLight::write(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) { - SPFeSpotLight* object = this; - SPFeSpotLight *fespotlight = SP_FESPOTLIGHT(object); - if (!repr) { - repr = object->getRepr()->duplicate(doc); + repr = this->getRepr()->duplicate(doc); } - if (fespotlight->x_set) - sp_repr_set_css_double(repr, "x", fespotlight->x); - if (fespotlight->y_set) - sp_repr_set_css_double(repr, "y", fespotlight->y); - if (fespotlight->z_set) - sp_repr_set_css_double(repr, "z", fespotlight->z); - if (fespotlight->pointsAtX_set) - sp_repr_set_css_double(repr, "pointsAtX", fespotlight->pointsAtX); - if (fespotlight->pointsAtY_set) - sp_repr_set_css_double(repr, "pointsAtY", fespotlight->pointsAtY); - if (fespotlight->pointsAtZ_set) - sp_repr_set_css_double(repr, "pointsAtZ", fespotlight->pointsAtZ); - if (fespotlight->specularExponent_set) - sp_repr_set_css_double(repr, "specularExponent", fespotlight->specularExponent); - if (fespotlight->limitingConeAngle_set) - sp_repr_set_css_double(repr, "limitingConeAngle", fespotlight->limitingConeAngle); + if (this->x_set) + sp_repr_set_css_double(repr, "x", this->x); + if (this->y_set) + sp_repr_set_css_double(repr, "y", this->y); + if (this->z_set) + sp_repr_set_css_double(repr, "z", this->z); + if (this->pointsAtX_set) + sp_repr_set_css_double(repr, "pointsAtX", this->pointsAtX); + if (this->pointsAtY_set) + sp_repr_set_css_double(repr, "pointsAtY", this->pointsAtY); + if (this->pointsAtZ_set) + sp_repr_set_css_double(repr, "pointsAtZ", this->pointsAtZ); + if (this->specularExponent_set) + sp_repr_set_css_double(repr, "specularExponent", this->specularExponent); + if (this->limitingConeAngle_set) + sp_repr_set_css_double(repr, "limitingConeAngle", this->limitingConeAngle); SPObject::write(doc, repr, flags); diff --git a/src/filters/spotlight.h b/src/filters/spotlight.h index 9ea73a800..b273f72b7 100644 --- a/src/filters/spotlight.h +++ b/src/filters/spotlight.h @@ -51,6 +51,7 @@ public: guint limitingConeAngle_set : 1; //other fields +protected: virtual void build(SPDocument* doc, Inkscape::XML::Node* repr); virtual void release(); |
