[DEV] remove memory leak
This commit is contained in:
parent
c5ae88df8e
commit
aa6e69c7e7
@ -33,14 +33,6 @@ namespace esvg {
|
||||
paint_gradientLinear, //!< Painting a linear gradient.
|
||||
paint_gradientRadial //!< Painting a radial gradient.
|
||||
};
|
||||
/**
|
||||
* @brief Indicates what happens if the gradient starts or ends inside the bounds of the target rectangle.
|
||||
*/
|
||||
enum spread {
|
||||
spread_pad, //!< 'pad' spread.
|
||||
spread_reflect, //!< 'reflect' spread.
|
||||
spread_repead, //!< 'repead' spread.
|
||||
};
|
||||
|
||||
class PaintState {
|
||||
public:
|
||||
|
@ -57,44 +57,43 @@ bool esvg::Group::parseXML(const std::shared_ptr<exml::Element>& _element, mat2&
|
||||
// can be a comment ...
|
||||
continue;
|
||||
}
|
||||
esvg::Base *elementParser = nullptr;
|
||||
std::shared_ptr<esvg::Base> elementParser;
|
||||
if (child->getValue() == "g") {
|
||||
elementParser = new esvg::Group(m_paint);
|
||||
elementParser = std::make_shared<esvg::Group>(m_paint);
|
||||
} else if (child->getValue() == "a") {
|
||||
// TODO ...
|
||||
} else if (child->getValue() == "path") {
|
||||
elementParser = new esvg::Path(m_paint);
|
||||
elementParser = std::make_shared<esvg::Path>(m_paint);
|
||||
} else if (child->getValue() == "rect") {
|
||||
elementParser = new esvg::Rectangle(m_paint);
|
||||
elementParser = std::make_shared<esvg::Rectangle>(m_paint);
|
||||
} else if (child->getValue() == "circle") {
|
||||
elementParser = new esvg::Circle(m_paint);
|
||||
elementParser = std::make_shared<esvg::Circle>(m_paint);
|
||||
} else if (child->getValue() == "ellipse") {
|
||||
elementParser = new esvg::Ellipse(m_paint);
|
||||
elementParser = std::make_shared<esvg::Ellipse>(m_paint);
|
||||
} else if (child->getValue() == "line") {
|
||||
elementParser = new esvg::Line(m_paint);
|
||||
elementParser = std::make_shared<esvg::Line>(m_paint);
|
||||
} else if (child->getValue() == "polyline") {
|
||||
elementParser = new esvg::Polyline(m_paint);
|
||||
elementParser = std::make_shared<esvg::Polyline>(m_paint);
|
||||
} else if (child->getValue() == "polygon") {
|
||||
elementParser = new esvg::Polygon(m_paint);
|
||||
elementParser = std::make_shared<esvg::Polygon>(m_paint);
|
||||
} else if (child->getValue() == "text") {
|
||||
elementParser = new esvg::Text(m_paint);
|
||||
elementParser = std::make_shared<esvg::Text>(m_paint);
|
||||
} else {
|
||||
SVG_ERROR("(l "<<child->getPos()<<") node not suported : \""<<child->getValue()<<"\" must be [g,a,path,rect,circle,ellipse,line,polyline,polygon,text]");
|
||||
}
|
||||
if (elementParser == nullptr) {
|
||||
SVG_ERROR("(l "<<child->getPos()<<") error on node: \""<<child->getValue()<<"\" allocation error or not supported ...");
|
||||
} else {
|
||||
if (false == elementParser->parseXML(child, m_transformMatrix, tmpPos)) {
|
||||
SVG_ERROR("(l "<<child->getPos()<<") error on node: \""<<child->getValue()<<"\" Sub Parsing ERROR");
|
||||
delete(elementParser);
|
||||
elementParser = nullptr;
|
||||
} else {
|
||||
_sizeMax.setValue(std::max(_sizeMax.x(), tmpPos.x()),
|
||||
std::max(_sizeMax.y(), tmpPos.y()));
|
||||
// add element in the system
|
||||
m_subElementList.push_back(elementParser);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (elementParser->parseXML(child, m_transformMatrix, tmpPos) == false) {
|
||||
SVG_ERROR("(l "<<child->getPos()<<") error on node: \""<<child->getValue()<<"\" Sub Parsing ERROR");
|
||||
elementParser.reset();
|
||||
continue;
|
||||
}
|
||||
_sizeMax.setValue(std::max(_sizeMax.x(), tmpPos.x()),
|
||||
std::max(_sizeMax.y(), tmpPos.y()));
|
||||
// add element in the system
|
||||
m_subElementList.push_back(elementParser);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -15,7 +15,7 @@
|
||||
namespace esvg {
|
||||
class Group : public esvg::Base {
|
||||
private:
|
||||
std::vector<esvg::Base *> m_subElementList; //!< group sub elements ...
|
||||
std::vector<std::shared_ptr<esvg::Base>> m_subElementList; //!< sub elements ...
|
||||
public:
|
||||
Group(PaintState _parentPaintState);
|
||||
~Group();
|
||||
|
@ -217,33 +217,34 @@ bool esvg::Document::parseXMLData(const std::shared_ptr<exml::Element>& _root) {
|
||||
// comment trsh here...
|
||||
continue;
|
||||
}
|
||||
esvg::Base *elementParser = nullptr;
|
||||
std::shared_ptr<esvg::Base> elementParser;
|
||||
if (child->getValue() == "g") {
|
||||
elementParser = new esvg::Group(m_paint);
|
||||
elementParser = std::make_shared<esvg::Group>(m_paint);
|
||||
} else if (child->getValue() == "a") {
|
||||
SVG_INFO("Note : 'a' balise is parsed like a g balise ...");
|
||||
elementParser = new esvg::Group(m_paint);
|
||||
elementParser = std::make_shared<esvg::Group>(m_paint);
|
||||
} else if (child->getValue() == "title") {
|
||||
m_title = "TODO : set the title here ...";
|
||||
continue;
|
||||
} else if (child->getValue() == "path") {
|
||||
elementParser = new esvg::Path(m_paint);
|
||||
elementParser = std::make_shared<esvg::Path>(m_paint);
|
||||
} else if (child->getValue() == "rect") {
|
||||
elementParser = new esvg::Rectangle(m_paint);
|
||||
elementParser = std::make_shared<esvg::Rectangle>(m_paint);
|
||||
} else if (child->getValue() == "circle") {
|
||||
elementParser = new esvg::Circle(m_paint);
|
||||
elementParser = std::make_shared<esvg::Circle>(m_paint);
|
||||
} else if (child->getValue() == "ellipse") {
|
||||
elementParser = new esvg::Ellipse(m_paint);
|
||||
elementParser = std::make_shared<esvg::Ellipse>(m_paint);
|
||||
} else if (child->getValue() == "line") {
|
||||
elementParser = new esvg::Line(m_paint);
|
||||
elementParser = std::make_shared<esvg::Line>(m_paint);
|
||||
} else if (child->getValue() == "polyline") {
|
||||
elementParser = new esvg::Polyline(m_paint);
|
||||
elementParser = std::make_shared<esvg::Polyline>(m_paint);
|
||||
} else if (child->getValue() == "polygon") {
|
||||
elementParser = new esvg::Polygon(m_paint);
|
||||
elementParser = std::make_shared<esvg::Polygon>(m_paint);
|
||||
} else if (child->getValue() == "text") {
|
||||
elementParser = new esvg::Text(m_paint);
|
||||
elementParser = std::make_shared<esvg::Text>(m_paint);
|
||||
} else if (child->getValue() == "defs") {
|
||||
SVG_TODO("Need to parse Reference ==> big modification ...");
|
||||
SVG_ERROR("'defs' node must not be defined in a group");
|
||||
continue;
|
||||
} else if (child->getValue() == "sodipodi:namedview") {
|
||||
// Node ignore : generaly inkscape data
|
||||
continue;
|
||||
@ -259,8 +260,7 @@ bool esvg::Document::parseXMLData(const std::shared_ptr<exml::Element>& _root) {
|
||||
}
|
||||
if (elementParser->parseXML(child, m_transformMatrix, size) == false) {
|
||||
SVG_ERROR("(l "<<child->getPos()<<") error on node: \""<<child->getValue()<<"\" Sub Parsing ERROR");
|
||||
delete(elementParser);
|
||||
elementParser = nullptr;
|
||||
elementParser.reset();
|
||||
continue;
|
||||
}
|
||||
if (maxSize.x()<size.x()) {
|
||||
|
@ -23,7 +23,8 @@ namespace esvg {
|
||||
bool m_loadOK;
|
||||
std::string m_version;
|
||||
std::string m_title;
|
||||
std::vector<esvg::Base*> m_subElementList; // TODO: LEAK ...
|
||||
std::vector<std::shared_ptr<esvg::Base>> m_subElementList; //!< sub-element list
|
||||
std::vector<std::shared_ptr<esvg::Base>> m_refList; //!< reference elements ...
|
||||
vec2 m_size;
|
||||
public:
|
||||
Document();
|
||||
|
Loading…
x
Reference in New Issue
Block a user