return false;
}
-LOTContentGroupItem::LOTContentGroupItem(LOTGroupData *data) : mData(data)
+LOTContentGroupItem::LOTContentGroupItem(LOTGroupData *data) :
+ LOTContentItem(ContentType::Group),
+ mData(data)
{
addChildren(mData);
}
{
for (auto i = mContents.rbegin(); i != mContents.rend(); ++i) {
auto content = (*i).get();
- if (auto trim = dynamic_cast<LOTTrimItem *>(content)) {
- trim->update();
- } else if (auto group = dynamic_cast<LOTContentGroupItem *>(content)) {
- group->applyTrim();
+ switch (content->type()) {
+ case ContentType::Trim: {
+ static_cast<LOTTrimItem *>(content)->update();
+ break;
+ }
+ case ContentType::Group: {
+ static_cast<LOTContentGroupItem *>(content)->applyTrim();
+ break;
+ }
+ default:
+ break;
}
}
}
int curOpCount = list.size();
for (auto i = mContents.rbegin(); i != mContents.rend(); ++i) {
auto content = (*i).get();
- if (auto pathNode = dynamic_cast<LOTPathDataItem *>(content)) {
- // add it to the list
- list.push_back(pathNode);
- } else if (auto paintNode = dynamic_cast<LOTPaintDataItem *>(content)) {
- // the node is a paint data node update the path list of the paint item.
- paintNode->addPathItems(list, curOpCount);
- } else if (auto groupNode =
- dynamic_cast<LOTContentGroupItem *>(content)) {
- // update the groups node with current list
- groupNode->processPaintItems(list);
+ switch (content->type()) {
+ case ContentType::Path: {
+ list.push_back(static_cast<LOTPathDataItem *>(content));
+ break;
+ }
+ case ContentType::Paint: {
+ static_cast<LOTPaintDataItem *>(content)->addPathItems(list, curOpCount);
+ break;
+ }
+ case ContentType::Group: {
+ static_cast<LOTContentGroupItem *>(content)->processPaintItems(list);
+ break;
+ }
+ default:
+ break;
}
}
}
int curOpCount = list.size();
for (auto i = mContents.rbegin(); i != mContents.rend(); ++i) {
auto content = (*i).get();
- if (auto pathNode = dynamic_cast<LOTPathDataItem *>(content)) {
- // add it to the list
- list.push_back(pathNode);
- } else if (auto trimNode = dynamic_cast<LOTTrimItem *>(content)) {
- // the node is a paint data node update the path list of the paint item.
- trimNode->addPathItems(list, curOpCount);
- } else if (auto groupNode =
- dynamic_cast<LOTContentGroupItem *>(content)) {
- // update the groups node with current list
- groupNode->processTrimItems(list);
+
+ switch (content->type()) {
+ case ContentType::Path: {
+ list.push_back(static_cast<LOTPathDataItem *>(content));
+ break;
+ }
+ case ContentType::Trim: {
+ static_cast<LOTTrimItem *>(content)->addPathItems(list, curOpCount);
+ break;
+ }
+ case ContentType::Group: {
+ static_cast<LOTContentGroupItem *>(content)->processTrimItems(list);
+ break;
+ }
+ default:
+ break;
}
}
}
* PaintData Node handling
*
*/
-LOTPaintDataItem::LOTPaintDataItem(bool staticContent):mDrawable(std::make_unique<LOTDrawable>()),
- mStaticContent(staticContent){}
+LOTPaintDataItem::LOTPaintDataItem(bool staticContent):
+ LOTContentItem(ContentType::Paint),
+ mDrawable(std::make_unique<LOTDrawable>()),
+ mStaticContent(staticContent){}
void LOTPaintDataItem::update(int frameNo, const VMatrix &/*parentMatrix*/,
float parentAlpha, const DirtyFlag &flag)
}
}
-LOTTrimItem::LOTTrimItem(LOTTrimData *data) : mData(data) {}
+LOTTrimItem::LOTTrimItem(LOTTrimData *data):
+ LOTContentItem(ContentType::Trim),
+ mData(data) {}
void LOTTrimItem::update(int frameNo, const VMatrix &/*parentMatrix*/,
float /*parentAlpha*/, const DirtyFlag &/*flag*/)
class LOTPaintDataItem;
class LOTTrimItem;
+enum class ContentType
+{
+ Unknown,
+ Group,
+ Path,
+ Paint,
+ Trim
+};
+
class LOTContentItem
{
public:
virtual ~LOTContentItem() = default;
+ LOTContentItem(ContentType type=ContentType::Unknown):mType(type) {}
virtual void update(int frameNo, const VMatrix &parentMatrix, float parentAlpha, const DirtyFlag &flag) = 0;
virtual void renderList(std::vector<VDrawable *> &){}
void setParent(LOTContentItem *parent) {mParent = parent;}
LOTContentItem *parent() const {return mParent;}
virtual bool resolveKeyPath(LOTKeyPath &, uint, LOTVariant &) {return false;}
+ ContentType type() const {return mType;}
private:
+ ContentType mType{ContentType::Unknown};
LOTContentItem *mParent{nullptr};
};
class LOTContentGroupItem: public LOTContentItem
{
public:
- LOTContentGroupItem(){}
- LOTContentGroupItem(LOTGroupData *data);
+ LOTContentGroupItem(LOTGroupData *data=nullptr);
void addChildren(LOTGroupData *data);
void update(int frameNo, const VMatrix &parentMatrix, float parentAlpha, const DirtyFlag &flag) override;
void applyTrim();
class LOTPathDataItem : public LOTContentItem
{
public:
- LOTPathDataItem(bool staticPath): mStaticPath(staticPath){}
+ LOTPathDataItem(bool staticPath): LOTContentItem(ContentType::Path), mStaticPath(staticPath){}
void update(int frameNo, const VMatrix &parentMatrix, float parentAlpha, const DirtyFlag &flag) final;
bool dirty() const {return mPathChanged;}
const VPath &localPath() const {return mTemp;}