mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-08 05:33:36 +00:00
renderer/loader: optimization++
removed the internal unique_ptr usage to reduce the binary size(-553)
This commit is contained in:
parent
20fdcb4ccd
commit
a9d39eaf56
12 changed files with 23 additions and 25 deletions
|
@ -292,12 +292,12 @@ bool LottieLoader::read()
|
|||
}
|
||||
|
||||
|
||||
unique_ptr<Paint> LottieLoader::paint()
|
||||
Paint* LottieLoader::paint()
|
||||
{
|
||||
this->done();
|
||||
if (!comp) return nullptr;
|
||||
comp->initiated = true;
|
||||
return cast<Paint>(comp->scene);
|
||||
return comp->scene;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ public:
|
|||
bool open(const char* data, uint32_t size, const std::string& rpath, bool copy) override;
|
||||
bool resize(Paint* paint, float w, float h) override;
|
||||
bool read() override;
|
||||
unique_ptr<Paint> paint() override;
|
||||
Paint* paint() override;
|
||||
|
||||
//Frame Controls
|
||||
bool frame(float no) override;
|
||||
|
|
|
@ -3555,7 +3555,7 @@ void SvgLoader::run(unsigned tid)
|
|||
//According to the SVG standard the value of the width/height of the viewbox set to 0 disables rendering
|
||||
if ((viewFlag & SvgViewFlag::Viewbox) && (fabsf(vw) <= FLT_EPSILON || fabsf(vh) <= FLT_EPSILON)) {
|
||||
TVGLOG("SVG", "The <viewBox> width and/or height set to 0 - rendering disabled.");
|
||||
root = Scene::gen();
|
||||
root = Scene::gen().release();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -3748,8 +3748,8 @@ bool SvgLoader::close()
|
|||
}
|
||||
|
||||
|
||||
unique_ptr<Paint> SvgLoader::paint()
|
||||
Paint* SvgLoader::paint()
|
||||
{
|
||||
this->done();
|
||||
return std::move(root);
|
||||
return root;
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ public:
|
|||
uint32_t size = 0;
|
||||
|
||||
SvgLoaderData loaderData;
|
||||
unique_ptr<Scene> root;
|
||||
Scene* root = nullptr;
|
||||
|
||||
bool copy = false;
|
||||
|
||||
|
@ -49,7 +49,7 @@ public:
|
|||
bool read() override;
|
||||
bool close() override;
|
||||
|
||||
unique_ptr<Paint> paint() override;
|
||||
Paint* paint() override;
|
||||
|
||||
private:
|
||||
SvgViewFlag viewFlag = SvgViewFlag::None;
|
||||
|
|
|
@ -845,7 +845,7 @@ static void _updateInvalidViewSize(const Scene* scene, Box& vBox, float& w, floa
|
|||
/* External Class Implementation */
|
||||
/************************************************************************/
|
||||
|
||||
unique_ptr<Scene> svgSceneBuild(SvgLoaderData& loaderData, Box vBox, float w, float h, AspectRatioAlign align, AspectRatioMeetOrSlice meetOrSlice, const string& svgPath, SvgViewFlag viewFlag)
|
||||
Scene* svgSceneBuild(SvgLoaderData& loaderData, Box vBox, float w, float h, AspectRatioAlign align, AspectRatioMeetOrSlice meetOrSlice, const string& svgPath, SvgViewFlag viewFlag)
|
||||
{
|
||||
//TODO: aspect ratio is valid only if viewBox was set
|
||||
|
||||
|
@ -880,5 +880,5 @@ unique_ptr<Scene> svgSceneBuild(SvgLoaderData& loaderData, Box vBox, float w, fl
|
|||
loaderData.doc->node.doc.w = w;
|
||||
loaderData.doc->node.doc.h = h;
|
||||
|
||||
return root;
|
||||
return root.release();
|
||||
}
|
||||
|
|
|
@ -25,6 +25,6 @@
|
|||
|
||||
#include "tvgCommon.h"
|
||||
|
||||
unique_ptr<Scene> svgSceneBuild(SvgLoaderData& loaderData, Box vBox, float w, float h, AspectRatioAlign align, AspectRatioMeetOrSlice meetOrSlice, const string& svgPath, SvgViewFlag viewFlag);
|
||||
Scene* svgSceneBuild(SvgLoaderData& loaderData, Box vBox, float w, float h, AspectRatioAlign align, AspectRatioMeetOrSlice meetOrSlice, const string& svgPath, SvgViewFlag viewFlag);
|
||||
|
||||
#endif //_TVG_SVG_SCENE_BUILDER_H_
|
||||
|
|
|
@ -483,7 +483,7 @@ static Paint* _parsePaint(TvgBinBlock baseBlock)
|
|||
/* External Class Implementation */
|
||||
/************************************************************************/
|
||||
|
||||
unique_ptr<Scene> TvgBinInterpreter::run(const char *ptr, const char* end)
|
||||
Scene* TvgBinInterpreter::run(const char *ptr, const char* end)
|
||||
{
|
||||
auto scene = Scene::gen();
|
||||
if (!scene) return nullptr;
|
||||
|
@ -498,5 +498,5 @@ unique_ptr<Scene> TvgBinInterpreter::run(const char *ptr, const char* end)
|
|||
ptr = block.end;
|
||||
}
|
||||
|
||||
return scene;
|
||||
return scene.release();
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ public:
|
|||
|
||||
/* ptr: points the tvg binary body (after header)
|
||||
end: end of the tvg binary data */
|
||||
virtual unique_ptr<Scene> run(const char* ptr, const char* end) = 0;
|
||||
virtual Scene* run(const char* ptr, const char* end) = 0;
|
||||
};
|
||||
|
||||
|
||||
|
@ -47,7 +47,7 @@ public:
|
|||
class TvgBinInterpreter : public TvgBinInterpreterBase
|
||||
{
|
||||
public:
|
||||
unique_ptr<Scene> run(const char* ptr, const char* end) override;
|
||||
Scene* run(const char* ptr, const char* end) override;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -103,8 +103,6 @@ bool TvgLoader::readHeader()
|
|||
|
||||
void TvgLoader::run(unsigned tid)
|
||||
{
|
||||
if (root) root.reset();
|
||||
|
||||
auto data = const_cast<char*>(ptr);
|
||||
|
||||
if (compressed) {
|
||||
|
@ -223,8 +221,8 @@ bool TvgLoader::read()
|
|||
}
|
||||
|
||||
|
||||
unique_ptr<Paint> TvgLoader::paint()
|
||||
Paint* TvgLoader::paint()
|
||||
{
|
||||
this->done();
|
||||
return std::move(root);
|
||||
return root;
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ public:
|
|||
const char* ptr = nullptr;
|
||||
uint32_t size = 0;
|
||||
uint16_t version = 0;
|
||||
unique_ptr<Scene> root = nullptr;
|
||||
Scene* root = nullptr;
|
||||
TvgBinInterpreterBase* interpreter = nullptr;
|
||||
uint32_t uncompressedSize = 0;
|
||||
uint32_t compressedSize = 0;
|
||||
|
@ -51,7 +51,7 @@ public:
|
|||
bool read() override;
|
||||
bool resize(Paint* paint, float w, float h) override;
|
||||
|
||||
unique_ptr<Paint> paint() override;
|
||||
Paint* paint() override;
|
||||
|
||||
private:
|
||||
bool readHeader();
|
||||
|
|
|
@ -70,7 +70,7 @@ struct LoadModule
|
|||
}
|
||||
|
||||
virtual unique_ptr<Surface> bitmap() { return nullptr; }
|
||||
virtual unique_ptr<Paint> paint() { return nullptr; }
|
||||
virtual Paint* paint() { return nullptr; }
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -30,8 +30,8 @@ RenderUpdateFlag Picture::Impl::load()
|
|||
{
|
||||
if (loader) {
|
||||
if (!paint) {
|
||||
if (auto p = loader->paint()) {
|
||||
paint = p.release();
|
||||
paint = loader->paint();
|
||||
if (paint) {
|
||||
if (w != loader->w || h != loader->h) {
|
||||
if (!resizing) {
|
||||
w = loader->w;
|
||||
|
@ -40,7 +40,7 @@ RenderUpdateFlag Picture::Impl::load()
|
|||
loader->resize(paint, w, h);
|
||||
resizing = false;
|
||||
}
|
||||
if (paint) return RenderUpdateFlag::None;
|
||||
return RenderUpdateFlag::None;
|
||||
}
|
||||
} else loader->sync();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue