examples: split Tvg to TvgSaver, PictureTvg
authorHermet Park <chuneon.park@samsung.com>
Tue, 20 Jul 2021 04:53:17 +0000 (13:53 +0900)
committerJunsuChoi <jsuya.choi@samsung.com>
Thu, 22 Jul 2021 08:24:22 +0000 (17:24 +0900)
We'd like to clearly split showcases TvgSaver & Picture.

src/examples/PictureJpg.cpp
src/examples/PictureTvg.cpp [new file with mode: 0644]
src/examples/TvgSaver.cpp [moved from src/examples/Tvg.cpp with 73% similarity]
src/examples/images/test.tvg
src/examples/meson.build

index 3174436..ed51904 100644 (file)
@@ -46,7 +46,7 @@ void tvgDrawCmds(tvg::Canvas* canvas)
 
     //Open file manually
     ifstream file(EXAMPLE_DIR"/logo.jpg");
-    if (!file.is_open()) return ;
+    if (!file.is_open()) return;
     auto size = sizeof(uint32_t) * (1000*1000);
     auto data = (char*)malloc(size);
     if (!data) return;
diff --git a/src/examples/PictureTvg.cpp b/src/examples/PictureTvg.cpp
new file mode 100644 (file)
index 0000000..4fdbce7
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include "Common.h"
+
+/************************************************************************/
+/* Drawing Commands                                                     */
+/************************************************************************/
+
+
+void tvgDrawCmds(tvg::Canvas* canvas)
+{
+    if (!canvas) return;
+
+    //load the tvg file
+    auto picture = tvg::Picture::gen();
+    if (picture->load(EXAMPLE_DIR"/test.tvg") != tvg::Result::Success) {
+        cout << "TVG is not supported. Did you enable TVG Loader?" << endl;
+        return;
+    }
+    canvas->push(move(picture));
+}
+
+
+/************************************************************************/
+/* Sw Engine Test Code                                                  */
+/************************************************************************/
+
+static unique_ptr<tvg::SwCanvas> swCanvas;
+
+void tvgSwTest(uint32_t* buffer)
+{
+    //Create a Canvas
+    swCanvas = tvg::SwCanvas::gen();
+    swCanvas->target(buffer, WIDTH, WIDTH, HEIGHT, tvg::SwCanvas::ARGB8888);
+
+    /* Push the shape into the Canvas drawing list
+       When this shape is into the canvas list, the shape could update & prepare
+       internal data asynchronously for coming rendering.
+       Canvas keeps this shape node unless user call canvas->clear() */
+    tvgDrawCmds(swCanvas.get());
+}
+
+void drawSwView(void* data, Eo* obj)
+{
+    if (swCanvas->draw() == tvg::Result::Success) {
+        swCanvas->sync();
+    }
+}
+
+
+/************************************************************************/
+/* GL Engine Test Code                                                  */
+/************************************************************************/
+
+static unique_ptr<tvg::GlCanvas> glCanvas;
+
+void initGLview(Evas_Object *obj)
+{
+    static constexpr auto BPP = 4;
+
+    //Create a Canvas
+    glCanvas = tvg::GlCanvas::gen();
+    glCanvas->target(nullptr, WIDTH * BPP, WIDTH, HEIGHT);
+
+    /* Push the shape into the Canvas drawing list
+       When this shape is into the canvas list, the shape could update & prepare
+       internal data asynchronously for coming rendering.
+       Canvas keeps this shape node unless user call canvas->clear() */
+    tvgDrawCmds(glCanvas.get());
+}
+
+void drawGLview(Evas_Object *obj)
+{
+    auto gl = elm_glview_gl_api_get(obj);
+    gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
+    gl->glClear(GL_COLOR_BUFFER_BIT);
+
+    if (glCanvas->draw() == tvg::Result::Success) {
+        glCanvas->sync();
+    }
+}
+
+
+/************************************************************************/
+/* Main Code                                                            */
+/************************************************************************/
+
+int main(int argc, char **argv)
+{
+    tvg::CanvasEngine tvgEngine = tvg::CanvasEngine::Sw;
+
+    if (argc > 1) {
+        if (!strcmp(argv[1], "gl")) tvgEngine = tvg::CanvasEngine::Gl;
+    }
+
+    //Initialize ThorVG Engine
+    if (tvgEngine == tvg::CanvasEngine::Sw) {
+        cout << "tvg engine: software" << endl;
+    } else {
+        cout << "tvg engine: opengl" << endl;
+    }
+
+    //Threads Count
+    auto threads = std::thread::hardware_concurrency();
+
+    //Initialize ThorVG Engine
+    if (tvg::Initializer::init(tvgEngine, threads) == tvg::Result::Success) {
+
+        elm_init(argc, argv);
+
+        if (tvgEngine == tvg::CanvasEngine::Sw) {
+            createSwView();
+        } else {
+            createGlView();
+        }
+
+        elm_run();
+        elm_shutdown();
+
+        //Terminate ThorVG Engine
+        tvg::Initializer::term(tvgEngine);
+
+    } else {
+        cout << "engine is not supported" << endl;
+    }
+    return 0;
+}
similarity index 73%
rename from src/examples/Tvg.cpp
rename to src/examples/TvgSaver.cpp
index 17254f4..181b8e9 100644 (file)
  * SOFTWARE.
  */
 
-#include "Common.h"
+#include <iostream>
 #include <fstream>
+#include <thread>
+#include <string.h>
+#include <thorvg.h>
+
+using namespace std;
 
 /************************************************************************/
 /* Drawing Commands                                                     */
@@ -42,10 +47,8 @@ void tvgDrawStar(tvg::Shape* star)
     star->close();
 }
 
-void tvgDrawCmds(tvg::Canvas* canvas)
+void exportTvg()
 {
-    if (!canvas) return;
-
     //prepare the main scene
     auto scene = tvg::Scene::gen();
 
@@ -175,78 +178,13 @@ void tvgDrawCmds(tvg::Canvas* canvas)
     scene->composite(move(mask), tvg::CompositeMethod::InvAlphaMask);
 
     //save the tvg file
-    if (tvg::Saver::save(move(scene), EXAMPLE_DIR"/test.tvg") != tvg::Result::Success) {
+    auto saver = tvg::Saver::gen();
+    if (saver->save(move(scene), EXAMPLE_DIR"/test.tvg") != tvg::Result::Success) {
         cout << "Problem with saving the test.tvg file." << endl;
         return;
     }
 
-    //load the tvg file
-    auto picture = tvg::Picture::gen();
-    if (picture->load(EXAMPLE_DIR"/test.tvg") != tvg::Result::Success) {
-        cout << "Problem with loading the test.tvg file." << endl;
-        return;
-    }
-    canvas->push(move(picture));
-}
-
-
-/************************************************************************/
-/* Sw Engine Test Code                                                  */
-/************************************************************************/
-
-static unique_ptr<tvg::SwCanvas> swCanvas;
-
-void tvgSwTest(uint32_t* buffer)
-{
-    //Create a Canvas
-    swCanvas = tvg::SwCanvas::gen();
-    swCanvas->target(buffer, WIDTH, WIDTH, HEIGHT, tvg::SwCanvas::ARGB8888);
-
-    /* Push the shape into the Canvas drawing list
-       When this shape is into the canvas list, the shape could update & prepare
-       internal data asynchronously for coming rendering.
-       Canvas keeps this shape node unless user call canvas->clear() */
-    tvgDrawCmds(swCanvas.get());
-}
-
-void drawSwView(void* data, Eo* obj)
-{
-    if (swCanvas->draw() == tvg::Result::Success) {
-        swCanvas->sync();
-    }
-}
-
-
-/************************************************************************/
-/* GL Engine Test Code                                                  */
-/************************************************************************/
-
-static unique_ptr<tvg::GlCanvas> glCanvas;
-
-void initGLview(Evas_Object *obj)
-{
-    static constexpr auto BPP = 4;
-
-    //Create a Canvas
-    glCanvas = tvg::GlCanvas::gen();
-    glCanvas->target(nullptr, WIDTH * BPP, WIDTH, HEIGHT);
-
-    /* Push the shape into the Canvas drawing list
-       When this shape is into the canvas list, the shape could update & prepare
-       internal data asynchronously for coming rendering.
-       Canvas keeps this shape node unless user call canvas->clear() */
-    tvgDrawCmds(glCanvas.get());
-}
-
-void drawGLview(Evas_Object *obj)
-{
-    auto gl = elm_glview_gl_api_get(obj);
-    gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
-    gl->glClear(GL_COLOR_BUFFER_BIT);
-
-    if (glCanvas->draw() == tvg::Result::Success) {
-        glCanvas->sync();
-    }
+    cout << "Successfully exported to test.tvg, Please check the result using PictureTvg!" << endl;
 }
 
 
@@ -275,16 +213,7 @@ int main(int argc, char **argv)
     //Initialize ThorVG Engine
     if (tvg::Initializer::init(tvgEngine, threads) == tvg::Result::Success) {
 
-        elm_init(argc, argv);
-
-        if (tvgEngine == tvg::CanvasEngine::Sw) {
-            createSwView();
-        } else {
-            createGlView();
-        }
-
-        elm_run();
-        elm_shutdown();
+        exportTvg();
 
         //Terminate ThorVG Engine
         tvg::Initializer::term(tvgEngine);
index 536d669..d4c4ed0 100644 (file)
Binary files a/src/examples/images/test.tvg and b/src/examples/images/test.tvg differ
index 3ef29bd..4049472 100644 (file)
@@ -25,6 +25,7 @@ source_file = [
     'PictureJpg.cpp',
     'PicturePng.cpp',
     'PictureRaw.cpp',
+    'PictureTvg.cpp',
     'RadialGradient.cpp',
     'Scene.cpp',
     'SceneTransform.cpp',
@@ -36,7 +37,7 @@ source_file = [
     'Svg.cpp',
     'Svg2.cpp',
     'Transform.cpp',
-    'Tvg.cpp',
+    'TvgSaver.cpp',
     'Update.cpp',
 ]