}
LOTContentGroupItem::LOTContentGroupItem(LOTGroupData *data, VArenaAlloc* allocator)
- : mData(data), mModel(data)
+ : mModel(data)
{
- addChildren(mData, allocator);
+ addChildren(data, allocator);
}
void LOTContentGroupItem::addChildren(LOTGroupData *data, VArenaAlloc* allocator)
DirtyFlag newFlag = flag;
float alpha;
- if (mData && mData->mTransform) {
- VMatrix m = mData->mTransform->matrix(frameNo);
+ if (mModel.hasModel() && mModel.transform()) {
+ VMatrix m = mModel.transform()->matrix(frameNo);
m *= parentMatrix;
if (mModel.filter().hasFilter(rlottie::Property::TrPosition)){
m.translate(ps.x(), ps.y());
}
- if (!(flag & DirtyFlagBit::Matrix) && !mData->mTransform->isStatic() &&
+ if (!(flag & DirtyFlagBit::Matrix) && !mModel.transform()->isStatic() &&
(m != mMatrix)) {
newFlag |= DirtyFlagBit::Matrix;
}
mMatrix = m;
- alpha = parentAlpha * mData->mTransform->opacity(frameNo);
+ alpha = parentAlpha * mModel.transform()->opacity(frameNo);
if (!vCompare(alpha, parentAlpha)) {
newFlag |= DirtyFlagBit::Alpha;
}
class LOTContentGroupItem: public LOTContentItem
{
public:
- LOTContentGroupItem() = default;
+ LOTContentGroupItem() = default;
explicit LOTContentGroupItem(LOTGroupData *data, VArenaAlloc* allocator);
void addChildren(LOTGroupData *data, VArenaAlloc* allocator);
void update(int frameNo, const VMatrix &parentMatrix, float parentAlpha, const DirtyFlag &flag) override;
const char* name() const
{
static const char* TAG = "__";
- return mData ? mData->name() : TAG;
+ return mModel.hasModel() ? mModel.name() : TAG;
}
bool resolveKeyPath(LOTKeyPath &keyPath, uint depth, LOTVariant &value) override;
protected:
- LOTGroupData *mData{nullptr};
std::vector<LOTContentItem*> mContents;
VMatrix mMatrix;
private:
{
public:
LOTProxyModel(LOTGroupData *model = nullptr): _modelData(model) {}
+ bool hasModel() const { return _modelData ? true : false; }
LOTFilter& filter() {return mFilter;}
const char* name() const {return _modelData->name();}
+ LOTTransformData* transform() const { return _modelData->mTransform; }
VPointF position(int frame) const
{
if (mFilter.hasFilter(rlottie::Property::TrPosition)) {