From d25d7f348fef7e8987025cb72e541cd216bdb717 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Tue, 21 Nov 2023 15:50:51 +0900 Subject: [PATCH] renderer, loader: minor code refactoring. - sync with its file name - remove unnecessary section comments - compact binary size (-300) - private Task::run() methods from the loaders --- src/loaders/external_jpg/tvgJpgLoader.cpp | 1 - src/loaders/external_jpg/tvgJpgLoader.h | 2 + src/loaders/external_png/tvgPngLoader.cpp | 1 - src/loaders/external_png/tvgPngLoader.h | 1 + src/loaders/external_webp/tvgWebpLoader.cpp | 25 ++++--- src/loaders/external_webp/tvgWebpLoader.h | 3 +- src/loaders/jpg/tvgJpgLoader.cpp | 23 +++---- src/loaders/jpg/tvgJpgLoader.h | 3 +- src/loaders/png/tvgPngLoader.cpp | 32 ++++----- src/loaders/png/tvgPngLoader.h | 2 +- src/renderer/tvgCanvas.h | 9 +-- src/renderer/tvgPicture.cpp | 65 ++++++++++++++++++ src/renderer/tvgPicture.h | 74 +++------------------ src/renderer/tvgScene.h | 9 +-- src/renderer/tvgShape.h | 9 +-- 15 files changed, 130 insertions(+), 129 deletions(-) diff --git a/src/loaders/external_jpg/tvgJpgLoader.cpp b/src/loaders/external_jpg/tvgJpgLoader.cpp index f40851a5..d147e1fc 100644 --- a/src/loaders/external_jpg/tvgJpgLoader.cpp +++ b/src/loaders/external_jpg/tvgJpgLoader.cpp @@ -22,7 +22,6 @@ #include #include -#include "tvgLoader.h" #include "tvgJpgLoader.h" /************************************************************************/ diff --git a/src/loaders/external_jpg/tvgJpgLoader.h b/src/loaders/external_jpg/tvgJpgLoader.h index c8c93458..f9878355 100644 --- a/src/loaders/external_jpg/tvgJpgLoader.h +++ b/src/loaders/external_jpg/tvgJpgLoader.h @@ -23,6 +23,8 @@ #ifndef _TVG_JPG_LOADER_H_ #define _TVG_JPG_LOADER_H_ +#include "tvgLoader.h" + using tjhandle = void*; //TODO: Use Task? diff --git a/src/loaders/external_png/tvgPngLoader.cpp b/src/loaders/external_png/tvgPngLoader.cpp index 30a66f9c..adf3b6e0 100644 --- a/src/loaders/external_png/tvgPngLoader.cpp +++ b/src/loaders/external_png/tvgPngLoader.cpp @@ -20,7 +20,6 @@ * SOFTWARE. */ -#include "tvgLoader.h" #include "tvgPngLoader.h" /************************************************************************/ diff --git a/src/loaders/external_png/tvgPngLoader.h b/src/loaders/external_png/tvgPngLoader.h index 5354e1bd..7d3f7c7c 100644 --- a/src/loaders/external_png/tvgPngLoader.h +++ b/src/loaders/external_png/tvgPngLoader.h @@ -24,6 +24,7 @@ #define _TVG_PNG_LOADER_H_ #include +#include "tvgLoader.h" class PngLoader : public LoadModule { diff --git a/src/loaders/external_webp/tvgWebpLoader.cpp b/src/loaders/external_webp/tvgWebpLoader.cpp index b8649c63..cbb88932 100644 --- a/src/loaders/external_webp/tvgWebpLoader.cpp +++ b/src/loaders/external_webp/tvgWebpLoader.cpp @@ -23,7 +23,6 @@ #include #include -#include "tvgLoader.h" #include "tvgWebpLoader.h" @@ -40,6 +39,17 @@ void WebpLoader::clear() } +void WebpLoader::run(unsigned tid) +{ + if (image) { + WebPFree(image); + image = nullptr; + } + + image = WebPDecodeBGRA(data, size, nullptr, nullptr); +} + + /************************************************************************/ /* External Class Implementation */ /************************************************************************/ @@ -156,15 +166,4 @@ unique_ptr WebpLoader::bitmap() surface->premultiplied = false; surface->owner = true; return unique_ptr(surface); -} - - -void WebpLoader::run(unsigned tid) -{ - if (image) { - WebPFree(image); - image = nullptr; - } - - image = WebPDecodeBGRA(data, size, nullptr, nullptr); -} +} \ No newline at end of file diff --git a/src/loaders/external_webp/tvgWebpLoader.h b/src/loaders/external_webp/tvgWebpLoader.h index 38c6d82e..a073ea6c 100644 --- a/src/loaders/external_webp/tvgWebpLoader.h +++ b/src/loaders/external_webp/tvgWebpLoader.h @@ -23,6 +23,7 @@ #ifndef _TVG_WEBP_LOADER_H_ #define _TVG_WEBP_LOADER_H_ +#include "tvgLoader.h" #include "tvgTaskScheduler.h" class WebpLoader : public LoadModule, public Task @@ -38,10 +39,10 @@ public: bool close() override; unique_ptr bitmap() override; - void run(unsigned tid) override; private: void clear(); + void run(unsigned tid) override; unsigned char* data = nullptr; unsigned char *image = nullptr; diff --git a/src/loaders/jpg/tvgJpgLoader.cpp b/src/loaders/jpg/tvgJpgLoader.cpp index 6edda86c..3bbe5e46 100644 --- a/src/loaders/jpg/tvgJpgLoader.cpp +++ b/src/loaders/jpg/tvgJpgLoader.cpp @@ -21,7 +21,6 @@ */ #include -#include "tvgLoader.h" #include "tvgJpgLoader.h" /************************************************************************/ @@ -38,6 +37,16 @@ void JpgLoader::clear() } +void JpgLoader::run(unsigned tid) +{ + if (image) { + free(image); + image = nullptr; + } + image = jpgdDecompress(decoder); +} + + /************************************************************************/ /* External Class Implementation */ /************************************************************************/ @@ -130,14 +139,4 @@ unique_ptr JpgLoader::bitmap() surface->owner = true; return unique_ptr(surface); -} - - -void JpgLoader::run(unsigned tid) -{ - if (image) { - free(image); - image = nullptr; - } - image = jpgdDecompress(decoder); -} +} \ No newline at end of file diff --git a/src/loaders/jpg/tvgJpgLoader.h b/src/loaders/jpg/tvgJpgLoader.h index 6d2febe9..fd39de97 100644 --- a/src/loaders/jpg/tvgJpgLoader.h +++ b/src/loaders/jpg/tvgJpgLoader.h @@ -23,6 +23,7 @@ #ifndef _TVG_JPG_LOADER_H_ #define _TVG_JPG_LOADER_H_ +#include "tvgLoader.h" #include "tvgTaskScheduler.h" #include "tvgJpgd.h" @@ -35,6 +36,7 @@ private: bool freeData = false; void clear(); + void run(unsigned tid) override; public: ~JpgLoader(); @@ -46,7 +48,6 @@ public: bool close() override; unique_ptr bitmap() override; - void run(unsigned tid) override; }; #endif //_TVG_JPG_LOADER_H_ diff --git a/src/loaders/png/tvgPngLoader.cpp b/src/loaders/png/tvgPngLoader.cpp index 32ff57c5..dcda8554 100644 --- a/src/loaders/png/tvgPngLoader.cpp +++ b/src/loaders/png/tvgPngLoader.cpp @@ -40,6 +40,21 @@ void PngLoader::clear() } +void PngLoader::run(unsigned tid) +{ + if (image) { + free(image); + image = nullptr; + } + auto width = static_cast(w); + auto height = static_cast(h); + + if (lodepng_decode(&image, &width, &height, &state, data, size)) { + TVGERR("PNG", "Failed to decode image"); + } +} + + /************************************************************************/ /* External Class Implementation */ /************************************************************************/ @@ -167,19 +182,4 @@ unique_ptr PngLoader::bitmap() surface->owner = true; return unique_ptr(surface); -} - - -void PngLoader::run(unsigned tid) -{ - if (image) { - free(image); - image = nullptr; - } - auto width = static_cast(w); - auto height = static_cast(h); - - if (lodepng_decode(&image, &width, &height, &state, data, size)) { - TVGERR("PNG", "Failed to decode image"); - } -} +} \ No newline at end of file diff --git a/src/loaders/png/tvgPngLoader.h b/src/loaders/png/tvgPngLoader.h index 579d197a..071279d2 100644 --- a/src/loaders/png/tvgPngLoader.h +++ b/src/loaders/png/tvgPngLoader.h @@ -37,6 +37,7 @@ private: bool freeData = false; void clear(); + void run(unsigned tid) override; public: PngLoader(); @@ -49,7 +50,6 @@ public: bool close() override; unique_ptr bitmap() override; - void run(unsigned tid) override; }; #endif //_TVG_PNG_LOADER_H_ diff --git a/src/renderer/tvgCanvas.h b/src/renderer/tvgCanvas.h index e2a9b788..ad3804d4 100644 --- a/src/renderer/tvgCanvas.h +++ b/src/renderer/tvgCanvas.h @@ -20,14 +20,11 @@ * SOFTWARE. */ -#ifndef _TVG_CANVAS_IMPL_H_ -#define _TVG_CANVAS_IMPL_H_ +#ifndef _TVG_CANVAS_H_ +#define _TVG_CANVAS_H_ #include "tvgPaint.h" -/************************************************************************/ -/* Internal Class Implementation */ -/************************************************************************/ struct Canvas::Impl { @@ -151,4 +148,4 @@ struct Canvas::Impl } }; -#endif /* _TVG_CANVAS_IMPL_H_ */ +#endif /* _TVG_CANVAS_H_ */ diff --git a/src/renderer/tvgPicture.cpp b/src/renderer/tvgPicture.cpp index 8dd0b704..82104d80 100644 --- a/src/renderer/tvgPicture.cpp +++ b/src/renderer/tvgPicture.cpp @@ -55,6 +55,71 @@ RenderUpdateFlag Picture::Impl::load() return RenderUpdateFlag::None; } + +bool Picture::Impl::needComposition(uint8_t opacity) +{ + //In this case, paint(scene) would try composition itself. + if (opacity < 255) return false; + + //Composition test + const Paint* target; + auto method = picture->composite(&target); + if (!target || method == tvg::CompositeMethod::ClipPath) return false; + if (target->pImpl->opacity == 255 || target->pImpl->opacity == 0) return false; + + return true; +} + + +bool Picture::Impl::render(RenderMethod &renderer) +{ + bool ret = false; + if (surface) return renderer.renderImage(rd); + else if (paint) { + Compositor* cmp = nullptr; + if (needComp) { + cmp = renderer.target(bounds(renderer), renderer.colorSpace()); + renderer.beginComposite(cmp, CompositeMethod::None, 255); + } + ret = paint->pImpl->render(renderer); + if (cmp) renderer.endComposite(cmp); + } + return ret; +} + + +bool Picture::Impl::size(float w, float h) +{ + this->w = w; + this->h = h; + resizing = true; + return true; +} + + +RenderRegion Picture::Impl::bounds(RenderMethod& renderer) +{ + if (rd) return renderer.region(rd); + if (paint) return paint->pImpl->bounds(renderer); + return {0, 0, 0, 0}; +} + + +RenderTransform Picture::Impl::resizeTransform(const RenderTransform* pTransform) +{ + //Overriding Transformation by the desired image size + auto sx = w / loader->w; + auto sy = h / loader->h; + auto scale = sx < sy ? sx : sy; + + RenderTransform tmp; + tmp.m = {scale, 0, 0, 0, scale, 0, 0, 0, 1}; + + if (!pTransform) return tmp; + else return RenderTransform(pTransform, &tmp); +} + + /************************************************************************/ /* External Class Implementation */ /************************************************************************/ diff --git a/src/renderer/tvgPicture.h b/src/renderer/tvgPicture.h index 5c732262..65a35fc6 100644 --- a/src/renderer/tvgPicture.h +++ b/src/renderer/tvgPicture.h @@ -20,16 +20,13 @@ * SOFTWARE. */ -#ifndef _TVG_PICTURE_IMPL_H_ -#define _TVG_PICTURE_IMPL_H_ +#ifndef _TVG_PICTURE_H_ +#define _TVG_PICTURE_H_ #include #include "tvgPaint.h" #include "tvgLoader.h" -/************************************************************************/ -/* Internal Class Implementation */ -/************************************************************************/ struct PictureIterator : Iterator { @@ -71,6 +68,12 @@ struct Picture::Impl bool resizing = false; bool needComp = false; //need composition + RenderTransform resizeTransform(const RenderTransform* pTransform); + bool needComposition(uint8_t opacity); + bool render(RenderMethod &renderer); + bool size(float w, float h); + RenderRegion bounds(RenderMethod& renderer); + Impl(Picture* p) : picture(p) { } @@ -89,34 +92,6 @@ struct Picture::Impl return true; } - RenderTransform resizeTransform(const RenderTransform* pTransform) - { - //Overriding Transformation by the desired image size - auto sx = w / loader->w; - auto sy = h / loader->h; - auto scale = sx < sy ? sx : sy; - - RenderTransform tmp; - tmp.m = {scale, 0, 0, 0, scale, 0, 0, 0, 1}; - - if (!pTransform) return tmp; - else return RenderTransform(pTransform, &tmp); - } - - bool needComposition(uint8_t opacity) - { - //In this case, paint(scene) would try composition itself. - if (opacity < 255) return false; - - //Composition test - const Paint* target; - auto method = picture->composite(&target); - if (!target || method == tvg::CompositeMethod::ClipPath) return false; - if (target->pImpl->opacity == 255 || target->pImpl->opacity == 0) return false; - - return true; - } - RenderData update(RenderMethod &renderer, const RenderTransform* pTransform, Array& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper) { auto flag = load(); @@ -135,30 +110,6 @@ struct Picture::Impl return rd; } - bool render(RenderMethod &renderer) - { - bool ret = false; - if (surface) return renderer.renderImage(rd); - else if (paint) { - Compositor* cmp = nullptr; - if (needComp) { - cmp = renderer.target(bounds(renderer), renderer.colorSpace()); - renderer.beginComposite(cmp, CompositeMethod::None, 255); - } - ret = paint->pImpl->render(renderer); - if (cmp) renderer.endComposite(cmp); - } - return ret; - } - - bool size(float w, float h) - { - this->w = w; - this->h = h; - resizing = true; - return true; - } - bool bounds(float* x, float* y, float* w, float* h, bool stroking) { if (rm.triangleCnt > 0) { @@ -195,13 +146,6 @@ struct Picture::Impl return true; } - RenderRegion bounds(RenderMethod& renderer) - { - if (rd) return renderer.region(rd); - if (paint) return paint->pImpl->bounds(renderer); - return {0, 0, 0, 0}; - } - Result load(const string& path) { if (paint || surface) return Result::InsufficientCondition; @@ -308,4 +252,4 @@ struct Picture::Impl RenderUpdateFlag load(); }; -#endif //_TVG_PICTURE_IMPL_H_ +#endif //_TVG_PICTURE_H_ diff --git a/src/renderer/tvgScene.h b/src/renderer/tvgScene.h index b558e95a..8ae2055e 100644 --- a/src/renderer/tvgScene.h +++ b/src/renderer/tvgScene.h @@ -20,15 +20,12 @@ * SOFTWARE. */ -#ifndef _TVG_SCENE_IMPL_H_ -#define _TVG_SCENE_IMPL_H_ +#ifndef _TVG_SCENE_H_ +#define _TVG_SCENE_H_ #include #include "tvgPaint.h" -/************************************************************************/ -/* Internal Class Implementation */ -/************************************************************************/ struct SceneIterator : Iterator { @@ -247,4 +244,4 @@ struct Scene::Impl } }; -#endif //_TVG_SCENE_IMPL_H_ +#endif //_TVG_SCENE_H_ diff --git a/src/renderer/tvgShape.h b/src/renderer/tvgShape.h index 281a10dc..dbb1c646 100644 --- a/src/renderer/tvgShape.h +++ b/src/renderer/tvgShape.h @@ -20,16 +20,13 @@ * SOFTWARE. */ -#ifndef _TVG_SHAPE_IMPL_H_ -#define _TVG_SHAPE_IMPL_H_ +#ifndef _TVG_SHAPE_H_ +#define _TVG_SHAPE_H_ #include #include "tvgMath.h" #include "tvgPaint.h" -/************************************************************************/ -/* Internal Class Implementation */ -/************************************************************************/ struct Shape::Impl { @@ -388,4 +385,4 @@ struct Shape::Impl } }; -#endif //_TVG_SHAPE_IMPL_H_ +#endif //_TVG_SHAPE_H_