svg_loader: refactoring code.

merge loader class with task to simplfy code.
This commit is contained in:
Hermet Park 2020-09-05 19:49:05 +09:00 committed by JunsuChoi
parent 241c25d722
commit 3e63263646
2 changed files with 27 additions and 37 deletions

View file

@ -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 */
/************************************************************************/
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()
{
//For valid check, only <svg> tag is parsed first.
@ -2417,7 +2418,7 @@ bool SvgLoader::read()
{
if (!content || size == 0) return false;
TaskScheduler::request(task);
TaskScheduler::request(this);
return true;
}
@ -2425,11 +2426,8 @@ bool SvgLoader::read()
bool SvgLoader::close()
{
if (task) {
task->get();
delete(task);
task = nullptr;
}
this->get();
if (loaderData.svgParse) {
free(loaderData.svgParse);
loaderData.svgParse = nullptr;
@ -2451,7 +2449,7 @@ bool SvgLoader::close()
unique_ptr<Scene> SvgLoader::data()
{
if (task) task->get();
this->get();
if (root) return move(root);
else return nullptr;
}

View file

@ -25,16 +25,7 @@
#include "tvgSvgLoaderCommon.h"
#include "tvgSvgSceneBuilder.h"
class SvgLoader;
struct SvgTask : Task
{
SvgLoader* loader = nullptr;
void run() override;
};
class SvgLoader : public Loader
class SvgLoader : public Loader, public Task
{
public:
string filePath;
@ -44,7 +35,6 @@ public:
SvgLoaderData loaderData;
SvgSceneBuilder builder;
unique_ptr<Scene> root;
SvgTask* task = nullptr;
SvgLoader();
~SvgLoader();
@ -54,6 +44,8 @@ public:
bool header();
bool read() override;
bool close() override;
void run() override;
unique_ptr<Scene> data() override;
};