mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-15 12:34:30 +00:00
svg_loader: refactoring code.
merge loader class with task to simplfy code.
This commit is contained in:
parent
241c25d722
commit
3e63263646
2 changed files with 27 additions and 37 deletions
|
@ -2323,30 +2323,13 @@ static bool _svgLoaderParserForValidCheck(void* data, SimpleXMLType type, const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SvgTask::run()
|
|
||||||
{
|
|
||||||
if (!simpleXmlParse(loader->content, loader->size, true, _svgLoaderParser, &(loader->loaderData))) return;
|
|
||||||
|
|
||||||
if (loader->loaderData.doc) {
|
|
||||||
_updateStyle(loader->loaderData.doc, nullptr);
|
|
||||||
auto defs = loader->loaderData.doc->node.doc.defs;
|
|
||||||
if (defs) _updateGradient(loader->loaderData.doc, &defs->node.defs.gradients);
|
|
||||||
else {
|
|
||||||
if (loader->loaderData.gradients.cnt > 0) {
|
|
||||||
_updateGradient(loader->loaderData.doc, &loader->loaderData.gradients);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
loader->root = loader->builder.build(loader->loaderData.doc);
|
|
||||||
};
|
|
||||||
|
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
/* External Class Implementation */
|
/* External Class Implementation */
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
|
|
||||||
SvgLoader::SvgLoader() : task(new SvgTask)
|
SvgLoader::SvgLoader()
|
||||||
{
|
{
|
||||||
task->loader = this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2356,6 +2339,24 @@ SvgLoader::~SvgLoader()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SvgLoader::run()
|
||||||
|
{
|
||||||
|
if (!simpleXmlParse(content, size, true, _svgLoaderParser, &(loaderData))) return;
|
||||||
|
|
||||||
|
if (loaderData.doc) {
|
||||||
|
_updateStyle(loaderData.doc, nullptr);
|
||||||
|
auto defs = loaderData.doc->node.doc.defs;
|
||||||
|
if (defs) _updateGradient(loaderData.doc, &defs->node.defs.gradients);
|
||||||
|
else {
|
||||||
|
if (loaderData.gradients.cnt > 0) {
|
||||||
|
_updateGradient(loaderData.doc, &loaderData.gradients);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
root = builder.build(loaderData.doc);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
bool SvgLoader::header()
|
bool SvgLoader::header()
|
||||||
{
|
{
|
||||||
//For valid check, only <svg> tag is parsed first.
|
//For valid check, only <svg> tag is parsed first.
|
||||||
|
@ -2417,7 +2418,7 @@ bool SvgLoader::read()
|
||||||
{
|
{
|
||||||
if (!content || size == 0) return false;
|
if (!content || size == 0) return false;
|
||||||
|
|
||||||
TaskScheduler::request(task);
|
TaskScheduler::request(this);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -2425,11 +2426,8 @@ bool SvgLoader::read()
|
||||||
|
|
||||||
bool SvgLoader::close()
|
bool SvgLoader::close()
|
||||||
{
|
{
|
||||||
if (task) {
|
this->get();
|
||||||
task->get();
|
|
||||||
delete(task);
|
|
||||||
task = nullptr;
|
|
||||||
}
|
|
||||||
if (loaderData.svgParse) {
|
if (loaderData.svgParse) {
|
||||||
free(loaderData.svgParse);
|
free(loaderData.svgParse);
|
||||||
loaderData.svgParse = nullptr;
|
loaderData.svgParse = nullptr;
|
||||||
|
@ -2451,7 +2449,7 @@ bool SvgLoader::close()
|
||||||
|
|
||||||
unique_ptr<Scene> SvgLoader::data()
|
unique_ptr<Scene> SvgLoader::data()
|
||||||
{
|
{
|
||||||
if (task) task->get();
|
this->get();
|
||||||
if (root) return move(root);
|
if (root) return move(root);
|
||||||
else return nullptr;
|
else return nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,16 +25,7 @@
|
||||||
#include "tvgSvgLoaderCommon.h"
|
#include "tvgSvgLoaderCommon.h"
|
||||||
#include "tvgSvgSceneBuilder.h"
|
#include "tvgSvgSceneBuilder.h"
|
||||||
|
|
||||||
class SvgLoader;
|
class SvgLoader : public Loader, public Task
|
||||||
|
|
||||||
struct SvgTask : Task
|
|
||||||
{
|
|
||||||
SvgLoader* loader = nullptr;
|
|
||||||
void run() override;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class SvgLoader : public Loader
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
string filePath;
|
string filePath;
|
||||||
|
@ -44,7 +35,6 @@ public:
|
||||||
SvgLoaderData loaderData;
|
SvgLoaderData loaderData;
|
||||||
SvgSceneBuilder builder;
|
SvgSceneBuilder builder;
|
||||||
unique_ptr<Scene> root;
|
unique_ptr<Scene> root;
|
||||||
SvgTask* task = nullptr;
|
|
||||||
|
|
||||||
SvgLoader();
|
SvgLoader();
|
||||||
~SvgLoader();
|
~SvgLoader();
|
||||||
|
@ -54,6 +44,8 @@ public:
|
||||||
bool header();
|
bool header();
|
||||||
bool read() override;
|
bool read() override;
|
||||||
bool close() override;
|
bool close() override;
|
||||||
|
void run() override;
|
||||||
|
|
||||||
unique_ptr<Scene> data() override;
|
unique_ptr<Scene> data() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue