{
if (!from) return nullptr;
- auto grad = new SvgStyleGradient;
+ auto grad = (SvgStyleGradient*)(calloc(1, sizeof(SvgStyleGradient)));
grad->type = from->type;
grad->id = from->id ? _copyId(from->id) : nullptr;
grad->ref = from->ref ? _copyId(from->ref) : nullptr;
return grad;
error_grad_alloc:
- if (grad) delete(grad);
+ if (grad) {
+ grad->clear();
+ free(grad);
+ }
return nullptr;
}
static SvgStyleGradient* _createRadialGradient(SvgLoaderData* loader, const char* buf, unsigned bufLength)
{
- auto grad = new SvgStyleGradient;
+ auto grad = (SvgStyleGradient*)(calloc(1, sizeof(SvgStyleGradient)));
loader->svgParse->styleGrad = grad;
grad->type = SvgGradientType::Radial;
grad->userSpace = false;
grad->radial = (SvgRadialGradient*)calloc(1, sizeof(SvgRadialGradient));
if (!grad->radial) {
- delete(grad);
+ grad->clear();
+ free(grad);
return nullptr;
}
/**
static SvgStyleGradient* _createLinearGradient(SvgLoaderData* loader, const char* buf, unsigned bufLength)
{
- auto grad = new SvgStyleGradient;
+ auto grad = (SvgStyleGradient*)(calloc(1, sizeof(SvgStyleGradient)));
loader->svgParse->styleGrad = grad;
grad->type = SvgGradientType::Linear;
grad->userSpace = false;
grad->linear = (SvgLinearGradient*)calloc(1, sizeof(SvgLinearGradient));
if (!grad->linear) {
- delete(grad);
+ grad->clear();
+ free(grad);
return nullptr;
}
/**
}
} else {
if (node->style->fill.paint.url) {
- if (node->style->fill.paint.gradient) delete(node->style->fill.paint.gradient);
+ if (node->style->fill.paint.gradient) {
+ node->style->fill.paint.gradient->clear();
+ free(node->style->fill.paint.gradient);
+ }
node->style->fill.paint.gradient = _gradientDup(gradients, node->style->fill.paint.url);
}
if (node->style->stroke.paint.url) {
- if (node->style->stroke.paint.gradient) delete(node->style->stroke.paint.gradient);
+ if (node->style->stroke.paint.gradient) {
+ node->style->stroke.paint.gradient->clear();
+ free(node->style->stroke.paint.gradient);
+ }
node->style->stroke.paint.gradient = _gradientDup(gradients, node->style->stroke.paint.url);
}
}
free(style->clipPath.url);
free(style->mask.url);
- if (style->fill.paint.gradient) delete(style->fill.paint.gradient);
- if (style->stroke.paint.gradient) delete(style->stroke.paint.gradient);
+ if (style->fill.paint.gradient) {
+ style->fill.paint.gradient->clear();
+ free(style->fill.paint.gradient);
+ }
+ if (style->stroke.paint.gradient) {
+ style->stroke.paint.gradient->clear();
+ free(style->stroke.paint.gradient);
+ }
free(style->fill.paint.url);
free(style->stroke.paint.url);
style->stroke.dash.array.reset();
case SvgNodeType::Defs: {
auto gradients = node->node.defs.gradients.data;
for (size_t i = 0; i < node->node.defs.gradients.count; ++i) {
- delete(*gradients);
+ (*gradients)->clear();
+ free(*gradients);
++gradients;
}
node->node.defs.gradients.reset();