From 8e8611b608c33cc8907f696c22d022317577708a Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Mon, 16 Dec 2024 14:39:46 +0900 Subject: [PATCH] examples: added tint scene effect also, merged gausiaan, fill altogether in SceneEffects --- examples/EffectFill.cpp | 84 ------------------- ...ffectGaussianBlur.cpp => SceneEffects.cpp} | 60 ++++++++++--- examples/meson.build | 3 +- 3 files changed, 50 insertions(+), 97 deletions(-) delete mode 100644 examples/EffectFill.cpp rename examples/{EffectGaussianBlur.cpp => SceneEffects.cpp} (56%) diff --git a/examples/EffectFill.cpp b/examples/EffectFill.cpp deleted file mode 100644 index 02028248..00000000 --- a/examples/EffectFill.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2024 the ThorVG project. 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 "Example.h" - -/************************************************************************/ -/* ThorVG Drawing Contents */ -/************************************************************************/ - -struct UserExample : tvgexam::Example -{ - tvg::Scene* scene[3] = {nullptr, nullptr, nullptr}; - - bool content(tvg::Canvas* canvas, uint32_t w, uint32_t h) override - { - if (!canvas) return false; - - for (int i = 0; i < 3; ++i) { - scene[i] = tvg::Scene::gen(); - - auto picture = tvg::Picture::gen(); - picture->load(EXAMPLE_DIR"/svg/tiger.svg"); - picture->size(w / 3, h); - picture->translate((w / 3) * i, 0); - - scene[i]->push(picture); - canvas->push(scene[i]); - } - - return true; - } - - bool update(tvg::Canvas* canvas, uint32_t elapsed) override - { - if (!canvas) return false; - - auto progress = tvgexam::progress(elapsed, 2.5f, true); //2.5 seconds - - //Clear the previously applied effects - scene[0]->push(tvg::SceneEffect::ClearAll); - //Apply Fill post effect (rgba) - scene[0]->push(tvg::SceneEffect::Fill, 255, 255, 0, (int)(255.0f * progress)); - - scene[1]->push(tvg::SceneEffect::ClearAll); - scene[1]->push(tvg::SceneEffect::Fill, 255, 255, 255, (int)(255.0f * progress)); - - scene[2]->push(tvg::SceneEffect::ClearAll); - scene[2]->push(tvg::SceneEffect::Fill, 0, 255, 255, (int)(255.0f * progress)); - - canvas->update(); - - return true; - } - -}; - - -/************************************************************************/ -/* Entry Point */ -/************************************************************************/ - -int main(int argc, char **argv) -{ - return tvgexam::main(new UserExample, argc, argv, true, 1200, 400, 4, true); -} \ No newline at end of file diff --git a/examples/EffectGaussianBlur.cpp b/examples/SceneEffects.cpp similarity index 56% rename from examples/EffectGaussianBlur.cpp rename to examples/SceneEffects.cpp index b0356429..e9692040 100644 --- a/examples/EffectGaussianBlur.cpp +++ b/examples/SceneEffects.cpp @@ -26,24 +26,55 @@ /* ThorVG Drawing Contents */ /************************************************************************/ +#define SIZE 400 + struct UserExample : tvgexam::Example { - tvg::Scene* scene[3] = {nullptr, nullptr, nullptr}; //(for direction both, horizontal, vertical) + tvg::Scene* blur[3] = {nullptr, nullptr, nullptr}; //(for direction both, horizontal, vertical) + tvg::Scene* fill = nullptr; + tvg::Scene* tint = nullptr; bool content(tvg::Canvas* canvas, uint32_t w, uint32_t h) override { if (!canvas) return false; + //blur scene for (int i = 0; i < 3; ++i) { - scene[i] = tvg::Scene::gen(); + blur[i] = tvg::Scene::gen(); auto picture = tvg::Picture::gen(); picture->load(EXAMPLE_DIR"/svg/tiger.svg"); - picture->size(w / 3, h); - picture->translate((w / 3) * i, 0); + picture->size(SIZE, SIZE); + picture->translate(SIZE * i, 0); - scene[i]->push(picture); - canvas->push(scene[i]); + blur[i]->push(picture); + canvas->push(blur[i]); + } + + //fill scene + { + fill = tvg::Scene::gen(); + + auto picture = tvg::Picture::gen(); + picture->load(EXAMPLE_DIR"/svg/tiger.svg"); + picture->size(SIZE, SIZE); + picture->translate(0, SIZE); + + fill->push(picture); + canvas->push(fill); + } + + //tint scene + { + tint = tvg::Scene::gen(); + + auto picture = tvg::Picture::gen(); + picture->load(EXAMPLE_DIR"/svg/tiger.svg"); + picture->size(SIZE, SIZE); + picture->translate(SIZE, SIZE); + + tint->push(picture); + canvas->push(tint); } return true; @@ -55,13 +86,20 @@ struct UserExample : tvgexam::Example auto progress = tvgexam::progress(elapsed, 2.5f, true); //2.5 seconds + //Apply GaussianBlur post effect (sigma, direction, border option, quality) for (int i = 0; i < 3; ++i) { - //Clear the previously applied effects - scene[i]->push(tvg::SceneEffect::ClearAll); - //Apply GaussianBlur post effect (sigma, direction, border option, quality) - scene[i]->push(tvg::SceneEffect::GaussianBlur, 10.0f * progress, i, 0, 100); + blur[i]->push(tvg::SceneEffect::ClearAll); + blur[i]->push(tvg::SceneEffect::GaussianBlur, 10.0f * progress, i, 0, 100); } + //Apply Fill post effect (rgba) + fill->push(tvg::SceneEffect::ClearAll); + fill->push(tvg::SceneEffect::Fill, (int)(progress * 255), 0, 0, (int)(255.0f * progress)); + + //Apply Tint post effect (black:rgb, white:rgb, intensity) + tint->push(tvg::SceneEffect::ClearAll); + tint->push(tvg::SceneEffect::Tint, 0, 0, 0, 0, (int)(progress * 255), 0, progress * 100.0f); + canvas->update(); return true; @@ -76,5 +114,5 @@ struct UserExample : tvgexam::Example int main(int argc, char **argv) { - return tvgexam::main(new UserExample, argc, argv, true, 1200, 400, 4, true); + return tvgexam::main(new UserExample, argc, argv, true, SIZE * 3, SIZE * 2, 4, true); } \ No newline at end of file diff --git a/examples/meson.build b/examples/meson.build index 50f99a0a..1a470a66 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -30,8 +30,7 @@ source_file = [ 'DirectUpdate.cpp', 'Duplicate.cpp', 'EffectDropShadow.cpp', - 'EffectGaussianBlur.cpp', - 'EffectFill.cpp', + 'SceneEffects.cpp', 'FillRule.cpp', 'FillSpread.cpp', 'GifSaver.cpp',