computeBounds method
Implementation
@override
Bounds computeBounds(SkeletonDrawableFlutter drawable) {
final data = drawable.skeletonData;
final oldSkin = drawable.skeleton.skin;
final customSkin = Skin("custom-skin");
for (final skinName in skins) {
final skin = data.findSkin(skinName);
if (skin == null) continue;
customSkin.addSkin(skin);
}
drawable.skeleton.setSkin2(customSkin);
drawable.skeleton.setupPose();
final animation = this.animation != null ? data.findAnimation(this.animation!) : null;
double minX = double.infinity;
double minY = double.infinity;
double maxX = double.negativeInfinity;
double maxY = double.negativeInfinity;
if (animation == null) {
drawable.skeleton.updateWorldTransform(Physics.none);
final bounds = drawable.skeleton.bounds;
minX = bounds.x;
minY = bounds.y;
maxX = minX + bounds.width;
maxY = minY + bounds.height;
} else {
drawable.animationState.setAnimation(0, animation.name, false);
final steps = max(animation.duration / stepTime, 1.0).toInt();
for (int i = 0; i < steps; i++) {
drawable.update(i > 0 ? stepTime : 0);
drawable.skeleton.updateWorldTransform(Physics.none);
final bounds = drawable.skeleton.bounds;
minX = min(minX, bounds.x);
minY = min(minY, bounds.y);
maxX = max(maxX, minX + bounds.width);
maxY = max(maxY, minY + bounds.height);
}
}
drawable.skeleton.setSkin("default");
drawable.animationState.clearTracks();
if (oldSkin != null) drawable.skeleton.setSkin2(oldSkin);
drawable.skeleton.setupPose();
drawable.update(0);
customSkin.dispose();
return Bounds(x: minX, y: minY, width: maxX - minX, height: maxY - minY);
}