[WIP] Lottie: simplify trim

This commit is contained in:
Isaac 2024-06-01 19:22:33 +04:00
parent 0436794d93
commit eb77e468f4

View File

@ -903,7 +903,7 @@ public:
std::unique_ptr<TransformOutput> transform; std::unique_ptr<TransformOutput> transform;
std::vector<ShadingVariant> shadings; std::vector<ShadingVariant> shadings;
std::vector<std::shared_ptr<TrimParamsOutput>> trims; std::shared_ptr<TrimParamsOutput> trim;
public: public:
std::vector<std::shared_ptr<ContentItem>> subItems; std::vector<std::shared_ptr<ContentItem>> subItems;
@ -929,8 +929,8 @@ public:
auto &subItem = subItems[i]; auto &subItem = subItems[i];
std::optional<TrimParams> currentTrim; std::optional<TrimParams> currentTrim;
if (!trims.empty()) { if (trim) {
currentTrim = trims[0]->trimParams(); currentTrim = trim->trimParams();
} }
auto subItemPaths = subItem->collectPaths(INT32_MAX, effectiveTransform, false); auto subItemPaths = subItem->collectPaths(INT32_MAX, effectiveTransform, false);
@ -973,8 +973,8 @@ public:
shadings.insert(shadings.begin(), shading); shadings.insert(shadings.begin(), shading);
} }
void addTrim(Trim const &trim) { void setTrim(Trim const &trim_) {
trims.push_back(std::make_shared<TrimParamsOutput>(trim)); trim = std::make_shared<TrimParamsOutput>(trim_);
} }
public: public:
@ -1028,7 +1028,7 @@ public:
if (path) { if (path) {
path->update(frameTime); path->update(frameTime);
} }
for (const auto &trim : trims) { if (trim) {
trim->update(frameTime); trim->update(frameTime);
} }
@ -1047,7 +1047,7 @@ public:
} }
bool hasTrims() { bool hasTrims() {
if (!trims.empty()) { if (trim) {
return true; return true;
} }
@ -1060,6 +1060,16 @@ public:
return false; return false;
} }
bool hasNestedTrims() {
for (const auto &subItem : subItems) {
if (subItem->hasTrims()) {
return true;
}
}
return false;
}
void updateContents(std::optional<TrimParams> parentTrim) { void updateContents(std::optional<TrimParams> parentTrim) {
Transform2D containerTransform = Transform2D::identity(); Transform2D containerTransform = Transform2D::identity();
float containerOpacity = 1.0; float containerOpacity = 1.0;
@ -1070,8 +1080,8 @@ public:
_contentItem->transform = containerTransform; _contentItem->transform = containerTransform;
_contentItem->alpha = containerOpacity; _contentItem->alpha = containerOpacity;
if (!trims.empty()) { if (trim) {
_contentItem->trimParams = trims[0]->trimParams(); _contentItem->trimParams = trim->trimParams();
} }
for (int i = 0; i < shadings.size(); i++) { for (int i = 0; i < shadings.size(); i++) {
@ -1123,9 +1133,7 @@ public:
if (isGroup && !subItems.empty()) { if (isGroup && !subItems.empty()) {
for (int i = (int)subItems.size() - 1; i >= 0; i--) { for (int i = (int)subItems.size() - 1; i >= 0; i--) {
std::optional<TrimParams> childTrim = parentTrim; std::optional<TrimParams> childTrim = parentTrim;
for (const auto &trim : trims) { if (trim) {
//TODO:allow combination
//assert(!parentTrim);
childTrim = trim->trimParams(); childTrim = trim->trimParams();
} }
@ -1228,10 +1236,11 @@ private:
auto groupItem = std::make_shared<ContentItem>(); auto groupItem = std::make_shared<ContentItem>();
groupItem->isGroup = true; groupItem->isGroup = true;
groupItem->setTrim(trim);
for (const auto &subItem : itemTree->subItems) { for (const auto &subItem : itemTree->subItems) {
groupItem->addSubItem(subItem); groupItem->addSubItem(subItem);
} }
groupItem->addTrim(trim);
itemTree->subItems.clear(); itemTree->subItems.clear();
itemTree->addSubItem(groupItem); itemTree->addSubItem(groupItem);