mirror of
https://github.com/thorvg/thorvg.git
synced 2025-07-25 23:59:12 +00:00
renderer: support duplicate effects
Implement effect duplication functionality for all RenderEffect types to enable proper Scene duplication with effects. issue: https://github.com/thorvg/thorvg/issues/3631
This commit is contained in:
parent
9369642642
commit
e0404b1832
2 changed files with 34 additions and 1 deletions
|
@ -419,6 +419,7 @@ struct RenderEffect
|
|||
bool valid = false;
|
||||
|
||||
virtual ~RenderEffect() {}
|
||||
virtual RenderEffect* duplicate() const = 0;
|
||||
};
|
||||
|
||||
struct RenderEffectGaussianBlur : RenderEffect
|
||||
|
@ -438,6 +439,11 @@ struct RenderEffectGaussianBlur : RenderEffect
|
|||
inst->type = SceneEffect::GaussianBlur;
|
||||
return inst;
|
||||
}
|
||||
|
||||
RenderEffectGaussianBlur* duplicate() const override
|
||||
{
|
||||
return new RenderEffectGaussianBlur(*this);
|
||||
}
|
||||
};
|
||||
|
||||
struct RenderEffectDropShadow : RenderEffect
|
||||
|
@ -462,6 +468,11 @@ struct RenderEffectDropShadow : RenderEffect
|
|||
inst->type = SceneEffect::DropShadow;
|
||||
return inst;
|
||||
}
|
||||
|
||||
RenderEffectDropShadow* duplicate() const override
|
||||
{
|
||||
return new RenderEffectDropShadow(*this);
|
||||
}
|
||||
};
|
||||
|
||||
struct RenderEffectFill : RenderEffect
|
||||
|
@ -478,6 +489,11 @@ struct RenderEffectFill : RenderEffect
|
|||
inst->type = SceneEffect::Fill;
|
||||
return inst;
|
||||
}
|
||||
|
||||
RenderEffectFill* duplicate() const override
|
||||
{
|
||||
return new RenderEffectFill(*this);
|
||||
}
|
||||
};
|
||||
|
||||
struct RenderEffectTint : RenderEffect
|
||||
|
@ -499,6 +515,11 @@ struct RenderEffectTint : RenderEffect
|
|||
inst->type = SceneEffect::Tint;
|
||||
return inst;
|
||||
}
|
||||
|
||||
RenderEffectTint* duplicate() const override
|
||||
{
|
||||
return new RenderEffectTint(*this);
|
||||
}
|
||||
};
|
||||
|
||||
struct RenderEffectTritone : RenderEffect
|
||||
|
@ -524,6 +545,11 @@ struct RenderEffectTritone : RenderEffect
|
|||
inst->type = SceneEffect::Tritone;
|
||||
return inst;
|
||||
}
|
||||
|
||||
RenderEffectTritone* duplicate() const override
|
||||
{
|
||||
return new RenderEffectTritone(*this);
|
||||
}
|
||||
};
|
||||
|
||||
class RenderMethod
|
||||
|
|
|
@ -272,7 +272,14 @@ struct SceneImpl : Scene
|
|||
dup->paints.push_back(cdup);
|
||||
}
|
||||
|
||||
if (effects) TVGERR("RENDERER", "TODO: Duplicate Effects?");
|
||||
if (effects) {
|
||||
dup->effects = new Array<RenderEffect*>;
|
||||
|
||||
ARRAY_FOREACH(effect, *effects) {
|
||||
auto dupEffect = (*effect)->duplicate();
|
||||
dup->effects->push(dupEffect);
|
||||
}
|
||||
}
|
||||
|
||||
return scene;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue