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) {
|
for (auto pair = pairs.begin(); pair < pairs.end(); ++pair) {
|
||||||
//backup the original properties before overwriting
|
//backup the original properties before overwriting
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case LottieProperty::Type::ColorStop: {
|
case LottieProperty::Type::Opacity: {
|
||||||
if (!overridden) {
|
if (!overridden) {
|
||||||
pair->prop = new LottieColorStop;
|
pair->prop = new LottieOpacity;
|
||||||
*static_cast<LottieColorStop*>(pair->prop) = static_cast<LottieGradient*>(pair->obj)->colorStops;
|
*static_cast<LottieOpacity*>(pair->prop) = static_cast<LottieSolid*>(pair->obj)->opacity;
|
||||||
}
|
}
|
||||||
|
pair->obj->override(&static_cast<LottieSolid*>(target)->opacity);
|
||||||
pair->obj->override(&static_cast<LottieGradient*>(target)->colorStops);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LottieProperty::Type::Color: {
|
case LottieProperty::Type::Color: {
|
||||||
|
@ -90,16 +89,22 @@ void LottieSlot::assign(LottieObject* target)
|
||||||
pair->prop = new LottieColor;
|
pair->prop = new LottieColor;
|
||||||
*static_cast<LottieColor*>(pair->prop) = static_cast<LottieSolid*>(pair->obj)->color;
|
*static_cast<LottieColor*>(pair->prop) = static_cast<LottieSolid*>(pair->obj)->color;
|
||||||
}
|
}
|
||||||
|
|
||||||
pair->obj->override(&static_cast<LottieSolid*>(target)->color);
|
pair->obj->override(&static_cast<LottieSolid*>(target)->color);
|
||||||
break;
|
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: {
|
case LottieProperty::Type::TextDoc: {
|
||||||
if (!overridden) {
|
if (!overridden) {
|
||||||
pair->prop = new LottieTextDoc;
|
pair->prop = new LottieTextDoc;
|
||||||
*static_cast<LottieTextDoc*>(pair->prop) = static_cast<LottieText*>(pair->obj)->doc;
|
*static_cast<LottieTextDoc*>(pair->prop) = static_cast<LottieText*>(pair->obj)->doc;
|
||||||
}
|
}
|
||||||
|
|
||||||
pair->obj->override(&static_cast<LottieText*>(target)->doc);
|
pair->obj->override(&static_cast<LottieText*>(target)->doc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -566,7 +566,8 @@ struct LottieSolidFill : LottieSolid
|
||||||
|
|
||||||
void override(LottieProperty* prop) override
|
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();
|
this->prepare();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1482,6 +1482,18 @@ bool LottieParser::apply(LottieSlot* slot)
|
||||||
LottieObject* obj = nullptr; //slot object
|
LottieObject* obj = nullptr; //slot object
|
||||||
|
|
||||||
switch (slot->type) {
|
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: {
|
case LottieProperty::Type::ColorStop: {
|
||||||
obj = new LottieGradient;
|
obj = new LottieGradient;
|
||||||
context.parent = obj;
|
context.parent = obj;
|
||||||
|
@ -1491,12 +1503,6 @@ bool LottieParser::apply(LottieSlot* slot)
|
||||||
}
|
}
|
||||||
break;
|
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: {
|
case LottieProperty::Type::TextDoc: {
|
||||||
obj = new LottieText;
|
obj = new LottieText;
|
||||||
context.parent = obj;
|
context.parent = obj;
|
||||||
|
|
Loading…
Add table
Reference in a new issue