From e2f1557de5e39d7c8606b5a0a74d4f269bae00bf Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Wed, 5 Mar 2025 15:10:23 +0900 Subject: [PATCH] examples: chores++ - removed AnimatedMasking. - unified ImageScaleUp/Down. - build GifSaver only gif_saver is enabled. --- examples/AnimateMasking.cpp | 100 ------------------ examples/ImageRotation.cpp | 2 +- examples/ImageScaleUp.cpp | 70 ------------ .../{ImageScaleDown.cpp => ImageScaling.cpp} | 8 +- examples/meson.build | 12 +-- .../image/{scaledown.jpg => scale.jpg} | Bin examples/resources/image/scaleup.jpg | Bin 24723 -> 0 bytes 7 files changed, 11 insertions(+), 181 deletions(-) delete mode 100644 examples/AnimateMasking.cpp delete mode 100644 examples/ImageScaleUp.cpp rename examples/{ImageScaleDown.cpp => ImageScaling.cpp} (90%) rename examples/resources/image/{scaledown.jpg => scale.jpg} (100%) delete mode 100644 examples/resources/image/scaleup.jpg diff --git a/examples/AnimateMasking.cpp b/examples/AnimateMasking.cpp deleted file mode 100644 index 19fa004d..00000000 --- a/examples/AnimateMasking.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2020 - 2025 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::Shape* maskShape = nullptr; - tvg::Shape* mask = nullptr; - - bool content(tvg::Canvas* canvas, uint32_t w, uint32_t h) override - { - if (!canvas) return false; - - // background - auto bg = tvg::Shape::gen(); - bg->appendRect(0, 0, w, h); - bg->fill(255, 255, 255); - canvas->push(bg); - - //image - auto picture1 = tvg::Picture::gen(); - if (!tvgexam::verify(picture1->load(EXAMPLE_DIR"/svg/cartman.svg"))) return false; - picture1->size(400, 400); - canvas->push(picture1); - - auto picture2 = tvg::Picture::gen(); - picture2->load(EXAMPLE_DIR"/svg/logo.svg"); - picture2->size(400, 400); - - //mask - maskShape = tvg::Shape::gen(); - maskShape->appendCircle(180, 180, 75, 75); - maskShape->fill(125, 125, 125); - maskShape->strokeFill(25, 25, 25); - maskShape->strokeJoin(tvg::StrokeJoin::Round); - maskShape->strokeWidth(10); - canvas->push(maskShape); - - mask = tvg::Shape::gen(); - mask->appendCircle(180, 180, 75, 75); - mask->fill(255, 255, 255); //AlphaMask RGB channels are unused. - - picture2->mask(mask, tvg::MaskMethod::Alpha); - canvas->push(picture2); - - return true; - } - - bool update(tvg::Canvas* canvas, uint32_t elapsed) override - { - if (!canvas) return false; - - /* Update shape directly. - You can update only necessary properties of this shape, - while retaining other properties. */ - auto progress = tvgexam::progress(elapsed, 3.0f, true); //play time 3 sec. - - // Translate mask object with its stroke & update - maskShape->translate(0 , progress * 300 - 100); - mask->translate(0 , progress * 300 - 100); - - canvas->update(); - - return true; - } -}; - - -/************************************************************************/ -/* Entry Point */ -/************************************************************************/ - -int main(int argc, char **argv) -{ - return tvgexam::main(new UserExample, argc, argv); -} \ No newline at end of file diff --git a/examples/ImageRotation.cpp b/examples/ImageRotation.cpp index 23822218..4b14f431 100644 --- a/examples/ImageRotation.cpp +++ b/examples/ImageRotation.cpp @@ -43,7 +43,7 @@ struct UserExample : tvgexam::Example picture = tvg::Picture::gen(); - if (!tvgexam::verify(picture->load(EXAMPLE_DIR"/image/scaledown.jpg"))) return false; + if (!tvgexam::verify(picture->load(EXAMPLE_DIR"/image/scale.jpg"))) return false; canvas->push(picture); diff --git a/examples/ImageScaleUp.cpp b/examples/ImageScaleUp.cpp deleted file mode 100644 index 6e3d7861..00000000 --- a/examples/ImageScaleUp.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2021 - 2025 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::Picture* picture = nullptr; - - bool content(tvg::Canvas* canvas, uint32_t w, uint32_t h) override - { - if (!canvas) return false; - - //Original - picture = tvg::Picture::gen(); - - if (!tvgexam::verify(picture->load(EXAMPLE_DIR"/image/scaleup.jpg"))) return false; - - canvas->push(picture); - - return true; - } - - bool update(tvg::Canvas* canvas, uint32_t elapsed) override - { - if (!canvas) return false; - - auto progress = tvgexam::progress(elapsed, 7.0f, true); //play time 7 sec. - - picture->scale(progress * 4.0f); - - canvas->update(picture); - - return true; - } -}; - - -/************************************************************************/ -/* Entry Point */ -/************************************************************************/ - -int main(int argc, char **argv) -{ - return tvgexam::main(new UserExample, argc, argv, true); -} \ No newline at end of file diff --git a/examples/ImageScaleDown.cpp b/examples/ImageScaling.cpp similarity index 90% rename from examples/ImageScaleDown.cpp rename to examples/ImageScaling.cpp index bd462224..7f9cb77d 100644 --- a/examples/ImageScaleDown.cpp +++ b/examples/ImageScaling.cpp @@ -37,7 +37,7 @@ struct UserExample : tvgexam::Example //Original picture = tvg::Picture::gen(); - if (!tvgexam::verify(picture->load(EXAMPLE_DIR"/image/scaledown.jpg"))) return false; + if (!tvgexam::verify(picture->load(EXAMPLE_DIR"/image/scale.jpg"))) return false; canvas->push(picture); @@ -48,9 +48,9 @@ struct UserExample : tvgexam::Example { if (!canvas) return false; - auto progress = tvgexam::progress(elapsed, 7.0f, true); //play time 7 sec. + auto progress = tvgexam::progress(elapsed, 3.0f, true); //play time 3 secs. - picture->scale(1.0f - progress); + picture->scale((1.0f - progress) * 1.5f); canvas->update(picture); @@ -65,5 +65,5 @@ struct UserExample : tvgexam::Example int main(int argc, char **argv) { - return tvgexam::main(new UserExample, argc, argv, true); + return tvgexam::main(new UserExample, argc, argv, true, 1024, 1024); } \ No newline at end of file diff --git a/examples/meson.build b/examples/meson.build index dd2f2a26..a6438015 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -21,7 +21,6 @@ endif source_file = [ 'Accessor.cpp', - 'AnimateMasking.cpp', 'Animation.cpp', 'Blending.cpp', 'BoundingBox.cpp', @@ -34,13 +33,11 @@ source_file = [ 'SceneEffects.cpp', 'FillRule.cpp', 'FillSpread.cpp', - 'GifSaver.cpp', 'GradientMasking.cpp', 'GradientStroke.cpp', 'GradientTransform.cpp', 'ImageRotation.cpp', - 'ImageScaleDown.cpp', - 'ImageScaleUp.cpp', + 'ImageScaling.cpp', 'LinearGradient.cpp', 'Lottie.cpp', 'LumaMasking.cpp', @@ -71,13 +68,16 @@ source_file = [ 'Viewport.cpp' ] +if gif_saver + source_file += 'GifSaver.cpp' +endif if lottie_loader - source_file += ['LottieExtension.cpp', 'LottieTweening.cpp'] + source_file += ['LottieExtension.cpp', 'LottieTweening.cpp'] endif if lottie_expressions - source_file += 'LottieExpressions.cpp' + source_file += 'LottieExpressions.cpp' endif foreach current_file : source_file diff --git a/examples/resources/image/scaledown.jpg b/examples/resources/image/scale.jpg similarity index 100% rename from examples/resources/image/scaledown.jpg rename to examples/resources/image/scale.jpg diff --git a/examples/resources/image/scaleup.jpg b/examples/resources/image/scaleup.jpg deleted file mode 100644 index a473d8f6308fe03f80b5ee22ae22410291bb4ce6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24723 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