loader/lottie: fix the incorrect viewport clip condition.

the viewport clip should be applied when it has a precomposition reference
but should not apply to image assets.
This commit is contained in:
Hermet Park 2023-09-06 15:22:08 +09:00 committed by Hermet Park
parent 32d53f6a64
commit 2fab9fb7d9
2 changed files with 1 additions and 23 deletions

View file

@ -682,7 +682,7 @@ static void _updateLayer(LottieLayer* root, LottieLayer* layer, int32_t frameNo)
_updateMaskings(layer, rFrameNo);
//clip the layer viewport
if (layer->clipself) {
if (layer->refId && layer->w > 0 && layer->h > 0) {
//TODO: remove the intermediate scene....
auto cscene = Scene::gen();
auto clipper = Shape::gen();
@ -732,24 +732,6 @@ static void _bulidHierarchy(LottieGroup* parent, LottieLayer* child)
}
static void _buildSize(LottieComposition* comp, LottieLayer* layer)
{
//should not clip?
if (layer->refId) return;
//default size is 0x0
if (layer->w == 0 || layer->h == 0) return;
//compact layer size
if (layer->w > comp->w) layer->w = comp->w;
if (layer->h > comp->h) layer->h = comp->h;
if (layer->w < comp->w || layer->h < comp->h) {
layer->clipself = true;
}
}
static bool _buildPrecomp(LottieComposition* comp, LottieGroup* parent)
{
if (parent->children.count == 0) return false;
@ -757,9 +739,6 @@ static bool _buildPrecomp(LottieComposition* comp, LottieGroup* parent)
for (auto c = parent->children.data; c < parent->children.end(); ++c) {
auto child = static_cast<LottieLayer*>(*c);
//compact layer size
_buildSize(comp, child);
//attach the referencing layer.
if (child->refId) _buildReference(comp, child);

View file

@ -435,7 +435,6 @@ struct LottieLayer : LottieGroup
Type type = Null;
bool autoOrient = false;
bool roundedCorner = false;
bool clipself = false; //clip the layer viewport
bool matteSrc = false;
};