bool mRepeaterFound;
};
-class LottiePathOperationProcesser : public LOTDataVisitor {
-public:
- LottiePathOperationProcesser() : mPathOperator(false), mPathNode(false) {}
- void visit(LOTCompositionData *obj) {}
- void visit(LOTLayerData *obj) {}
- void visit(LOTTransformData *) {}
- void visit(LOTShapeGroupData *obj) {}
- void visit(LOTShapeData *) { mPathNode = true; }
- void visit(LOTRectData *) { mPathNode = true; }
- void visit(LOTEllipseData *) { mPathNode = true; }
- void visit(LOTTrimData *) { mPathOperator = true; }
- void visit(LOTRepeaterData *) {}
- void visit(LOTFillData *) {}
- void visit(LOTStrokeData *) {}
- void visit(LOTPolystarData *) { mPathNode = true; }
- void visitChildren(LOTGroupData *obj)
- {
- int curOpCount = mPathOperationList.size();
- mPathOperator = false;
- mPathNode = false;
- for (auto i = obj->mChildren.rbegin(); i != obj->mChildren.rend();
- ++i) {
- auto child = *i;
- child.get()->accept(this);
- if (mPathOperator) {
- mPathOperationList.push_back(child);
- // obj->mChildren.erase(std::next(i).base());
- }
- if (mPathNode) {
- updatePathObject(static_cast<LOTPath *>(child.get()));
- }
- mPathOperator = false;
- mPathNode = false;
- }
- mPathOperationList.erase(mPathOperationList.begin() + curOpCount,
- mPathOperationList.end());
- }
-
- void updatePathObject(LOTPath *drawable)
- {
- for (auto i = mPathOperationList.rbegin();
- i != mPathOperationList.rend(); ++i) {
- drawable->mPathOperations.push_back(*i);
- }
- }
-
-public:
- bool mPathOperator;
- bool mPathNode;
- std::vector<std::shared_ptr<LOTData>> mPathOperationList;
-};
-
-class LottiePaintOperationProcesser : public LOTDataVisitor {
-public:
- LottiePaintOperationProcesser() : mPaintOperator(false), mPathNode(false) {}
- void visit(LOTCompositionData *obj) {}
- void visit(LOTLayerData *obj) {}
- void visit(LOTTransformData *) {}
- void visit(LOTShapeGroupData *obj) {}
- void visit(LOTShapeData *) { mPathNode = true; }
- void visit(LOTRectData *) { mPathNode = true; }
- void visit(LOTEllipseData *) { mPathNode = true; }
- void visit(LOTTrimData *) {}
- void visit(LOTRepeaterData *) {}
- void visit(LOTFillData *) { mPaintOperator = true; }
- void visit(LOTStrokeData *) { mPaintOperator = true; }
- void visit(LOTPolystarData *) { mPathNode = true; }
- void visitChildren(LOTGroupData *obj)
- {
- int curOpCount = mPaintOperationList.size();
- mPaintOperator = false;
- mPathNode = false;
- for (auto i = obj->mChildren.rbegin(); i != obj->mChildren.rend();
- ++i) {
- auto child = *i;
- child.get()->accept(this);
- if (mPaintOperator) {
- mPaintOperationList.push_back(child);
- // obj->mChildren.erase(std::next(i).base());
- }
- if (mPathNode) {
- // put it in the list
- updatePathObject(static_cast<LOTPath *>(child.get()));
- }
- mPaintOperator = false;
- mPathNode = false;
- }
- mPaintOperationList.erase(mPaintOperationList.begin() + curOpCount,
- mPaintOperationList.end());
- }
-
- void updatePathObject(LOTPath *drawable)
- {
- for (auto i = mPaintOperationList.begin();
- i != mPaintOperationList.end(); ++i) {
- drawable->mPaintOperations.push_back(*i);
- }
- }
-
-public:
- bool mPaintOperator;
- bool mPathNode;
- std::vector<std::shared_ptr<LOTData>> mPaintOperationList;
-};
void LOTCompositionData::processRepeaterObjects()
{
accept(&visitor);
}
-void LOTCompositionData::processPathOperatorObjects()
-{
- LottiePathOperationProcesser visitor;
- accept(&visitor);
-}
-
-void LOTCompositionData::processPaintOperatorObjects()
-{
- LottiePaintOperationProcesser visitor;
- accept(&visitor);
-}
-
VMatrix LOTTransformData::matrix(int frameNo) const
{
if (mStaticMatrix)