diff options
| author | Markus Engel <markus.engel@tum.de> | 2013-04-01 23:41:30 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2013-04-01 23:41:30 +0000 |
| commit | 69f3b6f1abb2bb422935d43262e1e99aab359954 (patch) | |
| tree | e1e2d2b0504d22e81b04501155995f5694a4cd7b /src/sp-gradient.cpp | |
| parent | Added experimental constructor to SPRect. Memory leaks because of non-virtual... (diff) | |
| download | inkscape-69f3b6f1abb2bb422935d43262e1e99aab359954.tar.gz inkscape-69f3b6f1abb2bb422935d43262e1e99aab359954.zip | |
Added constructors to SP classes.
(bzr r11608.1.67)
Diffstat (limited to 'src/sp-gradient.cpp')
| -rw-r--r-- | src/sp-gradient.cpp | 146 |
1 files changed, 100 insertions, 46 deletions
diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp index b0a0ae816..1a1b1b1e6 100644 --- a/src/sp-gradient.cpp +++ b/src/sp-gradient.cpp @@ -61,13 +61,13 @@ //#define NCOLORS NR_GRADIENT_VECTOR_LENGTH // SPStop -G_DEFINE_TYPE(SPStop, sp_stop, SP_TYPE_OBJECT); +G_DEFINE_TYPE(SPStop, sp_stop, G_TYPE_OBJECT); // SPMeshRow -G_DEFINE_TYPE(SPMeshRow, sp_meshrow, SP_TYPE_OBJECT); +G_DEFINE_TYPE(SPMeshRow, sp_meshrow, G_TYPE_OBJECT); // SPMeshPatch -G_DEFINE_TYPE(SPMeshPatch, sp_meshpatch, SP_TYPE_OBJECT); +G_DEFINE_TYPE(SPMeshPatch, sp_meshpatch, G_TYPE_OBJECT); /** @@ -84,24 +84,32 @@ CStop::CStop(SPStop* stop) : CObject(stop) { CStop::~CStop() { } -/** - * Callback to initialize SPStop object. - */ -static void -sp_stop_init(SPStop *stop) -{ +SPStop::SPStop() : SPObject() { + SPStop* stop = this; + stop->cstop = new CStop(stop); stop->typeHierarchy.insert(typeid(SPStop)); delete stop->cobject; stop->cobject = stop->cstop; + stop->path_string = NULL; + stop->offset = 0.0; stop->currentColor = false; stop->specified_color.set( 0x000000ff ); stop->opacity = 1.0; } +/** + * Callback to initialize SPStop object. + */ +static void +sp_stop_init(SPStop *stop) +{ + new (stop) SPStop(); +} + void CStop::build(SPDocument* doc, Inkscape::XML::Node* repr) { SPStop* object = this->spstop; @@ -359,11 +367,9 @@ CMeshRow::CMeshRow(SPMeshRow* meshrow) : CObject(meshrow) { CMeshRow::~CMeshRow() { } -/** - * Callback to initialize SPMeshRow object. - */ -static void sp_meshrow_init(SPMeshRow * meshrow) -{ +SPMeshRow::SPMeshRow() : SPObject() { + SPMeshRow* meshrow = this; + meshrow->cmeshrow = new CMeshRow(meshrow); meshrow->typeHierarchy.insert(typeid(SPMeshRow)); @@ -371,6 +377,14 @@ static void sp_meshrow_init(SPMeshRow * meshrow) meshrow->cobject = meshrow->cmeshrow; } +/** + * Callback to initialize SPMeshRow object. + */ +static void sp_meshrow_init(SPMeshRow * meshrow) +{ + new (meshrow) SPMeshRow(); +} + void CMeshRow::build(SPDocument* doc, Inkscape::XML::Node* repr) { CObject::build(doc, repr); } @@ -418,16 +432,24 @@ CMeshPatch::CMeshPatch(SPMeshPatch* meshpatch) : CObject(meshpatch) { CMeshPatch::~CMeshPatch() { } -/** - * Callback to initialize SPMeshPatch object. - */ -static void sp_meshpatch_init(SPMeshPatch * meshpatch) -{ +SPMeshPatch::SPMeshPatch() : SPObject() { + SPMeshPatch* meshpatch = this; + meshpatch->cmeshpatch = new CMeshPatch(meshpatch); meshpatch->typeHierarchy.insert(typeid(SPMeshPatch)); delete meshpatch->cobject; meshpatch->cobject = meshpatch->cmeshpatch; + + meshpatch->tensor_string = NULL; +} + +/** + * Callback to initialize SPMeshPatch object. + */ +static void sp_meshpatch_init(SPMeshPatch * meshpatch) +{ + new (meshpatch) SPMeshPatch(); } void CMeshPatch::build(SPDocument* doc, Inkscape::XML::Node* repr) { @@ -496,14 +518,14 @@ GType SPGradient::getType() GTypeInfo gradient_info = { sizeof(SPGradientClass), NULL, NULL, - (GClassInitFunc) CGradient::classInit, + 0, //(GClassInitFunc) CGradient::classInit, NULL, NULL, sizeof(SPGradient), 16, (GInstanceInitFunc) CGradient::init, NULL, /* value_table */ }; - gradient_type = g_type_register_static(SP_TYPE_PAINT_SERVER, "SPGradient", + gradient_type = g_type_register_static(G_TYPE_OBJECT, "SPGradient", &gradient_info, (GTypeFlags)0); } return gradient_type; @@ -524,11 +546,15 @@ CGradient::CGradient(SPGradient* gradient) : CPaintServer(gradient) { CGradient::~CGradient() { } -/** - * Callback for SPGradient object initialization. - */ -void CGradient::init(SPGradient *gr) -{ +SPGradient::SPGradient() : SPPaintServer(), units(), + spread(), + ref(NULL), + state(2), + vector() { + + + SPGradient* gr = this; + gr->cgradient = new CGradient(gr); gr->typeHierarchy.insert(typeid(SPGradient)); @@ -536,6 +562,8 @@ void CGradient::init(SPGradient *gr) gr->cpaintserver = gr->cgradient; gr->cobject = gr->cgradient; + gr->has_patches = 0; + gr->ref = new SPGradientReference(gr); gr->ref->changedSignal().connect(sigc::bind(sigc::ptr_fun(CGradient::gradientRefChanged), gr)); @@ -563,6 +591,14 @@ void CGradient::init(SPGradient *gr) } /** + * Callback for SPGradient object initialization. + */ +void CGradient::init(SPGradient *gr) +{ + new (gr) SPGradient(); +} + +/** * Virtual build: set gradient attributes from its associated repr. */ void CGradient::build(SPDocument *document, Inkscape::XML::Node *repr) @@ -1380,7 +1416,7 @@ sp_gradient_set_gs2d_matrix(SPGradient *gr, Geom::Affine const &ctm, /* * Linear Gradient */ -G_DEFINE_TYPE(SPLinearGradient, sp_lineargradient, SP_TYPE_GRADIENT); +G_DEFINE_TYPE(SPLinearGradient, sp_lineargradient, G_TYPE_OBJECT); /** * SPLinearGradient vtable initialization. @@ -1396,11 +1432,9 @@ CLinearGradient::CLinearGradient(SPLinearGradient* lineargradient) : CGradient(l CLinearGradient::~CLinearGradient() { } -/** - * Callback for SPLinearGradient object initialization. - */ -static void sp_lineargradient_init(SPLinearGradient *lg) -{ +SPLinearGradient::SPLinearGradient() : SPGradient() { + SPLinearGradient* lg = this; + lg->clineargradient = new CLinearGradient(lg); lg->typeHierarchy.insert(typeid(SPLinearGradient)); @@ -1415,6 +1449,14 @@ static void sp_lineargradient_init(SPLinearGradient *lg) lg->y2.unset(SVGLength::PERCENT, 0.0, 0.0); } +/** + * Callback for SPLinearGradient object initialization. + */ +static void sp_lineargradient_init(SPLinearGradient *lg) +{ + new (lg) SPLinearGradient(); +} + void CLinearGradient::build(SPDocument *document, Inkscape::XML::Node *repr) { SPLinearGradient* object = this->splineargradient; @@ -1507,7 +1549,7 @@ sp_lineargradient_set_position(SPLinearGradient *lg, /* * Radial Gradient */ -G_DEFINE_TYPE(SPRadialGradient, sp_radialgradient, SP_TYPE_GRADIENT); +G_DEFINE_TYPE(SPRadialGradient, sp_radialgradient, G_TYPE_OBJECT); /** * SPRadialGradient vtable initialization. @@ -1523,12 +1565,9 @@ CRadialGradient::CRadialGradient(SPRadialGradient* radialgradient) : CGradient(r CRadialGradient::~CRadialGradient() { } -/** - * Callback for SPRadialGradient object initialization. - */ -static void -sp_radialgradient_init(SPRadialGradient *rg) -{ +SPRadialGradient::SPRadialGradient() : SPGradient() { + SPRadialGradient* rg = this; + rg->cradialgradient = new CRadialGradient(rg); rg->typeHierarchy.insert(typeid(SPRadialGradient)); @@ -1545,6 +1584,15 @@ sp_radialgradient_init(SPRadialGradient *rg) } /** + * Callback for SPRadialGradient object initialization. + */ +static void +sp_radialgradient_init(SPRadialGradient *rg) +{ + new (rg) SPRadialGradient(); +} + +/** * Set radial gradient attributes from associated repr. */ void CRadialGradient::build(SPDocument *document, Inkscape::XML::Node *repr) { @@ -1661,7 +1709,7 @@ sp_radialgradient_set_position(SPRadialGradient *rg, //#define MESH_DEBUG -G_DEFINE_TYPE(SPMeshGradient, sp_meshgradient, SP_TYPE_GRADIENT); +G_DEFINE_TYPE(SPMeshGradient, sp_meshgradient, G_TYPE_OBJECT); /** * SPMeshGradient vtable initialization. @@ -1680,12 +1728,9 @@ CMeshGradient::CMeshGradient(SPMeshGradient* meshgradient) : CGradient(meshgradi CMeshGradient::~CMeshGradient() { } -/** - * Callback for SPMeshGradient object initialization. - */ -static void -sp_meshgradient_init(SPMeshGradient *mg) -{ +SPMeshGradient::SPMeshGradient() : SPGradient() { + SPMeshGradient* mg = this; + mg->cmeshgradient = new CMeshGradient(mg); mg->typeHierarchy.insert(typeid(SPMeshGradient)); @@ -1699,6 +1744,15 @@ sp_meshgradient_init(SPMeshGradient *mg) mg->y.unset(SVGLength::NONE, 0.0, 0.0); } +/** + * Callback for SPMeshGradient object initialization. + */ +static void +sp_meshgradient_init(SPMeshGradient *mg) +{ + new (mg) SPMeshGradient(); +} + void CMeshGradient::build(SPDocument *document, Inkscape::XML::Node *repr) { SPMeshGradient* object = this->spmeshgradient; |
