common initializer: replace engine class with intializer 04/236204/3
authorHermet Park <chuneon.park@samsung.com>
Mon, 15 Jun 2020 12:01:46 +0000 (21:01 +0900)
committerHermet Park <chuneon.park@samsung.com>
Tue, 16 Jun 2020 03:54:53 +0000 (12:54 +0900)
This initializer will take over the global environments of tvg engines.

Change-Id: I7b99973dafaea57ddd3134800bd442ef4dc319ae

22 files changed:
inc/tizenvg.h
src/lib/meson.build
src/lib/tvgInitializer.cpp [moved from src/lib/tvgEngine.cpp with 58% similarity]
src/lib/tvgRenderCommon.h
test/testBlending.cpp
test/testBoundary.cpp
test/testComposition.cpp
test/testDirectUpdate.cpp
test/testGradient.cpp
test/testGradientTransform.cpp
test/testLinearGradient.cpp
test/testMultiShapes.cpp
test/testPath.cpp
test/testPathCopy.cpp
test/testRadialGradient.cpp
test/testScene.cpp
test/testSceneTransform.cpp
test/testShape.cpp
test/testStroke.cpp
test/testStrokeLine.cpp
test/testTransform.cpp
test/testUpdate.cpp

index 044cdfe..abb08d6 100644 (file)
@@ -69,7 +69,7 @@ enum class TVG_EXPORT PathCommand { Close = 0, MoveTo, LineTo, CubicTo };
 enum class TVG_EXPORT StrokeCap { Square = 0, Round, Butt };
 enum class TVG_EXPORT StrokeJoin { Bevel = 0, Round, Miter };
 enum class TVG_EXPORT FillSpread { Pad = 0, Reflect, Repeat };
-
+enum class TVG_EXPORT CanvasEngine { Sw = 0, Gl };
 
 struct Point
 {
@@ -131,6 +131,34 @@ public:
 
 
 /**
+ * @class Canvas
+ *
+ * @ingroup TizenVG
+ *
+ * @brief description...
+ *
+ */
+class TVG_EXPORT Canvas
+{
+public:
+    Canvas(RenderMethod*);
+    virtual ~Canvas();
+
+    Result reserve(uint32_t n) noexcept;
+    virtual Result push(std::unique_ptr<Paint> paint) noexcept;
+    virtual Result clear() noexcept;
+    virtual Result update() noexcept;
+    virtual Result update(Paint* paint) noexcept;
+    virtual Result draw(bool async = true) noexcept;
+    virtual Result sync() = 0;
+
+    _TVG_DECLARE_ACCESSOR(Scene);
+    _TVG_DECLARE_PRIVATE(Canvas);
+};
+
+
+
+/**
  * @class LinearGradient
  *
  * @ingroup TizenVG
@@ -174,32 +202,6 @@ public:
 };
 
 
-/**
- * @class Canvas
- *
- * @ingroup TizenVG
- *
- * @brief description...
- *
- */
-class TVG_EXPORT Canvas
-{
-public:
-    Canvas(RenderMethod*);
-    virtual ~Canvas();
-
-    Result reserve(uint32_t n) noexcept;
-    virtual Result push(std::unique_ptr<Paint> paint) noexcept;
-    virtual Result clear() noexcept;
-    virtual Result update() noexcept;
-    virtual Result update(Paint* paint) noexcept;
-    virtual Result draw(bool async = true) noexcept;
-    virtual Result sync() = 0;
-
-    _TVG_DECLARE_ACCESSOR(Scene);
-    _TVG_DECLARE_PRIVATE(Canvas);
-};
-
 
 /**
  * @class Shape
@@ -277,7 +279,7 @@ class TVG_EXPORT Scene final : public Paint
 public:
     ~Scene();
 
-    Result push(std::unique_ptr<Paint> shape) noexcept;
+    Result push(std::unique_ptr<Paint> paint) noexcept;
     Result reserve(uint32_t size) noexcept;
 
     Result rotate(float degree) noexcept override;
@@ -347,9 +349,10 @@ public:
  * @brief description...
  *
  */
-class TVG_EXPORT Engine final
+class TVG_EXPORT Initializer final
 {
 public:
+
     /**
      * @brief ...
      *
@@ -361,10 +364,10 @@ public:
      *
      * @see ...
      */
-    static Result init() noexcept;
-    static Result term() noexcept;
+    static Result init(CanvasEngine engine) noexcept;
+    static Result term(CanvasEngine engine) noexcept;
 
-    _TVG_DISABLE_CTOR(Engine);
+    _TVG_DISABLE_CTOR(Initializer);
 };
 
 } //namespace
index 5aba9bb..c936501 100644 (file)
@@ -9,9 +9,9 @@ source_file = [
    'tvgShapePath.h',
    'tvgShapeImpl.h',
    'tvgCanvas.cpp',
-   'tvgEngine.cpp',
    'tvgFill.cpp',
    'tvgGlCanvas.cpp',
+   'tvgInitializer.cpp',
    'tvgLinearGradient.cpp',
    'tvgRadialGradient.cpp',
    'tvgScene.cpp',
similarity index 58%
rename from src/lib/tvgEngine.cpp
rename to src/lib/tvgInitializer.cpp
index 5038cb8..ac6ce3a 100644 (file)
@@ -14,8 +14,8 @@
  *  limitations under the License.
  *
  */
-#ifndef _TVG_ENGINE_CPP_
-#define _TVG_ENGINE_CPP_
+#ifndef _TVG_INITIALIZER_CPP_
+#define _TVG_INITIALIZER_CPP_
 
 #include "tvgCommon.h"
 #include "tvgSwRenderer.h"
 /************************************************************************/
 /* Internal Class Implementation                                        */
 /************************************************************************/
-static bool initialized = false;
-
-
 
 /************************************************************************/
 /* External Class Implementation                                        */
 /************************************************************************/
 
-Result Engine::init() noexcept
+Result Initializer::init(CanvasEngine engine) noexcept
 {
-    if (initialized) return Result::InsufficientCondition;
+    if (engine == CanvasEngine::Sw) {
+        if (!SwRenderer::init()) return Result::InsufficientCondition;
+    } else if (engine == CanvasEngine::Gl) {
+        if (!GlRenderer::init()) return Result::InsufficientCondition;
+    } else {
+        return Result::InvalidArguments;
+    }
 
-    //TODO: Initialize Raster engines by configuration.
-    SwRenderer::init();
-    GlRenderer::init();
-
-    initialized = true;
+    //TODO: check modules then enable them
+    //1. TVG
+    //2. SVG
 
     return Result::Success;
 }
 
 
-Result Engine::term() noexcept
+Result Initializer::term(CanvasEngine engine) noexcept
 {
-    if (!initialized) return Result::InsufficientCondition;
-
-    //TODO: Terminate only allowed engines.
-    SwRenderer::term();
-    GlRenderer::term();
+    //TODO: deinitialize modules
 
-    initialized = false;
+    if (engine == CanvasEngine::Sw) {
+        if (!SwRenderer::term()) return Result::InsufficientCondition;
+    } else if (engine == CanvasEngine::Gl) {
+        if (!GlRenderer::term()) return Result::InsufficientCondition;
+    } else {
+        return Result::InvalidArguments;
+    }
 
     return Result::Success;
 }
 
-#endif /* _TVG_ENGINE_CPP_ */
+#endif /* _TVG_INITIALIZER_CPP_ */
index f89d949..a581067 100644 (file)
@@ -136,28 +136,28 @@ struct RenderInitializer
     uint32_t refCnt = 0;
     bool initialized = false;
 
-    static int init(RenderInitializer& renderInit, RenderMethod* engine)
+    static bool init(RenderInitializer& renderInit, RenderMethod* engine)
     {
         assert(engine);
-        if (renderInit.pInst || renderInit.refCnt > 0) return -1;
+        if (renderInit.pInst || renderInit.refCnt > 0) return false;
         renderInit.pInst = engine;
         renderInit.refCnt = 0;
         renderInit.initialized = true;
-        return 0;
+        return true;
     }
 
-    static int term(RenderInitializer& renderInit)
+    static bool term(RenderInitializer& renderInit)
     {
-        if (!renderInit.pInst || !renderInit.initialized) return -1;
+        if (!renderInit.pInst || !renderInit.initialized) return false;
 
         renderInit.initialized = false;
 
         //Still it's refered....
-        if (renderInit.refCnt > 0) return  0;
+        if (renderInit.refCnt > 0) return  true;
         delete(renderInit.pInst);
         renderInit.pInst = nullptr;
 
-        return 0;
+        return true;
     }
 
     static uint32_t unref(RenderInitializer& renderInit)
index 58ae025..a5559d4 100644 (file)
@@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT];
 void tvgtest()
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     //Create a Canvas
     auto canvas = tvg::SwCanvas::gen();
@@ -63,7 +63,7 @@ void tvgtest()
     canvas->sync();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
 
 void
index c5d39f6..701bb84 100644 (file)
@@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT];
 void tvgtest()
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     //Create a Canvas
     auto canvas = tvg::SwCanvas::gen();
@@ -53,7 +53,7 @@ void tvgtest()
     canvas->sync();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
 
 void
index 57a8e43..d8ca979 100644 (file)
@@ -10,7 +10,7 @@ static uint32_t buffer[WIDTH * HEIGHT];
 int main(int argc, char **argv)
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     //Create a Composition Source Canvas
     auto canvas1 = tvg::SwCanvas::gen(buffer, WIDTH, HEIGHT);
@@ -31,5 +31,5 @@ int main(int argc, char **argv)
     canvas2->sync();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
index e1a4c60..eb3a9dc 100644 (file)
@@ -69,7 +69,7 @@ win_del(void *data, Evas_Object *o, void *ev)
 int main(int argc, char **argv)
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     tvgtest();
 
@@ -100,5 +100,5 @@ int main(int argc, char **argv)
     elm_shutdown();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
index 6a7b6ba..cf33a1e 100644 (file)
@@ -10,7 +10,7 @@ static uint32_t buffer[WIDTH * HEIGHT];
 int main(int argc, char **argv)
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     //Create a Canvas
     auto canvas = tvg::SwCanvas::gen(buffer, WIDTH, HEIGHT);
@@ -48,5 +48,5 @@ int main(int argc, char **argv)
     canvas->sync();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
index 0b4b677..90fab16 100644 (file)
@@ -135,7 +135,7 @@ win_del(void *data, Evas_Object *o, void *ev)
 int main(int argc, char **argv)
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     tvgtest();
 
@@ -166,5 +166,5 @@ int main(int argc, char **argv)
     elm_shutdown();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
index 08cdb66..decf263 100644 (file)
@@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT];
 void tvgtest()
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     //Create a Canvas
     auto canvas = tvg::SwCanvas::gen();
@@ -81,7 +81,7 @@ void tvgtest()
     canvas->sync();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
 
 void
index 2539382..e6db3bb 100644 (file)
@@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT];
 void tvgtest()
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     //Create a Canvas
     auto canvas = tvg::SwCanvas::gen();
@@ -41,7 +41,7 @@ void tvgtest()
     canvas->sync();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
 
 void
index c2ca875..3d52003 100644 (file)
@@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT];
 void tvgtest()
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     //Create a Canvas
     auto canvas = tvg::SwCanvas::gen();
@@ -56,7 +56,7 @@ void tvgtest()
     canvas->sync();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
 
 void
index 28d19eb..8ce33c3 100644 (file)
@@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT];
 void tvgtest()
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     //Create a Canvas
     auto canvas = tvg::SwCanvas::gen();
@@ -96,7 +96,7 @@ void tvgtest()
     canvas->sync();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
 
 void
index f9ed87d..b50204b 100644 (file)
@@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT];
 void tvgtest()
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     //Create a Canvas
     auto canvas = tvg::SwCanvas::gen();
@@ -81,7 +81,7 @@ void tvgtest()
     canvas->sync();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
 
 void
index f7c9ea5..e134237 100644 (file)
@@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT];
 void tvgtest()
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     //Create a Canvas
     auto canvas = tvg::SwCanvas::gen();
@@ -87,7 +87,7 @@ void tvgtest()
     canvas->sync();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
 
 void
index 975f4fa..11dade0 100644 (file)
@@ -129,7 +129,7 @@ win_del(void *data, Evas_Object *o, void *ev)
 int main(int argc, char **argv)
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     tvgtest();
 
@@ -159,5 +159,5 @@ int main(int argc, char **argv)
     elm_shutdown();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
index 8cff17d..16fc1a0 100644 (file)
@@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT];
 void tvgtest()
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     //Create a Canvas
     auto canvas = tvg::SwCanvas::gen();
@@ -35,7 +35,7 @@ void tvgtest()
     canvas->sync();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
 
 void
index b17c3a1..a7ae5d0 100644 (file)
@@ -12,7 +12,7 @@ static uint32_t buffer[WIDTH * HEIGHT];
 void tvgtest()
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     //Create a Canvas
     auto canvas = tvg::SwCanvas::gen();
@@ -80,7 +80,7 @@ void tvgtest()
     canvas->sync();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
 
 void
index 1288c07..61e035e 100644 (file)
@@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT];
 void tvgtest()
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     //Create a Canvas
     auto canvas = tvg::SwCanvas::gen();
@@ -116,7 +116,7 @@ void tvgtest()
     canvas->sync();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
 
 void
index 0a126cc..a99708d 100644 (file)
@@ -98,7 +98,7 @@ win_del(void *data, Evas_Object *o, void *ev)
 int main(int argc, char **argv)
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     tvgtest();
 
@@ -129,5 +129,5 @@ int main(int argc, char **argv)
     elm_shutdown();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }
index 453b47c..0ee9412 100644 (file)
@@ -59,7 +59,7 @@ win_del(void *data, Evas_Object *o, void *ev)
 int main(int argc, char **argv)
 {
     //Initialize TizenVG Engine
-    tvg::Engine::init();
+    tvg::Initializer::init(tvg::CanvasEngine::Sw);
 
     tvgtest();
 
@@ -90,5 +90,5 @@ int main(int argc, char **argv)
     elm_shutdown();
 
     //Terminate TizenVG Engine
-    tvg::Engine::term();
+    tvg::Initializer::term(tvg::CanvasEngine::Sw);
 }