mirror of
https://github.com/thorvg/thorvg.git
synced 2025-07-27 08:36:59 +00:00
renderer: support duplicate effects
implement effect duplication functionality to enable proper Scene duplication with effects. issue: https://github.com/thorvg/thorvg/issues/3631 Co-Authored-By: Hermet Park <hermet@lottiefiles.com>
This commit is contained in:
parent
9369642642
commit
bdccfb2449
2 changed files with 36 additions and 3 deletions
|
@ -103,9 +103,9 @@ struct UserExample : tvgexam::Example
|
||||||
//Duplicate Picture - svg
|
//Duplicate Picture - svg
|
||||||
{
|
{
|
||||||
auto picture1 = tvg::Picture::gen();
|
auto picture1 = tvg::Picture::gen();
|
||||||
if (!tvgexam::verify(picture1->load(EXAMPLE_DIR"/svg/tiger.svg"))) return false;
|
if (!tvgexam::verify(picture1->load(EXAMPLE_DIR"/svg/2684.svg"))) return false;
|
||||||
picture1->translate(350, 200);
|
picture1->translate(350, 200);
|
||||||
picture1->scale(0.25);
|
picture1->scale(4);
|
||||||
|
|
||||||
auto picture2 = picture1->duplicate();
|
auto picture2 = picture1->duplicate();
|
||||||
picture2->translate(550, 250);
|
picture2->translate(550, 250);
|
||||||
|
|
|
@ -272,7 +272,40 @@ struct SceneImpl : Scene
|
||||||
dup->paints.push_back(cdup);
|
dup->paints.push_back(cdup);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (effects) TVGERR("RENDERER", "TODO: Duplicate Effects?");
|
if (effects) {
|
||||||
|
dup->effects = new Array<RenderEffect*>;
|
||||||
|
ARRAY_FOREACH(p, *effects) {
|
||||||
|
RenderEffect* ret = nullptr;
|
||||||
|
switch ((*p)->type) {
|
||||||
|
case SceneEffect::GaussianBlur: {
|
||||||
|
ret = new RenderEffectGaussianBlur(*(RenderEffectGaussianBlur*)(*p));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SceneEffect::DropShadow: {
|
||||||
|
ret = new RenderEffectDropShadow(*(RenderEffectDropShadow*)(*p));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SceneEffect::Fill: {
|
||||||
|
ret = new RenderEffectFill(*(RenderEffectFill*)(*p));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SceneEffect::Tint: {
|
||||||
|
ret = new RenderEffectTint(*(RenderEffectTint*)(*p));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SceneEffect::Tritone: {
|
||||||
|
ret = new RenderEffectTritone(*(RenderEffectTritone*)(*p));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
if (ret) {
|
||||||
|
ret->rd = nullptr;
|
||||||
|
ret->valid = false;
|
||||||
|
dup->effects->push(ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return scene;
|
return scene;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue