mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-08 13:43:43 +00:00
lottie: improve slots to properly override solid fill opacity
This commit is contained in:
parent
f84b2331da
commit
d8fa8f364c
3 changed files with 26 additions and 14 deletions
|
@ -76,13 +76,12 @@ void LottieSlot::assign(LottieObject* target)
|
|||
for (auto pair = pairs.begin(); pair < pairs.end(); ++pair) {
|
||||
//backup the original properties before overwriting
|
||||
switch (type) {
|
||||
case LottieProperty::Type::ColorStop: {
|
||||
case LottieProperty::Type::Opacity: {
|
||||
if (!overridden) {
|
||||
pair->prop = new LottieColorStop;
|
||||
*static_cast<LottieColorStop*>(pair->prop) = static_cast<LottieGradient*>(pair->obj)->colorStops;
|
||||
pair->prop = new LottieOpacity;
|
||||
*static_cast<LottieOpacity*>(pair->prop) = static_cast<LottieSolid*>(pair->obj)->opacity;
|
||||
}
|
||||
|
||||
pair->obj->override(&static_cast<LottieGradient*>(target)->colorStops);
|
||||
pair->obj->override(&static_cast<LottieSolid*>(target)->opacity);
|
||||
break;
|
||||
}
|
||||
case LottieProperty::Type::Color: {
|
||||
|
@ -90,16 +89,22 @@ void LottieSlot::assign(LottieObject* target)
|
|||
pair->prop = new LottieColor;
|
||||
*static_cast<LottieColor*>(pair->prop) = static_cast<LottieSolid*>(pair->obj)->color;
|
||||
}
|
||||
|
||||
pair->obj->override(&static_cast<LottieSolid*>(target)->color);
|
||||
break;
|
||||
}
|
||||
case LottieProperty::Type::ColorStop: {
|
||||
if (!overridden) {
|
||||
pair->prop = new LottieColorStop;
|
||||
*static_cast<LottieColorStop*>(pair->prop) = static_cast<LottieGradient*>(pair->obj)->colorStops;
|
||||
}
|
||||
pair->obj->override(&static_cast<LottieGradient*>(target)->colorStops);
|
||||
break;
|
||||
}
|
||||
case LottieProperty::Type::TextDoc: {
|
||||
if (!overridden) {
|
||||
pair->prop = new LottieTextDoc;
|
||||
*static_cast<LottieTextDoc*>(pair->prop) = static_cast<LottieText*>(pair->obj)->doc;
|
||||
}
|
||||
|
||||
pair->obj->override(&static_cast<LottieText*>(target)->doc);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -566,7 +566,8 @@ struct LottieSolidFill : LottieSolid
|
|||
|
||||
void override(LottieProperty* prop) override
|
||||
{
|
||||
this->color = *static_cast<LottieColor*>(prop);
|
||||
if (prop->type == LottieProperty::Type::Opacity) this->opacity = *static_cast<LottieOpacity*>(prop);
|
||||
else if (prop->type == LottieProperty::Type::Color) this->color = *static_cast<LottieColor*>(prop);
|
||||
this->prepare();
|
||||
}
|
||||
|
||||
|
|
|
@ -1482,6 +1482,18 @@ bool LottieParser::apply(LottieSlot* slot)
|
|||
LottieObject* obj = nullptr; //slot object
|
||||
|
||||
switch (slot->type) {
|
||||
case LottieProperty::Type::Opacity: {
|
||||
obj = new LottieSolid;
|
||||
context.parent = obj;
|
||||
parseSlotProperty<LottieProperty::Type::Opacity>(static_cast<LottieSolid*>(obj)->opacity);
|
||||
break;
|
||||
}
|
||||
case LottieProperty::Type::Color: {
|
||||
obj = new LottieSolid;
|
||||
context.parent = obj;
|
||||
parseSlotProperty<LottieProperty::Type::Color>(static_cast<LottieSolid*>(obj)->color);
|
||||
break;
|
||||
}
|
||||
case LottieProperty::Type::ColorStop: {
|
||||
obj = new LottieGradient;
|
||||
context.parent = obj;
|
||||
|
@ -1491,12 +1503,6 @@ bool LottieParser::apply(LottieSlot* slot)
|
|||
}
|
||||
break;
|
||||
}
|
||||
case LottieProperty::Type::Color: {
|
||||
obj = new LottieSolid;
|
||||
context.parent = obj;
|
||||
parseSlotProperty<LottieProperty::Type::Color>(static_cast<LottieSolid*>(obj)->color);
|
||||
break;
|
||||
}
|
||||
case LottieProperty::Type::TextDoc: {
|
||||
obj = new LottieText;
|
||||
context.parent = obj;
|
||||
|
|
Loading…
Add table
Reference in a new issue