lottie/model: implement the missing property() interface

This commit is contained in:
Hermet Park 2024-08-05 18:13:45 +09:00
parent 6ef1986fe1
commit 82d8601df0

View file

@ -232,6 +232,12 @@ struct LottieText : LottieObject, LottieRenderPooler<tvg::Shape>
this->prepare(); this->prepare();
} }
LottieProperty* property(uint16_t ix) override
{
if (doc.ix == ix) return &doc;
return nullptr;
}
LottieTextDoc doc; LottieTextDoc doc;
LottieFont* font; LottieFont* font;
Array<LottieTextRange*> ranges; Array<LottieTextRange*> ranges;
@ -258,6 +264,14 @@ struct LottieTrimpath : LottieObject
return false; return false;
} }
LottieProperty* property(uint16_t ix) override
{
if (start.ix == ix) return &start;
if (end.ix == ix) return &end;
if (offset.ix == ix) return &offset;
return nullptr;
}
void segment(float frameNo, float& start, float& end, LottieExpressions* exps); void segment(float frameNo, float& start, float& end, LottieExpressions* exps);
LottieFloat start = 0.0f; LottieFloat start = 0.0f;
@ -291,6 +305,13 @@ struct LottieRoundedCorner : LottieObject
{ {
LottieObject::type = LottieObject::RoundedCorner; LottieObject::type = LottieObject::RoundedCorner;
} }
LottieProperty* property(uint16_t ix) override
{
if (radius.ix == ix) return &radius;
return nullptr;
}
LottieFloat radius = 0.0f; LottieFloat radius = 0.0f;
}; };
@ -302,6 +323,12 @@ struct LottiePath : LottieShape
LottieShape::prepare(LottieObject::Path); LottieShape::prepare(LottieObject::Path);
} }
LottieProperty* property(uint16_t ix) override
{
if (pathset.ix == ix) return &pathset;
return nullptr;
}
LottiePathSet pathset; LottiePathSet pathset;
}; };
@ -313,6 +340,14 @@ struct LottieRect : LottieShape
LottieShape::prepare(LottieObject::Rect); LottieShape::prepare(LottieObject::Rect);
} }
LottieProperty* property(uint16_t ix) override
{
if (position.ix == ix) return &position;
if (size.ix == ix) return &size;
if (radius.ix == ix) return &radius;
return nullptr;
}
LottiePosition position = Point{0.0f, 0.0f}; LottiePosition position = Point{0.0f, 0.0f};
LottiePoint size = Point{0.0f, 0.0f}; LottiePoint size = Point{0.0f, 0.0f};
LottieFloat radius = 0.0f; //rounded corner radius LottieFloat radius = 0.0f; //rounded corner radius
@ -328,6 +363,18 @@ struct LottiePolyStar : LottieShape
LottieShape::prepare(LottieObject::Polystar); LottieShape::prepare(LottieObject::Polystar);
} }
LottieProperty* property(uint16_t ix) override
{
if (position.ix == ix) return &position;
if (innerRadius.ix == ix) return &innerRadius;
if (outerRadius.ix == ix) return &outerRadius;
if (innerRoundness.ix == ix) return &innerRoundness;
if (outerRoundness.ix == ix) return &outerRoundness;
if (rotation.ix == ix) return &rotation;
if (ptsCnt.ix == ix) return &ptsCnt;
return nullptr;
}
LottiePosition position = Point{0.0f, 0.0f}; LottiePosition position = Point{0.0f, 0.0f};
LottieFloat innerRadius = 0.0f; LottieFloat innerRadius = 0.0f;
LottieFloat outerRadius = 0.0f; LottieFloat outerRadius = 0.0f;
@ -389,6 +436,22 @@ struct LottieTransform : LottieObject
return false; return false;
} }
LottieProperty* property(uint16_t ix) override
{
if (position.ix == ix) return &position;
if (rotation.ix == ix) return &rotation;
if (scale.ix == ix) return &scale;
if (anchor.ix == ix) return &anchor;
if (opacity.ix == ix) return &opacity;
if (skewAngle.ix == ix) return &skewAngle;
if (skewAxis.ix == ix) return &skewAxis;
if (coords) {
if (coords->x.ix == ix) return &coords->x;
if (coords->y.ix == ix) return &coords->y;
}
return nullptr;
}
LottiePosition position = Point{0.0f, 0.0f}; LottiePosition position = Point{0.0f, 0.0f};
LottieFloat rotation = 0.0f; //z rotation LottieFloat rotation = 0.0f; //z rotation
LottiePoint scale = Point{100.0f, 100.0f}; LottiePoint scale = Point{100.0f, 100.0f};
@ -406,6 +469,13 @@ struct LottieSolid : LottieObject
{ {
LottieColor color = RGB24{255, 255, 255}; LottieColor color = RGB24{255, 255, 255};
LottieOpacity opacity = 255; LottieOpacity opacity = 255;
LottieProperty* property(uint16_t ix) override
{
if (color.ix == ix) return &color;
if (opacity.ix == ix) return &opacity;
return nullptr;
}
}; };
@ -416,6 +486,17 @@ struct LottieSolidStroke : LottieSolid, LottieStroke
LottieObject::type = LottieObject::SolidStroke; LottieObject::type = LottieObject::SolidStroke;
} }
LottieProperty* property(uint16_t ix) override
{
if (width.ix == ix) return &width;
if (dashattr) {
if (dashattr->value[0].ix == ix) return &dashattr->value[0];
if (dashattr->value[1].ix == ix) return &dashattr->value[1];
if (dashattr->value[2].ix == ix) return &dashattr->value[2];
}
return LottieSolid::property(ix);
}
void override(LottieProperty* prop) override void override(LottieProperty* prop) override
{ {
this->color = *static_cast<LottieColor*>(prop); this->color = *static_cast<LottieColor*>(prop);
@ -458,6 +539,18 @@ struct LottieGradient : LottieObject
return false; return false;
} }
LottieProperty* property(uint16_t ix) override
{
if (start.ix == ix) return &start;
if (end.ix == ix) return &end;
if (height.ix == ix) return &height;
if (angle.ix == ix) return &angle;
if (opacity.ix == ix) return &opacity;
if (colorStops.ix == ix) return &colorStops;
return nullptr;
}
uint32_t populate(ColorStop& color); uint32_t populate(ColorStop& color);
Fill* fill(float frameNo, LottieExpressions* exps); Fill* fill(float frameNo, LottieExpressions* exps);
@ -497,6 +590,17 @@ struct LottieGradientStroke : LottieGradient, LottieStroke
LottieGradient::prepare(); LottieGradient::prepare();
} }
LottieProperty* property(uint16_t ix) override
{
if (width.ix == ix) return &width;
if (dashattr) {
if (dashattr->value[0].ix == ix) return &dashattr->value[0];
if (dashattr->value[1].ix == ix) return &dashattr->value[1];
if (dashattr->value[2].ix == ix) return &dashattr->value[2];
}
return LottieGradient::property(ix);
}
void override(LottieProperty* prop) override void override(LottieProperty* prop) override
{ {
this->colorStops = *static_cast<LottieColorStop*>(prop); this->colorStops = *static_cast<LottieColorStop*>(prop);
@ -528,6 +632,19 @@ struct LottieRepeater : LottieObject
LottieObject::type = LottieObject::Repeater; LottieObject::type = LottieObject::Repeater;
} }
LottieProperty* property(uint16_t ix) override
{
if (copies.ix == ix) return &copies;
if (offset.ix == ix) return &offset;
if (position.ix == ix) return &position;
if (rotation.ix == ix) return &rotation;
if (scale.ix == ix) return &scale;
if (anchor.ix == ix) return &anchor;
if (startOpacity.ix == ix) return &startOpacity;
if (endOpacity.ix == ix) return &endOpacity;
return nullptr;
}
LottieFloat copies = 0.0f; LottieFloat copies = 0.0f;
LottieFloat offset = 0.0f; LottieFloat offset = 0.0f;