diff --git a/config.lock.yaml b/config.lock.yaml index 1e89416..9890a8e 100644 --- a/config.lock.yaml +++ b/config.lock.yaml @@ -9,7 +9,7 @@ hashlib: bc9c2f8dd7bbc72f47ccab0ce1111d40259c49bc hashlib_codecs: 2a966c37c3b9b1f5541ae88e99ab34acf3fc968b introduction_screen: 4a90e557630b28834479ed9c64a9d2d0185d8e48 libsignal_protocol_dart: c95a1586057022acdbb9c76b1692d94cc549bcc7 -lottie: 4f1a5a52bdf1e1c1e12fa97c96174dcb05419e19 +lottie: 127bc29f2c6bd8b32ec4064a09e54e6b31cd0a88 mutex: 84ca903a3ac863735e3228c75a212133621f680f no_screenshot: fbfa2ed7ec4db782797fa6a7de8f207a2cba00bb optional: 71c638891ce4f2aff35c7387727989f31f9d877d diff --git a/lottie/lib/src/animation/content/base_stroke_content.dart b/lottie/lib/src/animation/content/base_stroke_content.dart index 789657d..6999a4d 100644 --- a/lottie/lib/src/animation/content/base_stroke_content.dart +++ b/lottie/lib/src/animation/content/base_stroke_content.dart @@ -149,7 +149,7 @@ abstract class BaseStrokeContent var alpha = ((parentAlpha / 255.0 * _opacityAnimation.value / 100.0) * 255) .round(); paint.setAlpha(alpha.clamp(0, 255)); - paint.strokeWidth = _widthAnimation.value * parentMatrix.getScale(); + paint.strokeWidth = _widthAnimation.value; if (paint.strokeWidth <= 0) { // Android draws a hairline stroke for 0, After Effects doesn't. L.endSection('StrokeContent#draw'); @@ -172,20 +172,19 @@ abstract class BaseStrokeContent _blurMaskFilterRadius = blurRadius; } + // Concat the parent matrix instead of scaling the stroke width, so skew affects the stroke. + canvas.save(); + canvas.transform(parentMatrix.storage); for (var i = 0; i < _pathGroups.length; i++) { var pathGroup = _pathGroups[i]; if (pathGroup.trimPath != null) { - _applyTrimPath(canvas, pathGroup, parentMatrix); + _applyTrimPath(canvas, pathGroup); } else { L.beginSection('StrokeContent#buildPath'); _path.reset(); for (var j = pathGroup.paths.length - 1; j >= 0; j--) { - _path.addPath( - pathGroup.paths[j].getPath(), - Offset.zero, - matrix4: parentMatrix.storage, - ); + _path.addPath(pathGroup.paths[j].getPath(), Offset.zero); } L.endSection('StrokeContent#buildPath'); L.beginSection('StrokeContent#drawPath'); @@ -193,18 +192,15 @@ abstract class BaseStrokeContent if (dropShadow != null) { dropShadow.draw(canvas, _path); } - canvas.drawPath(_withDashPattern(_path, parentMatrix), paint); + canvas.drawPath(_withDashPattern(_path), paint); L.endSection('StrokeContent#drawPath'); } } + canvas.restore(); L.endSection('StrokeContent#draw'); } - void _applyTrimPath( - Canvas canvas, - _PathGroup pathGroup, - Matrix4 parentMatrix, - ) { + void _applyTrimPath(Canvas canvas, _PathGroup pathGroup) { L.beginSection('StrokeContent#applyTrimPath'); var trimPath = pathGroup.trimPath; if (trimPath == null) { @@ -213,11 +209,7 @@ abstract class BaseStrokeContent } _path.reset(); for (var j = pathGroup.paths.length - 1; j >= 0; j--) { - _path.addPath( - pathGroup.paths[j].getPath(), - Offset.zero, - matrix4: parentMatrix.storage, - ); + _path.addPath(pathGroup.paths[j].getPath(), Offset.zero); } var animStartValue = trimPath.start.value / 100; var animEndValue = trimPath.end.value / 100; @@ -242,9 +234,7 @@ abstract class BaseStrokeContent var currentLength = 0.0; for (var j = pathGroup.paths.length - 1; j >= 0; j--) { - _trimPathPath.set( - pathGroup.paths[j].getPath().transform(parentMatrix.storage), - ); + _trimPathPath.set(pathGroup.paths[j].getPath()); var pathMetrics = _trimPathPath.computeMetrics().toList(); var length = pathMetrics.isNotEmpty ? pathMetrics.first.length : 0; if (endLength > totalLength && @@ -260,13 +250,13 @@ abstract class BaseStrokeContent } var endValue = min((endLength - totalLength) / length, 1).toDouble(); Utils.applyTrimPathIfNeeded(_trimPathPath, startValue, endValue, 0.0); - canvas.drawPath(_withDashPattern(_trimPathPath, parentMatrix), paint); + canvas.drawPath(_withDashPattern(_trimPathPath), paint); } else if (currentLength + length < startLength || currentLength > endLength) { // Do nothing } else if (currentLength + length <= endLength && startLength < currentLength) { - canvas.drawPath(_withDashPattern(_trimPathPath, parentMatrix), paint); + canvas.drawPath(_withDashPattern(_trimPathPath), paint); } else { double startValue; if (startLength < currentLength) { @@ -281,7 +271,7 @@ abstract class BaseStrokeContent endValue = (endLength - currentLength) / length; } Utils.applyTrimPathIfNeeded(_trimPathPath, startValue, endValue, 0); - canvas.drawPath(_withDashPattern(_trimPathPath, parentMatrix), paint); + canvas.drawPath(_withDashPattern(_trimPathPath), paint); } currentLength += length; } @@ -312,14 +302,13 @@ abstract class BaseStrokeContent return bounds; } - Path _withDashPattern(Path path, Matrix4 parentMatrix) { + Path _withDashPattern(Path path) { L.beginSection('StrokeContent#applyDashPattern'); if (_dashPatternAnimations.isEmpty) { L.endSection('StrokeContent#applyDashPattern'); return path; } - var scale = parentMatrix.getScale(); for (var i = 0; i < _dashPatternAnimations.length; i++) { _dashPatternValues[i] = _dashPatternAnimations[i].value; // If the value of the dash pattern or gap is too small, the number of individual sections @@ -335,12 +324,11 @@ abstract class BaseStrokeContent _dashPatternValues[i] = 0.1; } } - _dashPatternValues[i] *= scale; } var offset = _dashPatternOffsetAnimation == null ? 0.0 - : _dashPatternOffsetAnimation.value * scale; + : _dashPatternOffsetAnimation.value; var newPath = dashPath(path, intervals: _dashPatternValues, phase: offset); L.endSection('StrokeContent#applyDashPattern'); diff --git a/lottie/lib/src/animation/content/content_group.dart b/lottie/lib/src/animation/content/content_group.dart index 53cd36a..33e5dde 100644 --- a/lottie/lib/src/animation/content/content_group.dart +++ b/lottie/lib/src/animation/content/content_group.dart @@ -73,8 +73,8 @@ class ContentGroup implements DrawingContent, PathContent, KeyPathElement { this.name, this._contents, AnimatableTransform? transform, { - required bool hidden, - }) : _hidden = hidden { + required this._hidden, + }) { if (transform != null) { _transformAnimation = transform.createAnimation() ..addAnimationsToLayer(layer) diff --git a/lottie/lib/src/animation/content/fill_content.dart b/lottie/lib/src/animation/content/fill_content.dart index 27bd9c0..aee49b9 100644 --- a/lottie/lib/src/animation/content/fill_content.dart +++ b/lottie/lib/src/animation/content/fill_content.dart @@ -22,9 +22,7 @@ import 'path_content.dart'; class FillContent implements DrawingContent, KeyPathElementContent { final Path _path = Path(); final BaseLayer layer; - @override - final String? name; - final bool _hidden; + final ShapeFill _fill; final List _paths = []; late final BaseKeyframeAnimation _colorAnimation; late final BaseKeyframeAnimation _opacityAnimation; @@ -34,9 +32,10 @@ class FillContent implements DrawingContent, KeyPathElementContent { double _blurMaskFilterRadius = 0; DropShadowKeyframeAnimation? dropShadowAnimation; - FillContent(this.lottieDrawable, this.layer, ShapeFill fill) - : name = fill.name, - _hidden = fill.hidden { + @override + String? get name => _fill.name; + + FillContent(this.lottieDrawable, this.layer, this._fill) { var blurEffect = layer.blurEffect; if (blurEffect != null) { _blurAnimation = blurEffect.blurriness.createAnimation() @@ -52,16 +51,14 @@ class FillContent implements DrawingContent, KeyPathElementContent { ); } - if (fill.color == null || fill.opacity == null) { + if (_fill.color == null || _fill.opacity == null) { return; } - _path.fillType = fill.fillType; - - _colorAnimation = fill.color!.createAnimation(); + _colorAnimation = _fill.color!.createAnimation(); _colorAnimation.addUpdateListener(onValueChanged); layer.addAnimation(_colorAnimation); - _opacityAnimation = fill.opacity!.createAnimation(); + _opacityAnimation = _fill.opacity!.createAnimation(); _opacityAnimation.addUpdateListener(onValueChanged); layer.addAnimation(_opacityAnimation); } @@ -82,7 +79,7 @@ class FillContent implements DrawingContent, KeyPathElementContent { @override void draw(Canvas canvas, Matrix4 parentMatrix, {required int parentAlpha}) { - if (_hidden) { + if (_fill.hidden) { return; } L.beginSection('FillContent#draw'); @@ -112,6 +109,7 @@ class FillContent implements DrawingContent, KeyPathElementContent { } _path.reset(); + _path.fillType = _fill.fillType; for (var i = 0; i < _paths.length; i++) { _path.addPath(_paths[i].getPath(), Offset.zero); } @@ -131,6 +129,7 @@ class FillContent implements DrawingContent, KeyPathElementContent { @override Rect getBounds(Matrix4 parentMatrix, {required bool applyParents}) { _path.reset(); + _path.fillType = _fill.fillType; for (var i = 0; i < _paths.length; i++) { _path.addPath( _paths[i].getPath(), diff --git a/lottie/lib/src/animation/content/gradient_fill_content.dart b/lottie/lib/src/animation/content/gradient_fill_content.dart index 3d591ff..195638f 100644 --- a/lottie/lib/src/animation/content/gradient_fill_content.dart +++ b/lottie/lib/src/animation/content/gradient_fill_content.dart @@ -52,7 +52,6 @@ class GradientFillContent implements DrawingContent, KeyPathElementContent { _opacityAnimation = _fill.opacity.createAnimation(), _startPointAnimation = _fill.startPoint.createAnimation(), _endPointAnimation = _fill.endPoint.createAnimation() { - _path.fillType = _fill.fillType; _colorAnimation.addUpdateListener(invalidate); layer.addAnimation(_colorAnimation); @@ -105,6 +104,7 @@ class GradientFillContent implements DrawingContent, KeyPathElementContent { } L.beginSection('GradientFillContent#draw'); _path.reset(); + _path.fillType = _fill.fillType; for (var i = 0; i < _paths.length; i++) { _path.addPath(_paths[i].getPath(), Offset.zero); } @@ -155,6 +155,7 @@ class GradientFillContent implements DrawingContent, KeyPathElementContent { @override Rect getBounds(Matrix4 parentMatrix, {required bool applyParents}) { _path.reset(); + _path.fillType = _fill.fillType; for (var i = 0; i < _paths.length; i++) { _path.addPath( _paths[i].getPath(), diff --git a/lottie/lib/src/animation/content/gradient_stroke_content.dart b/lottie/lib/src/animation/content/gradient_stroke_content.dart index 3549421..8942d43 100644 --- a/lottie/lib/src/animation/content/gradient_stroke_content.dart +++ b/lottie/lib/src/animation/content/gradient_stroke_content.dart @@ -73,9 +73,9 @@ class GradientStrokeContent extends BaseStrokeContent { Gradient gradient; if (_type == GradientType.linear) { - gradient = _getLinearGradient(parentMatrix); + gradient = _getLinearGradient(); } else { - gradient = _getRadialGradient(parentMatrix); + gradient = _getRadialGradient(); } paint.shader = gradient; @@ -83,8 +83,9 @@ class GradientStrokeContent extends BaseStrokeContent { super.draw(canvas, parentMatrix, parentAlpha: parentAlpha); } - Gradient _getLinearGradient(Matrix4 parentMatrix) { - var gradientHash = _getGradientHash(parentMatrix); + // Built in local space; BaseStrokeContent.draw concats the parent matrix, so don't reapply it. + Gradient _getLinearGradient() { + var gradientHash = _getGradientHash(); var gradient = _linearGradientCache[gradientHash]; if (gradient != null) { return gradient; @@ -95,22 +96,15 @@ class GradientStrokeContent extends BaseStrokeContent { var colors = _applyDynamicColorsIfNeeded(gradientColor.colors); var positions = gradientColor.positions; - gradient = Gradient.linear( - startPoint, - endPoint, - colors, - positions, - TileMode.clamp, - parentMatrix.storage, - ); + gradient = Gradient.linear(startPoint, endPoint, colors, positions); if (gradientHash != null) { _linearGradientCache[gradientHash] = gradient; } return gradient; } - Gradient _getRadialGradient(Matrix4 parentMatrix) { - var gradientHash = _getGradientHash(parentMatrix); + Gradient _getRadialGradient() { + var gradientHash = _getGradientHash(); var gradient = _radialGradientCache[gradientHash]; if (gradient != null) { return gradient; @@ -125,14 +119,7 @@ class GradientStrokeContent extends BaseStrokeContent { var x1 = endPoint.dx; var y1 = endPoint.dy; var radius = hypot(x1 - x0, y1 - y0).toDouble(); - gradient = Gradient.radial( - startPoint, - radius, - colors, - positions, - TileMode.clamp, - parentMatrix.storage, - ); + gradient = Gradient.radial(startPoint, radius, colors, positions); if (gradientHash != null) { _radialGradientCache[gradientHash] = gradient; } @@ -142,7 +129,7 @@ class GradientStrokeContent extends BaseStrokeContent { //TODO(xha): cache the shader based on the input parameters and not the animation // progress. // At first, log when there is too many cache miss. - int? _getGradientHash(Matrix4 parentMatrix) { + int? _getGradientHash() { // Don't cache gradient if ValueDelegate.gradient is used if (_colorCallbackAnimation != null) return null; @@ -160,7 +147,6 @@ class GradientStrokeContent extends BaseStrokeContent { if (colorProgress != 0) { hash = hash * 31 * colorProgress; } - hash *= 31 * parentMatrix.hashCode; return hash; } diff --git a/lottie/lib/src/animation/content/polystar_content.dart b/lottie/lib/src/animation/content/polystar_content.dart index 00338fa..e4e00b2 100644 --- a/lottie/lib/src/animation/content/polystar_content.dart +++ b/lottie/lib/src/animation/content/polystar_content.dart @@ -24,6 +24,7 @@ class PolystarContent implements PathContent, KeyPathElementContent { static const _polystarMagicNumber = .47829; static const _polygonMagicNumber = .25; final _path = Path(); + final _lastSegmentPath = Path(); final LottieDrawable lottieDrawable; final PolystarShape _polystarShape; @@ -275,15 +276,50 @@ class PolystarContent implements PathContent, KeyPathElementContent { var cp1y = radius * roundedness * _polygonMagicNumber * cp1Dy; var cp2x = radius * roundedness * _polygonMagicNumber * cp2Dx; var cp2y = radius * roundedness * _polygonMagicNumber * cp2Dy; - _path.cubicTo( - previousX - cp1x, - previousY - cp1y, - x + cp2x, - y + cp2y, - x, - y, - ); + if (i == numPoints - 1) { + // When there is a huge stroke, it will flash if the path ends where it starts. + // We want the final bezier curve to end *slightly* before the start. + // The close() call at the end will complete the polystar. + // https://github.com/airbnb/lottie-android/issues/2329 + _lastSegmentPath.reset(); + _lastSegmentPath.moveTo(previousX, previousY); + _lastSegmentPath.cubicTo( + previousX - cp1x, + previousY - cp1y, + x + cp2x, + y + cp2y, + x, + y, + ); + var metric = _lastSegmentPath.computeMetrics().first; + var position = metric + .getTangentForOffset(metric.length * 0.9999)! + .position; + _path.cubicTo( + previousX - cp1x, + previousY - cp1y, + x + cp2x, + y + cp2y, + position.dx, + position.dy, + ); + } else { + _path.cubicTo( + previousX - cp1x, + previousY - cp1y, + x + cp2x, + y + cp2y, + x, + y, + ); + } } else { + if (i == numPoints - 1) { + // When there is a huge stroke, it will flash if the path ends where it starts. + // The close() call should make the path effectively equivalent. + // https://github.com/airbnb/lottie-android/issues/2329 + continue; + } _path.lineTo(x, y); } diff --git a/lottie/lib/src/animation/content/rounded_corners_content.dart b/lottie/lib/src/animation/content/rounded_corners_content.dart index 4a3c167..945a4de 100644 --- a/lottie/lib/src/animation/content/rounded_corners_content.dart +++ b/lottie/lib/src/animation/content/rounded_corners_content.dart @@ -42,6 +42,11 @@ class RoundedCornersContent implements ShapeModifierContent { // Do nothing. } + @override + void addUpdateListener(void Function() listener) { + roundedCorners.addUpdateListener(listener); + } + /// Rounded corner algorithm: /// Iterate through each vertex. /// If a vertex is a sharp corner, it rounds it. diff --git a/lottie/lib/src/animation/content/shape_content.dart b/lottie/lib/src/animation/content/shape_content.dart index c7dc24b..5fc3f1b 100644 --- a/lottie/lib/src/animation/content/shape_content.dart +++ b/lottie/lib/src/animation/content/shape_content.dart @@ -1,17 +1,22 @@ import 'dart:ui'; import '../../lottie_drawable.dart'; +import '../../lottie_property.dart'; import '../../model/content/shape_path.dart'; import '../../model/content/shape_trim_path.dart'; +import '../../model/key_path.dart'; import '../../model/layer/base_layer.dart'; import '../../utils.dart'; +import '../../utils/misc.dart'; +import '../../value/lottie_value_callback.dart'; import '../keyframe/shape_keyframe_animation.dart'; import 'compound_trim_path_content.dart'; import 'content.dart'; +import 'key_path_element_content.dart'; import 'path_content.dart'; import 'shape_modifier_content.dart'; import 'trim_path_content.dart'; -class ShapeContent implements PathContent { +class ShapeContent implements PathContent, KeyPathElementContent { final _path = Path(); final ShapePath _shape; @@ -46,6 +51,7 @@ class ShapeContent implements PathContent { trimPath.addListener(_invalidate); } else if (content is ShapeModifierContent) { shapeModifierContents ??= []; + content.addUpdateListener(_invalidate); shapeModifierContents.add(content); } } @@ -57,7 +63,7 @@ class ShapeContent implements PathContent { @override Path getPath() { - if (_isPathValid) { + if (_isPathValid && !_shapeAnimation.hasValueCallback) { return _path; } @@ -76,4 +82,27 @@ class ShapeContent implements PathContent { _isPathValid = true; return _path; } + + @override + void resolveKeyPath( + KeyPath keyPath, + int depth, + List accumulator, + KeyPath currentPartialKeyPath, + ) { + MiscUtils.resolveKeyPath( + keyPath, + depth, + accumulator, + currentPartialKeyPath, + this, + ); + } + + @override + void addValueCallback(T property, LottieValueCallback? callback) { + if (property == LottieProperty.path) { + _shapeAnimation.setValueCallback(callback as LottieValueCallback?); + } + } } diff --git a/lottie/lib/src/animation/content/shape_modifier_content.dart b/lottie/lib/src/animation/content/shape_modifier_content.dart index 12daabe..e6a8676 100644 --- a/lottie/lib/src/animation/content/shape_modifier_content.dart +++ b/lottie/lib/src/animation/content/shape_modifier_content.dart @@ -3,4 +3,6 @@ import 'content.dart'; abstract class ShapeModifierContent extends Content { ShapeData modifyShape(ShapeData shapeData); + + void addUpdateListener(void Function() listener); } diff --git a/lottie/lib/src/animation/keyframe/base_keyframe_animation.dart b/lottie/lib/src/animation/keyframe/base_keyframe_animation.dart index c4defc1..62b2c33 100644 --- a/lottie/lib/src/animation/keyframe/base_keyframe_animation.dart +++ b/lottie/lib/src/animation/keyframe/base_keyframe_animation.dart @@ -107,7 +107,8 @@ abstract class BaseKeyframeAnimation { var linearProgress = getLinearCurrentKeyframeProgress(); if (valueCallback == null && - _keyframesWrapper.isCachedValueEnabled(linearProgress)) { + _keyframesWrapper.isCachedValueEnabled(linearProgress) && + !skipCache) { return _cachedGetValue!; } @@ -150,6 +151,11 @@ abstract class BaseKeyframeAnimation { } } + bool get hasValueCallback => valueCallback != null; + + @protected + bool get skipCache => false; + /// keyframeProgress will be [0, 1] unless the interpolator has overshoot in which case, this /// should be able to handle values outside of that range. A getValue(Keyframe keyframe, double keyframeProgress); diff --git a/lottie/lib/src/animation/keyframe/shape_keyframe_animation.dart b/lottie/lib/src/animation/keyframe/shape_keyframe_animation.dart index 5ee13d6..4d089d5 100644 --- a/lottie/lib/src/animation/keyframe/shape_keyframe_animation.dart +++ b/lottie/lib/src/animation/keyframe/shape_keyframe_animation.dart @@ -9,17 +9,19 @@ class ShapeKeyframeAnimation extends BaseKeyframeAnimation { final ShapeData _tempShapeData = ShapeData.empty(); final Path _tempPath = Path(); List? _shapeModifiers; + Path? _valueCallbackStartPath; + Path? _valueCallbackEndPath; ShapeKeyframeAnimation(super.keyframes); @override Path getValue(Keyframe keyframe, double keyframeProgress) { var startShapeData = keyframe.startValue!; - var endShapeData = keyframe.endValue ?? startShapeData; + var endShapeData = keyframe.endValue; _tempShapeData.interpolateBetween( startShapeData, - endShapeData, + endShapeData ?? startShapeData, keyframeProgress, ); var modifiedShapeData = _tempShapeData; @@ -30,10 +32,39 @@ class ShapeKeyframeAnimation extends BaseKeyframeAnimation { } } MiscUtils.getPathFromData(modifiedShapeData, _tempPath); + + var valueCallback = this.valueCallback; + if (valueCallback != null) { + var startPath = _valueCallbackStartPath ??= Path(); + var endPath = _valueCallbackEndPath ??= Path(); + MiscUtils.getPathFromData(startShapeData, startPath); + if (endShapeData != null) { + MiscUtils.getPathFromData(endShapeData, endPath); + } + return valueCallback.getValueInternal( + keyframe.startFrame, + keyframe.endFrame, + startPath, + endShapeData == null ? startPath : endPath, + keyframeProgress, + getLinearCurrentKeyframeProgress(), + progress, + ) ?? + _tempPath; + } + return _tempPath; } void setShapeModifiers(List? shapeModifiers) { _shapeModifiers = shapeModifiers; } + + @override + bool get skipCache { + // If there are shape modifiers but no animation on the shape itself, the shape animation + // will think nothing changed and will keep returning its cached value. + var shapeModifiers = _shapeModifiers; + return shapeModifiers != null && shapeModifiers.isNotEmpty; + } } diff --git a/lottie/lib/src/animation/keyframe/transform_keyframe_animation.dart b/lottie/lib/src/animation/keyframe/transform_keyframe_animation.dart index 8b4baac..c7d8cb9 100644 --- a/lottie/lib/src/animation/keyframe/transform_keyframe_animation.dart +++ b/lottie/lib/src/animation/keyframe/transform_keyframe_animation.dart @@ -26,6 +26,8 @@ class TransformKeyframeAnimation { _position = animatableTransform.position?.createAnimation(), _scale = animatableTransform.scale?.createAnimation(), _rotation = animatableTransform.rotation?.createAnimation(), + _rotationX = animatableTransform.rotationX?.createAnimation(), + _rotationY = animatableTransform.rotationY?.createAnimation(), _autoOrient = animatableTransform.isAutoOrient, _skew = animatableTransform.skew?.createAnimation(), _skewAngle = animatableTransform.skewAngle?.createAnimation(), @@ -42,6 +44,8 @@ class TransformKeyframeAnimation { BaseKeyframeAnimation? _position; BaseKeyframeAnimation? _scale; BaseKeyframeAnimation? _rotation; + BaseKeyframeAnimation? _rotationX; + BaseKeyframeAnimation? _rotationY; DoubleKeyframeAnimation? _skew; DoubleKeyframeAnimation? _skewAngle; @@ -65,6 +69,8 @@ class TransformKeyframeAnimation { layer.addAnimation(_position); layer.addAnimation(_scale); layer.addAnimation(_rotation); + layer.addAnimation(_rotationX); + layer.addAnimation(_rotationY); layer.addAnimation(_skew); layer.addAnimation(_skewAngle); } @@ -77,6 +83,8 @@ class TransformKeyframeAnimation { _position?.addUpdateListener(listener); _scale?.addUpdateListener(listener); _rotation?.addUpdateListener(listener); + _rotationX?.addUpdateListener(listener); + _rotationY?.addUpdateListener(listener); _skew?.addUpdateListener(listener); _skewAngle?.addUpdateListener(listener); } @@ -89,6 +97,8 @@ class TransformKeyframeAnimation { _position?.setProgress(progress); _scale?.setProgress(progress); _rotation?.setProgress(progress); + _rotationX?.setProgress(progress); + _rotationY?.setProgress(progress); _skew?.setProgress(progress); _skewAngle?.setProgress(progress); } @@ -132,6 +142,20 @@ class TransformKeyframeAnimation { } } + // Approximate X/Y rotation as a 2D foreshortening: scale the perpendicular axis by cos(angle). + if (_rotationY != null) { + final rotationY = _rotationY!.value; + if (rotationY != 0) { + _matrix.scaleByDouble(cos(radians(rotationY)), 1, 1, 1); + } + } + if (_rotationX != null) { + final rotationX = _rotationX!.value; + if (rotationX != 0) { + _matrix.scaleByDouble(1, cos(radians(rotationX)), 1, 1); + } + } + if (_skew != null) { final mCos = _skewAngle == null ? 0.0 @@ -258,6 +282,19 @@ class TransformKeyframeAnimation { ); } + if (_rotationY != null) { + final rotationY = _rotationY!.value * amount; + if (rotationY != 0) { + _matrix.scaleByDouble(cos(radians(rotationY)), 1, 1, 1); + } + } + if (_rotationX != null) { + final rotationX = _rotationX!.value * amount; + if (rotationX != 0) { + _matrix.scaleByDouble(1, cos(radians(rotationX)), 1, 1); + } + } + return _matrix; } @@ -329,6 +366,24 @@ class TransformKeyframeAnimation { } else { _endOpacity!.setValueCallback(callback as LottieValueCallback?); } + } else if (property == LottieProperty.transformRotationX) { + if (_rotationX == null) { + _rotationX = ValueCallbackKeyframeAnimation( + callback as LottieValueCallback?, + 0.0, + ); + } else { + _rotationX!.setValueCallback(callback as LottieValueCallback?); + } + } else if (property == LottieProperty.transformRotationY) { + if (_rotationY == null) { + _rotationY = ValueCallbackKeyframeAnimation( + callback as LottieValueCallback?, + 0.0, + ); + } else { + _rotationY!.setValueCallback(callback as LottieValueCallback?); + } } else if (property == LottieProperty.transformSkew) { _skew ??= DoubleKeyframeAnimation([Keyframe.nonAnimated(0.0)]); _skew!.setValueCallback(callback as LottieValueCallback?); diff --git a/lottie/lib/src/composition.dart b/lottie/lib/src/composition.dart index b5a2b7a..28dcd0c 100644 --- a/lottie/lib/src/composition.dart +++ b/lottie/lib/src/composition.dart @@ -77,14 +77,21 @@ class LottieComposition { if (filePicker != null) { jsonFile = filePicker(archive.files); } - jsonFile ??= archive.files.firstWhere((e) => e.name.endsWith('.json')); + jsonFile ??= archive.files.firstWhereOrNull( + (e) => e.name.startsWith('animations/') && e.name.endsWith('.json'), + ); + jsonFile ??= archive.files.firstWhere( + (e) => + e.name.endsWith('.json') && p.basename(e.name) != 'manifest.json', + ); var composition = parseJsonBytes(jsonFile.content); for (var image in composition.images.values) { var imagePath = p.posix.join(image.dirName, image.fileName); var found = archive.files.firstWhereOrNull( - (f) => f.name.toLowerCase() == imagePath.toLowerCase(), + (f) => + _normalizeArchivePath(f.name) == _normalizeArchivePath(imagePath), ); ImageProvider? provider; @@ -119,6 +126,14 @@ class LottieComposition { return null; } + static String _normalizeArchivePath(String path) { + var normalized = p.posix.normalize(path).toLowerCase(); + if (normalized.startsWith('/')) { + normalized = normalized.substring(1); + } + return normalized; + } + static Future decodeGZip(List bytes) async { if (bytes[0] == 31 && bytes[1] == 139) { var decodedBytes = GZipDecoder().decodeBytes(bytes); diff --git a/lottie/lib/src/lottie.dart b/lottie/lib/src/lottie.dart index 4c8ed6d..880d9e7 100644 --- a/lottie/lib/src/lottie.dart +++ b/lottie/lib/src/lottie.dart @@ -389,6 +389,12 @@ class Lottie extends StatefulWidget { class _LottieState extends State with TickerProviderStateMixin { late AnimationController _autoAnimation; + /// The last frame we rebuilt for, expressed as the frame-rate-rounded + /// progress. The vsync ticker notifies us every frame, but we only rebuild + /// when this value actually changes, so build/paint run at the composition's + /// frame rate instead of the display refresh rate. + double? _renderedProgress; + @override void initState() { super.initState(); @@ -397,6 +403,7 @@ class _LottieState extends State with TickerProviderStateMixin { vsync: this, duration: widget.composition?.duration ?? const Duration(seconds: 1), ); + _progressAnimation.addListener(_onProgressChanged); _updateAutoAnimation(); } @@ -404,6 +411,13 @@ class _LottieState extends State with TickerProviderStateMixin { void didUpdateWidget(Lottie oldWidget) { super.didUpdateWidget(oldWidget); + if (oldWidget.controller != widget.controller) { + (oldWidget.controller ?? _autoAnimation).removeListener( + _onProgressChanged, + ); + _progressAnimation.addListener(_onProgressChanged); + } + _autoAnimation.duration = widget.composition?.duration ?? const Duration(seconds: 1); _updateAutoAnimation(); @@ -421,8 +435,25 @@ class _LottieState extends State with TickerProviderStateMixin { } } + /// Called on every vsync tick. Quantizes the raw progress to the target frame + /// rate and only triggers a rebuild when the resulting frame changes. + void _onProgressChanged() { + var rounded = + widget.composition?.roundProgress( + _progressAnimation.value, + frameRate: _frameRate, + ) ?? + _progressAnimation.value; + if (rounded != _renderedProgress) { + setState(() => _renderedProgress = rounded); + } + } + + FrameRate get _frameRate => widget.frameRate ?? FrameRate.composition; + @override void dispose() { + _progressAnimation.removeListener(_onProgressChanged); _autoAnimation.dispose(); super.dispose(); } @@ -432,23 +463,18 @@ class _LottieState extends State with TickerProviderStateMixin { @override Widget build(BuildContext context) { - Widget child = AnimatedBuilder( - animation: _progressAnimation, - builder: (context, _) { - return RawLottie( - composition: widget.composition, - delegates: widget.delegates, - options: widget.options, - progress: _progressAnimation.value, - frameRate: widget.frameRate, - width: widget.width, - height: widget.height, - fit: widget.fit, - alignment: widget.alignment, - filterQuality: widget.filterQuality, - renderCache: widget.renderCache, - ); - }, + Widget child = RawLottie( + composition: widget.composition, + delegates: widget.delegates, + options: widget.options, + progress: _progressAnimation.value, + frameRate: widget.frameRate, + width: widget.width, + height: widget.height, + fit: widget.fit, + alignment: widget.alignment, + filterQuality: widget.filterQuality, + renderCache: widget.renderCache, ); if (widget.addRepaintBoundary) { diff --git a/lottie/lib/src/lottie_drawable.dart b/lottie/lib/src/lottie_drawable.dart index 22150d3..a792a72 100644 --- a/lottie/lib/src/lottie_drawable.dart +++ b/lottie/lib/src/lottie_drawable.dart @@ -222,8 +222,6 @@ class LottieDrawable { var destinationRect = destinationPosition & destinationSize; var sourceRect = alignment.inscribe(sourceSize, Offset.zero & inputSize); - _matrix.setIdentity(); - var cacheUsed = false; if (renderCache != null) { var progressForCache = _progressAliases[progress] ?? progress; @@ -243,12 +241,7 @@ class LottieDrawable { if (!cacheUsed) { canvas.save(); canvas.translate(destinationRect.left, destinationRect.top); - _matrix.scaleByDouble( - destinationSize.width / sourceRect.width, - destinationSize.height / sourceRect.height, - destinationSize.width / sourceRect.width, - 1, - ); + _matrix.setSourceToDestinationScale(sourceRect, destinationSize); _compositionLayer.draw(canvas, _matrix, parentAlpha: 255); canvas.restore(); } diff --git a/lottie/lib/src/lottie_property.dart b/lottie/lib/src/lottie_property.dart index a229b81..2b2264b 100644 --- a/lottie/lib/src/lottie_property.dart +++ b/lottie/lib/src/lottie_property.dart @@ -83,6 +83,12 @@ abstract class LottieProperty { /// In degrees */ static const double transformRotation = 12.0; + /// In degrees (3D X-axis rotation) */ + static const double transformRotationX = 30.0; + + /// In degrees (3D Y-axis rotation) */ + static const double transformRotationY = 31.0; + /// 0-85 */ static const double transformSkew = 13.0; @@ -141,6 +147,9 @@ abstract class LottieProperty { static final List gradientColor = []; + /// Replace the outline of a shape (`ShapeContent`) at runtime. + static final Path path = Path(); + /// Replace the text for a text layer. static const text = 'dynamic_text'; } diff --git a/lottie/lib/src/model/animatable/animatable_text_properties.dart b/lottie/lib/src/model/animatable/animatable_text_properties.dart index 7357241..5ce0cc3 100644 --- a/lottie/lib/src/model/animatable/animatable_text_properties.dart +++ b/lottie/lib/src/model/animatable/animatable_text_properties.dart @@ -1,16 +1,9 @@ -import 'animatable_color_value.dart'; -import 'animatable_double_value.dart'; +import 'animatable_text_range_selector.dart'; +import 'animatable_text_style.dart'; class AnimatableTextProperties { - final AnimatableColorValue? color; - final AnimatableColorValue? stroke; - final AnimatableDoubleValue? strokeWidth; - final AnimatableDoubleValue? tracking; + final AnimatableTextStyle? textStyle; + final AnimatableTextRangeSelector? rangeSelector; - AnimatableTextProperties({ - this.color, - this.stroke, - this.strokeWidth, - this.tracking, - }); + AnimatableTextProperties({this.textStyle, this.rangeSelector}); } diff --git a/lottie/lib/src/model/animatable/animatable_text_range_selector.dart b/lottie/lib/src/model/animatable/animatable_text_range_selector.dart new file mode 100644 index 0000000..4e1bb07 --- /dev/null +++ b/lottie/lib/src/model/animatable/animatable_text_range_selector.dart @@ -0,0 +1,17 @@ +import '../content/text_range_units.dart'; +import 'animatable_integer_value.dart'; + +/// Defines an animated range of text that should have an [AnimatableTextStyle] applied to it. +class AnimatableTextRangeSelector { + final AnimatableIntegerValue? start; + final AnimatableIntegerValue? end; + final AnimatableIntegerValue? offset; + final TextRangeUnits units; + + AnimatableTextRangeSelector({ + this.start, + this.end, + this.offset, + required this.units, + }); +} diff --git a/lottie/lib/src/model/animatable/animatable_text_style.dart b/lottie/lib/src/model/animatable/animatable_text_style.dart new file mode 100644 index 0000000..1637039 --- /dev/null +++ b/lottie/lib/src/model/animatable/animatable_text_style.dart @@ -0,0 +1,19 @@ +import 'animatable_color_value.dart'; +import 'animatable_double_value.dart'; +import 'animatable_integer_value.dart'; + +class AnimatableTextStyle { + final AnimatableColorValue? color; + final AnimatableColorValue? stroke; + final AnimatableDoubleValue? strokeWidth; + final AnimatableDoubleValue? tracking; + final AnimatableIntegerValue? opacity; + + AnimatableTextStyle({ + this.color, + this.stroke, + this.strokeWidth, + this.tracking, + this.opacity, + }); +} diff --git a/lottie/lib/src/model/animatable/animatable_transform.dart b/lottie/lib/src/model/animatable/animatable_transform.dart index 91d178b..dce9a17 100644 --- a/lottie/lib/src/model/animatable/animatable_transform.dart +++ b/lottie/lib/src/model/animatable/animatable_transform.dart @@ -20,6 +20,11 @@ class AnimatableTransform implements ModifierContent, ContentModel { final AnimatableDoubleValue? rotation; + // 3D rotation. [rotation] is the Z rotation. + final AnimatableDoubleValue? rotationX; + + final AnimatableDoubleValue? rotationY; + final AnimatableIntegerValue? opacity; final AnimatableDoubleValue? skew; @@ -39,6 +44,8 @@ class AnimatableTransform implements ModifierContent, ContentModel { this.position, this.scale, this.rotation, + this.rotationX, + this.rotationY, this.opacity, this.skew, this.skewAngle, diff --git a/lottie/lib/src/model/content/text_range_units.dart b/lottie/lib/src/model/content/text_range_units.dart new file mode 100644 index 0000000..f2a1c7e --- /dev/null +++ b/lottie/lib/src/model/content/text_range_units.dart @@ -0,0 +1,2 @@ +/// `index` is named [charIndex] because every Dart enum already defines an `index` getter. +enum TextRangeUnits { percent, charIndex } diff --git a/lottie/lib/src/model/layer/base_layer.dart b/lottie/lib/src/model/layer/base_layer.dart index 4553543..17bf8b8 100644 --- a/lottie/lib/src/model/layer/base_layer.dart +++ b/lottie/lib/src/model/layer/base_layer.dart @@ -246,7 +246,7 @@ abstract class BaseLayer implements DrawingContent, KeyPathElement { canvas.saveLayer(bounds, _mattePaint); L.endSection('Layer#saveLayer'); _clearCanvas(canvas, bounds); - _matteLayer!.draw(canvas, parentMatrix, parentAlpha: alpha); + _matteLayer!.draw(canvas, parentMatrix, parentAlpha: parentAlpha); L.beginSection('Layer#restoreLayer'); canvas.restore(); L.endSection('Layer#restoreLayer'); diff --git a/lottie/lib/src/model/layer/text_layer.dart b/lottie/lib/src/model/layer/text_layer.dart index 87558d3..75ff270 100644 --- a/lottie/lib/src/model/layer/text_layer.dart +++ b/lottie/lib/src/model/layer/text_layer.dart @@ -1,3 +1,4 @@ +import 'dart:math' as math; import 'package:flutter/widgets.dart'; import '../../animation/content/content_group.dart'; import '../../animation/keyframe/base_keyframe_animation.dart'; @@ -9,6 +10,7 @@ import '../../lottie_property.dart'; import '../../utils.dart'; import '../../utils/characters.dart'; import '../../value/lottie_value_callback.dart'; +import '../content/text_range_units.dart'; import '../document_data.dart'; import '../font.dart'; import '../font_character.dart'; @@ -48,6 +50,16 @@ class TextLayer extends BaseLayer { BaseKeyframeAnimation? _textSizeCallbackAnimation; + BaseKeyframeAnimation? _opacityAnimation; + + BaseKeyframeAnimation? _textRangeStartAnimation; + + BaseKeyframeAnimation? _textRangeEndAnimation; + + BaseKeyframeAnimation? _textRangeOffsetAnimation; + + TextRangeUnits _textRangeUnits = TextRangeUnits.charIndex; + TextLayer(LottieDrawable lottieDrawable, Layer layerModel) : _composition = layerModel.composition, _textAnimation = layerModel.text!.createAnimation(), @@ -56,29 +68,59 @@ class TextLayer extends BaseLayer { addAnimation(_textAnimation); var textProperties = layerModel.textProperties; - if (textProperties != null && textProperties.color != null) { - _colorAnimation = textProperties.color!.createAnimation() + var textStyle = textProperties?.textStyle; + if (textStyle != null && textStyle.color != null) { + _colorAnimation = textStyle.color!.createAnimation() ..addUpdateListener(invalidateSelf); addAnimation(_colorAnimation); } - if (textProperties != null && textProperties.stroke != null) { - _strokeColorAnimation = textProperties.stroke!.createAnimation() + if (textStyle != null && textStyle.stroke != null) { + _strokeColorAnimation = textStyle.stroke!.createAnimation() ..addUpdateListener(invalidateSelf); addAnimation(_strokeColorAnimation); } - if (textProperties != null && textProperties.strokeWidth != null) { - _strokeWidthAnimation = textProperties.strokeWidth!.createAnimation() + if (textStyle != null && textStyle.strokeWidth != null) { + _strokeWidthAnimation = textStyle.strokeWidth!.createAnimation() ..addUpdateListener(invalidateSelf); addAnimation(_strokeWidthAnimation); } - if (textProperties != null && textProperties.tracking != null) { - _trackingAnimation = textProperties.tracking!.createAnimation() + if (textStyle != null && textStyle.tracking != null) { + _trackingAnimation = textStyle.tracking!.createAnimation() ..addUpdateListener(invalidateSelf); addAnimation(_trackingAnimation); } + + if (textStyle != null && textStyle.opacity != null) { + _opacityAnimation = textStyle.opacity!.createAnimation() + ..addUpdateListener(invalidateSelf); + addAnimation(_opacityAnimation); + } + + var rangeSelector = textProperties?.rangeSelector; + if (rangeSelector != null && rangeSelector.start != null) { + _textRangeStartAnimation = rangeSelector.start!.createAnimation() + ..addUpdateListener(invalidateSelf); + addAnimation(_textRangeStartAnimation); + } + + if (rangeSelector != null && rangeSelector.end != null) { + _textRangeEndAnimation = rangeSelector.end!.createAnimation() + ..addUpdateListener(invalidateSelf); + addAnimation(_textRangeEndAnimation); + } + + if (rangeSelector != null && rangeSelector.offset != null) { + _textRangeOffsetAnimation = rangeSelector.offset!.createAnimation() + ..addUpdateListener(invalidateSelf); + addAnimation(_textRangeOffsetAnimation); + } + + if (rangeSelector != null) { + _textRangeUnits = rangeSelector.units; + } } @override @@ -107,24 +149,41 @@ class TextLayer extends BaseLayer { canvas.save(); canvas.transform(parentMatrix.storage); - _configurePaint(documentData, parentAlpha); + _configurePaint(documentData, parentAlpha, 0); if (lottieDrawable.useTextGlyphs) { - _drawTextWithGlyphs(documentData, parentMatrix, font, canvas); + _drawTextWithGlyphs( + documentData, + parentMatrix, + font, + canvas, + parentAlpha, + ); } else { - _drawTextWithFont(documentData, font, canvas); + _drawTextWithFont(documentData, font, canvas, parentAlpha); } canvas.restore(); } - void _configurePaint(DocumentData documentData, int parentAlpha) { + /// Configures the [_fillPaint] and [_strokePaint] used for drawing based on the + /// currently active text ranges. + /// + /// [parentAlpha] is a value from 0 to 255 indicating the alpha of the parented layer. + void _configurePaint( + DocumentData documentData, + int parentAlpha, + int indexInDocument, + ) { Color fillPaintColor; if (_colorCallbackAnimation != null) { + // dynamic property takes priority fillPaintColor = _colorCallbackAnimation!.value; - } else if (_colorAnimation != null) { + } else if (_colorAnimation != null && + _isIndexInRangeSelection(indexInDocument)) { fillPaintColor = _colorAnimation!.value; } else { + // fall back to the document color fillPaintColor = documentData.color; } _fillPaint.color = fillPaintColor.withValues(alpha: _fillPaint.color.a); @@ -132,7 +191,8 @@ class TextLayer extends BaseLayer { Color strokePaintColor; if (_strokeColorCallbackAnimation != null) { strokePaintColor = _strokeColorCallbackAnimation!.value; - } else if (_strokeColorAnimation != null) { + } else if (_strokeColorAnimation != null && + _isIndexInRangeSelection(indexInDocument)) { strokePaintColor = _strokeColorAnimation!.value; } else { strokePaintColor = documentData.strokeColor; @@ -141,25 +201,78 @@ class TextLayer extends BaseLayer { alpha: _strokePaint.color.a, ); - var opacity = transform.opacity?.value ?? 100; - var alpha = opacity * 255 / 100 * parentAlpha ~/ 255; + // These opacity values are in the range 0 to 100. + var transformOpacity = transform.opacity?.value ?? 100; + var textRangeOpacity = + _opacityAnimation != null && _isIndexInRangeSelection(indexInDocument) + ? _opacityAnimation!.value + : 100; + + // This alpha value needs to be in the range 0 to 255 to be applied to the Paint + // instances. We map the layer transform's opacity into that range and multiply it by + // the fractional opacity of the text range and the parent. + var alpha = + (transformOpacity * + 255 / + 100 * + (textRangeOpacity / 100) * + parentAlpha / + 255) + .round(); _fillPaint.setAlpha(alpha); _strokePaint.setAlpha(alpha); if (_strokeWidthCallbackAnimation != null) { _strokePaint.strokeWidth = _strokeWidthCallbackAnimation!.value; - } else if (_strokeWidthAnimation != null) { + } else if (_strokeWidthAnimation != null && + _isIndexInRangeSelection(indexInDocument)) { _strokePaint.strokeWidth = _strokeWidthAnimation!.value; } else { _strokePaint.strokeWidth = documentData.strokeWidth; } } + bool _isIndexInRangeSelection(int indexInDocument) { + var textLength = _textAnimation.value.text.length; + var textRangeStartAnimation = _textRangeStartAnimation; + var textRangeEndAnimation = _textRangeEndAnimation; + if (textRangeStartAnimation != null && textRangeEndAnimation != null) { + // After Effects supports reversed text ranges where the start index is greater than + // the end index. For the purposes of determining if the given index is inside of the + // range, we take the start as the smaller value. + var rangeStart = math.min( + textRangeStartAnimation.value, + textRangeEndAnimation.value, + ); + var rangeEnd = math.max( + textRangeStartAnimation.value, + textRangeEndAnimation.value, + ); + + var textRangeOffsetAnimation = _textRangeOffsetAnimation; + if (textRangeOffsetAnimation != null) { + var offset = textRangeOffsetAnimation.value; + rangeStart += offset; + rangeEnd += offset; + } + + if (_textRangeUnits == TextRangeUnits.charIndex) { + return indexInDocument >= rangeStart && indexInDocument < rangeEnd; + } else { + var currentIndexAsPercent = indexInDocument / textLength * 100; + return currentIndexAsPercent >= rangeStart && + currentIndexAsPercent < rangeEnd; + } + } + return true; + } + void _drawTextWithGlyphs( DocumentData documentData, Matrix4 parentMatrix, Font font, Canvas canvas, + int parentAlpha, ) { double textSize; if (_textSizeCallbackAnimation != null) { @@ -211,6 +324,7 @@ class TextLayer extends BaseLayer { parentScale, fontScale, tracking, + parentAlpha, ); canvas.restore(); @@ -226,21 +340,37 @@ class TextLayer extends BaseLayer { double parentScale, double fontScale, double tracking, + int parentAlpha, ) { + var index = 0; for (var c in text) { var characterHash = FontCharacter.hashFor(c, font.family, font.style); var character = _composition.characters[characterHash]; if (character == null) { // Something is wrong. Potentially, they didn't export the text as a glyph. + index++; continue; } - _drawCharacterAsGlyph(character, fontScale, documentData, canvas); + _drawCharacterAsGlyph( + character, + fontScale, + documentData, + canvas, + index, + parentAlpha, + ); var tx = character.width * fontScale + tracking; canvas.translate(tx, 0); + index++; } } - void _drawTextWithFont(DocumentData documentData, Font font, Canvas canvas) { + void _drawTextWithFont( + DocumentData documentData, + Font font, + Canvas canvas, + int parentAlpha, + ) { var textStyle = lottieDrawable.getTextStyle(font.family, font.style); var text = documentData.text; var textDelegate = lottieDrawable.delegates?.text; @@ -270,6 +400,7 @@ class TextLayer extends BaseLayer { var textLines = _getTextLines(text); var textLineCount = textLines.length; var lineIndex = -1; + var characterIndexAtStartOfLine = 0; for (var i = 0; i < textLineCount; i++) { var textLine = textLines[i]; var boxWidth = documentData.boxSize?.dx ?? 0.0; @@ -288,7 +419,17 @@ class TextLayer extends BaseLayer { canvas.save(); _offsetCanvas(canvas, documentData, lineIndex, line.width); - _drawFontTextLine(line.text, textStyle, documentData, canvas, tracking); + _drawFontTextLine( + line.text, + textStyle, + documentData, + canvas, + tracking, + characterIndexAtStartOfLine, + parentAlpha, + ); + + characterIndexAtStartOfLine += line.text.length; canvas.restore(); } @@ -332,16 +473,28 @@ class TextLayer extends BaseLayer { return textLinesArray.map((l) => l.characters).toList(); } + /// [characterIndexAtStartOfLine] is the index within the overall document of the character + /// at the start of the line. void _drawFontTextLine( Characters text, TextStyle textStyle, DocumentData documentData, Canvas canvas, double tracking, + int characterIndexAtStartOfLine, + int parentAlpha, ) { + var index = 0; for (var char in text) { var charString = char; - _drawCharacterFromFont(charString, textStyle, documentData, canvas); + _drawCharacterFromFont( + charString, + textStyle, + documentData, + canvas, + characterIndexAtStartOfLine + index, + parentAlpha, + ); var textPainter = TextPainter( text: TextSpan(text: charString, style: textStyle), textDirection: _textDirection, @@ -350,6 +503,7 @@ class TextLayer extends BaseLayer { var charWidth = textPainter.width; var tx = charWidth + tracking; canvas.translate(tx, 0); + index++; } } @@ -463,7 +617,10 @@ class TextLayer extends BaseLayer { double fontScale, DocumentData documentData, Canvas canvas, + int indexInDocument, + int parentAlpha, ) { + _configurePaint(documentData, parentAlpha, indexInDocument); var contentGroups = _getContentsForCharacter(character); for (var j = 0; j < contentGroups.length; j++) { var path = contentGroups[j].getPath(); @@ -496,7 +653,10 @@ class TextLayer extends BaseLayer { TextStyle textStyle, DocumentData documentData, Canvas canvas, + int indexInDocument, + int parentAlpha, ) { + _configurePaint(documentData, parentAlpha, indexInDocument); if (documentData.strokeOverFill) { _drawCharacter(character, textStyle, _fillPaint, canvas); _drawCharacter(character, textStyle, _strokePaint, canvas); diff --git a/lottie/lib/src/parser/animatable_text_properties_parser.dart b/lottie/lib/src/parser/animatable_text_properties_parser.dart index 781977a..51a1a8a 100644 --- a/lottie/lib/src/parser/animatable_text_properties_parser.dart +++ b/lottie/lib/src/parser/animatable_text_properties_parser.dart @@ -1,14 +1,35 @@ import '../composition.dart'; import '../model/animatable/animatable_color_value.dart'; import '../model/animatable/animatable_double_value.dart'; +import '../model/animatable/animatable_integer_value.dart'; import '../model/animatable/animatable_text_properties.dart'; +import '../model/animatable/animatable_text_range_selector.dart'; +import '../model/animatable/animatable_text_style.dart'; +import '../model/content/text_range_units.dart'; +import '../value/keyframe.dart'; import 'animatable_value_parser.dart'; import 'moshi/json_reader.dart'; class AnimatableTextPropertiesParser { - static final JsonReaderOptions _propertiesNames = JsonReaderOptions.of(['a']); + static final JsonReaderOptions _propertiesNames = JsonReaderOptions.of([ + 's', // Range selector + 'a', // Text style for this range + ]); + static final JsonReaderOptions _animatableRangePropertiesNames = + JsonReaderOptions.of([ + 's', // start + 'e', // end + 'o', // offset + 'r', // text range units (percent or index) + ]); static final JsonReaderOptions _animatablePropertiesNames = - JsonReaderOptions.of(['fc', 'sc', 'sw', 't']); + JsonReaderOptions.of([ + 'fc', + 'sc', + 'sw', + 't', + 'o', // opacity + ]); AnimatableTextPropertiesParser(); @@ -16,27 +37,84 @@ class AnimatableTextPropertiesParser { JsonReader reader, LottieComposition composition, ) { - AnimatableTextProperties? anim; + AnimatableTextStyle? textStyle; + AnimatableTextRangeSelector? rangeSelector; reader.beginObject(); while (reader.hasNext()) { switch (reader.selectName(_propertiesNames)) { - case 0: - anim = _parseAnimatableTextProperties(reader, composition); + case 0: // Range selector + rangeSelector = _parseAnimatableTextRangeSelector( + reader, + composition, + ); + case 1: // Text style for this range + textStyle = _parseAnimatableTextStyle(reader, composition); default: reader.skipName(); reader.skipValue(); } } reader.endObject(); - if (anim == null) { - // Not sure if this is possible. - return AnimatableTextProperties(); - } - return anim; + + return AnimatableTextProperties( + textStyle: textStyle, + rangeSelector: rangeSelector, + ); } - static AnimatableTextProperties _parseAnimatableTextProperties( + static AnimatableTextRangeSelector _parseAnimatableTextRangeSelector( + JsonReader reader, + LottieComposition composition, + ) { + AnimatableIntegerValue? start; + AnimatableIntegerValue? end; + AnimatableIntegerValue? offset; + var units = TextRangeUnits.charIndex; + + reader.beginObject(); + while (reader.hasNext()) { + switch (reader.selectName(_animatableRangePropertiesNames)) { + case 0: // start + start = AnimatableValueParser.parseInteger(reader, composition); + case 1: // end + end = AnimatableValueParser.parseInteger(reader, composition); + case 2: // offset + offset = AnimatableValueParser.parseInteger(reader, composition); + case 3: // text range units (percent or index) + var textRangeUnits = reader.nextInt(); + if (textRangeUnits != 1 && textRangeUnits != 2) { + composition.addWarning( + 'Unsupported text range units: $textRangeUnits', + ); + units = TextRangeUnits.charIndex; + } else { + units = textRangeUnits == 1 + ? TextRangeUnits.percent + : TextRangeUnits.charIndex; + } + default: + reader.skipName(); + reader.skipValue(); + } + } + reader.endObject(); + + // If no start value is provided, default to a non-animated value of 0 to match + // After Effects/Bodymovin. + if (start == null && end != null) { + start = AnimatableIntegerValue.fromKeyframes([Keyframe.nonAnimated(0)]); + } + + return AnimatableTextRangeSelector( + start: start, + end: end, + offset: offset, + units: units, + ); + } + + static AnimatableTextStyle _parseAnimatableTextStyle( JsonReader reader, LottieComposition composition, ) { @@ -44,6 +122,7 @@ class AnimatableTextPropertiesParser { AnimatableColorValue? stroke; AnimatableDoubleValue? strokeWidth; AnimatableDoubleValue? tracking; + AnimatableIntegerValue? opacity; reader.beginObject(); while (reader.hasNext()) { @@ -56,6 +135,8 @@ class AnimatableTextPropertiesParser { strokeWidth = AnimatableValueParser.parseFloat(reader, composition); case 3: tracking = AnimatableValueParser.parseFloat(reader, composition); + case 4: // opacity + opacity = AnimatableValueParser.parseInteger(reader, composition); default: reader.skipName(); reader.skipValue(); @@ -63,11 +144,12 @@ class AnimatableTextPropertiesParser { } reader.endObject(); - return AnimatableTextProperties( + return AnimatableTextStyle( color: color, stroke: stroke, strokeWidth: strokeWidth, tracking: tracking, + opacity: opacity, ); } } diff --git a/lottie/lib/src/parser/animatable_transform_parser.dart b/lottie/lib/src/parser/animatable_transform_parser.dart index 07908dd..564697b 100644 --- a/lottie/lib/src/parser/animatable_transform_parser.dart +++ b/lottie/lib/src/parser/animatable_transform_parser.dart @@ -26,6 +26,8 @@ class AnimatableTransformParser { 'eo', 'sk', 'sa', + 'rx', + 'ry', ]); static final JsonReaderOptions _animatableNames = JsonReaderOptions.of(['k']); @@ -37,6 +39,8 @@ class AnimatableTransformParser { AnimatableValue? position; AnimatableScaleValue? scale; AnimatableDoubleValue? rotation; + AnimatableDoubleValue? rotationX; + AnimatableDoubleValue? rotationY; AnimatableIntegerValue? opacity; AnimatableDoubleValue? startOpacity; AnimatableDoubleValue? endOpacity; @@ -74,10 +78,7 @@ class AnimatableTransformParser { scale = AnimatableValueParser.parseScale(reader, composition); case 3: case 4: - if (name == 3) { - composition.addWarning("Lottie doesn't support 3D layers."); - } - + // Both "rz" (3D Z rotation) and "r" (2D rotation) feed the Z rotation. // Sometimes split path rotation gets exported like: // "rz": { // "a": 1, @@ -116,6 +117,10 @@ class AnimatableTransformParser { skew = AnimatableValueParser.parseFloat(reader, composition); case 9: skewAngle = AnimatableValueParser.parseFloat(reader, composition); + case 10: + rotationX = AnimatableValueParser.parseFloat(reader, composition); + case 11: + rotationY = AnimatableValueParser.parseFloat(reader, composition); default: reader.skipName(); reader.skipValue(); @@ -134,6 +139,12 @@ class AnimatableTransformParser { if (isRotationIdentity(rotation)) { rotation = null; } + if (isRotationIdentity(rotationX)) { + rotationX = null; + } + if (isRotationIdentity(rotationY)) { + rotationY = null; + } if (isScaleIdentity(scale)) { scale = null; } @@ -148,6 +159,8 @@ class AnimatableTransformParser { position: position, scale: scale, rotation: rotation, + rotationX: rotationX, + rotationY: rotationY, opacity: opacity, startOpacity: startOpacity, endOpacity: endOpacity, diff --git a/lottie/lib/src/providers/file_provider_io.dart b/lottie/lib/src/providers/file_provider_io.dart index 706213c..7ec5b7f 100644 --- a/lottie/lib/src/providers/file_provider_io.dart +++ b/lottie/lib/src/providers/file_provider_io.dart @@ -69,7 +69,7 @@ class FileLottie extends LottieProvider { } @override - int get hashCode => file.hashCode; + int get hashCode => file.path.hashCode; @override String toString() => '$runtimeType(file: ${file.path})'; diff --git a/lottie/lib/src/render_cache/key.dart b/lottie/lib/src/render_cache/key.dart index 79c773b..534c8b2 100644 --- a/lottie/lib/src/render_cache/key.dart +++ b/lottie/lib/src/render_cache/key.dart @@ -35,3 +35,34 @@ class CacheKey { String toString() => 'CacheKey(${composition.hashCode}, $size, $config, $delegates)'; } + +/// A [CacheKey] for the raster cache, where frames are rasterized and cropped +/// to [sourceRect] ahead of time. Unlike the drawing-commands cache (whose +/// cached [Picture] is recorded in full composition space and cropped fresh +/// on every draw), the same [composition]/[size] with a different +/// [sourceRect] (i.e. a different `fit`/`alignment`) must not share a cached +/// image. +@immutable +class RasterCacheKey extends CacheKey { + final Rect sourceRect; + + RasterCacheKey({ + required super.composition, + required super.size, + required this.sourceRect, + required super.config, + required super.delegates, + }); + + @override + int get hashCode => Object.hash(super.hashCode, sourceRect); + + @override + bool operator ==(other) => + other is RasterCacheKey && + super == other && + other.sourceRect == sourceRect; + + @override + String toString() => '${super.toString()}, sourceRect: $sourceRect'; +} diff --git a/lottie/lib/src/render_cache/store_drawing.dart b/lottie/lib/src/render_cache/store_drawing.dart index ffebce9..2c5e76a 100644 --- a/lottie/lib/src/render_cache/store_drawing.dart +++ b/lottie/lib/src/render_cache/store_drawing.dart @@ -2,6 +2,7 @@ import 'dart:ui'; import 'package:flutter/rendering.dart'; import '../lottie_drawable.dart'; import '../render_cache.dart'; +import '../utils.dart'; import 'key.dart'; import 'store.dart'; @@ -107,14 +108,8 @@ base class DrawingEntry extends CacheEntry { drawable.compositionLayer.draw(cacheCanvas, _matrix, parentAlpha: 255); }); if (cachedImage != null) { - var destinationSize = destinationRect.size; - canvas.save(); - canvas.translate(destinationRect.left, destinationRect.top); - canvas.scale( - destinationSize.width / sourceRect.width, - destinationSize.height / sourceRect.height, - ); + canvas.applySourceToDestinationTransform(sourceRect, destinationRect); canvas.drawPicture(cachedImage); canvas.restore(); diff --git a/lottie/lib/src/render_cache/store_raster.dart b/lottie/lib/src/render_cache/store_raster.dart index 2ddf8a3..242e29f 100644 --- a/lottie/lib/src/render_cache/store_raster.dart +++ b/lottie/lib/src/render_cache/store_raster.dart @@ -2,6 +2,7 @@ import 'dart:ui'; import 'package:flutter/rendering.dart'; import '../lottie_drawable.dart'; import '../render_cache.dart'; +import '../utils.dart'; import 'key.dart'; import 'store.dart'; @@ -27,7 +28,7 @@ class RenderCacheRaster implements RenderCache { } class RasterAnimationCache extends AnimationCache { - final Handle handle; + final Handle handle; RasterAnimationCache(this.handle); @@ -52,9 +53,10 @@ class RasterAnimationCache extends AnimationCache { (rect.size.height * devicePixelRatio).roundToDouble(), ); - var key = CacheKey( + var key = RasterCacheKey( composition: drawable.composition, size: cacheImageSize, + sourceRect: sourceRect, config: drawable.configHash(), delegates: drawable.delegatesHash(), ); @@ -72,7 +74,7 @@ class RasterAnimationCache extends AnimationCache { } } -class RasterStore extends Store { +class RasterStore extends Store { final int maxMemory; RasterStore(this.maxMemory); @@ -88,7 +90,7 @@ class RasterStore extends Store { } @override - RasterEntry createEntry(CacheKey key) { + RasterEntry createEntry(RasterCacheKey key) { return RasterEntry(this, key); } @@ -97,7 +99,7 @@ class RasterStore extends Store { } } -base class RasterEntry extends CacheEntry { +base class RasterEntry extends CacheEntry { final RasterStore store; final images = {}; int currentMemory = 0; @@ -146,13 +148,7 @@ base class RasterEntry extends CacheEntry { var cacheImageSize = key.size; var cachedImage = imageForProgress(progress, (cacheCanvas) { - _matrix.setIdentity(); - _matrix.scaleByDouble( - cacheImageSize.width / sourceSize.width, - cacheImageSize.height / sourceSize.height, - cacheImageSize.width / sourceSize.width, - 1, - ); + _matrix.setSourceToDestinationScale(sourceRect, cacheImageSize); drawable.compositionLayer.draw(cacheCanvas, _matrix, parentAlpha: 255); }); if (cachedImage != null) { diff --git a/lottie/lib/src/render_lottie.dart b/lottie/lib/src/render_lottie.dart index f23f655..f07c6e6 100644 --- a/lottie/lib/src/render_lottie.dart +++ b/lottie/lib/src/render_lottie.dart @@ -17,13 +17,13 @@ class RenderLottie extends RenderBox { bool? enableApplyingOpacityToLayers, double progress = 0.0, FrameRate? frameRate, - double? width, - double? height, - BoxFit? fit, - AlignmentGeometry alignment = Alignment.center, + this._width, + this._height, + this._fit, + this._alignment = Alignment.center, FilterQuality? filterQuality, RenderCache? renderCache, - required double devicePixelRatio, + required this._devicePixelRatio, }) : assert(progress >= 0.0 && progress <= 1.0), assert( renderCache == null || frameRate != FrameRate.max, @@ -39,12 +39,7 @@ class RenderLottie extends RenderBox { enableApplyingOpacityToLayers ?? false ..filterQuality = filterQuality) : null, - _width = width, - _height = height, - _fit = fit, - _alignment = alignment, - _renderCache = renderCache, - _devicePixelRatio = devicePixelRatio; + _renderCache = renderCache; /// The lottie composition to display. LottieComposition? get composition => _drawable?.composition; diff --git a/lottie/lib/src/utils.dart b/lottie/lib/src/utils.dart index c4f0884..51c79d7 100644 --- a/lottie/lib/src/utils.dart +++ b/lottie/lib/src/utils.dart @@ -69,6 +69,37 @@ extension Matrix4Extension on Matrix4 { return p0.x == p1.x || p0.y == p1.y; } + + /// Sets this matrix to map `p -> (p - sourceRect.topLeft) * scale`, + /// i.e. crop to [sourceRect] and scale it to fit [destinationSize]. + void setSourceToDestinationScale(Rect sourceRect, Size destinationSize) { + var scaleX = destinationSize.width / sourceRect.width; + var scaleY = destinationSize.height / sourceRect.height; + setIdentity(); + translateByDouble( + -sourceRect.left * scaleX, + -sourceRect.top * scaleY, + 0, + 1, + ); + scaleByDouble(scaleX, scaleY, scaleX, 1); + } +} + +extension CanvasExtension on Canvas { + /// Applies `destinationRect.topLeft + (p - sourceRect.topLeft) * scale` + /// to subsequent drawing, i.e. positions and crops/scales a source rect + /// into a destination rect. + void applySourceToDestinationTransform( + Rect sourceRect, + Rect destinationRect, + ) { + var scaleX = destinationRect.width / sourceRect.width; + var scaleY = destinationRect.height / sourceRect.height; + translate(destinationRect.left, destinationRect.top); + scale(scaleX, scaleY); + translate(-sourceRect.left, -sourceRect.top); + } } extension OffsetExtension on Offset { diff --git a/lottie/lib/src/value_delegate.dart b/lottie/lib/src/value_delegate.dart index 7bd6e53..24750c3 100644 --- a/lottie/lib/src/value_delegate.dart +++ b/lottie/lib/src/value_delegate.dart @@ -394,6 +394,14 @@ class ValueDelegate { DropShadow Function(LottieFrameInfo)? callback, }) => ValueDelegate._(keyPath, LottieProperty.dropShadow, value, callback); + /// Replace the outline of a shape at runtime. The callback receives the start/end paths of + /// the underlying shape keyframe and returns the [Path] to draw. + static ValueDelegate path( + List keyPath, { + Path? value, + Path Function(LottieFrameInfo)? callback, + }) => ValueDelegate._(keyPath, LottieProperty.path, value, callback); + ResolvedValueDelegate? _resolved; ResolvedValueDelegate _resolve(List resolvedPaths) { _resolved = ResolvedValueDelegate(this, resolvedPaths); diff --git a/lottie/pubspec.yaml b/lottie/pubspec.yaml index e234f91..57adf2f 100644 --- a/lottie/pubspec.yaml +++ b/lottie/pubspec.yaml @@ -1,15 +1,18 @@ name: lottie description: Render After Effects animations natively on Flutter. This package is a pure Dart implementation of a Lottie player. -version: 3.3.2 +version: 3.5.1 repository: https://github.com/xvrh/lottie-flutter +workspace: + - example + funding: - https://www.buymeacoffee.com/xvrh - https://github.com/sponsors/xvrh environment: - sdk: '^3.9.0' - flutter: '>=3.35.0' + sdk: '^3.12.0' + flutter: '>=3.44.0' dependencies: archive: ^4.0.0 diff --git a/lottie/test/characters_test.dart b/lottie/test/characters_test.dart deleted file mode 100644 index c8fade0..0000000 --- a/lottie/test/characters_test.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/src/utils/characters.dart'; - -void main() { - test('TrimTrailing characters', () { - expect( - 'ab c d '.characters.trimTrailing(' '.characters), - 'ab c d'.characters, - ); - expect(' '.characters.trimTrailing(' '.characters), ''.characters); - expect(' a '.characters.trimTrailing(' '.characters), ' a'.characters); - expect(' aa'.characters.trimTrailing('a'.characters), ' '.characters); - expect('aabcbc'.characters.trimTrailing('bc'.characters), 'aa'.characters); - expect('bcbc'.characters.trimTrailing('bc'.characters), ''.characters); - expect(''.characters.trimTrailing(' '.characters), ''.characters); - expect(''.characters.trimTrailing('bc'.characters), ''.characters); - expect(' '.characters.trimTrailing('bc'.characters), ' '.characters); - expect(' bc'.characters.trimTrailing('bc'.characters), ' '.characters); - }); - - test('TrimLeading characters', () { - expect(' ab '.characters.trimLeading(' '.characters), 'ab '.characters); - expect(' '.characters.trimLeading(' '.characters), ''.characters); - expect(' '.characters.trimLeading(' '.characters), ''.characters); - expect(' a'.characters.trimLeading(' '.characters), 'a'.characters); - expect('abc'.characters.trimLeading('ab'.characters), 'c'.characters); - expect('ababc'.characters.trimLeading('ab'.characters), 'c'.characters); - expect('abab'.characters.trimLeading('ab'.characters), ''.characters); - expect('ababcd'.characters.trimLeading('ab'.characters), 'cd'.characters); - expect(''.characters.trimLeading(''.characters), ''.characters); - }); - - test('Trim characters', () { - expect(' ab '.characters.trim(' '.characters), 'ab'.characters); - }); -} diff --git a/lottie/test/compositions_test.dart b/lottie/test/compositions_test.dart deleted file mode 100644 index ca9c4ef..0000000 --- a/lottie/test/compositions_test.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'dart:io'; -import 'dart:ui'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/src/composition.dart'; -import 'package:lottie/src/lottie_drawable.dart'; -import 'package:path/path.dart' as p; - -void main() { - var assetsPath = 'example/assets'; - for (var file - in Directory(assetsPath) - .listSync(recursive: true) - .whereType() - .where((f) => f.path.endsWith('.json'))) { - test('Parse and draw ${p.relative(file.path, from: assetsPath)}', () async { - var composition = await LottieComposition.fromBytes( - file.readAsBytesSync(), - ); - expect(composition, isNotNull); - - var drawable = LottieDrawable(composition); - - var recorder = PictureRecorder(); - var canvas = Canvas(recorder); - for (var progress = 0; progress <= 100; progress += 20) { - drawable - ..setProgress(progress / 100) - ..draw(canvas, const Rect.fromLTWH(0, 0, 200, 200)); - } - }); - } -} diff --git a/lottie/test/data/loading_indicator.json b/lottie/test/data/loading_indicator.json deleted file mode 100644 index f44b919..0000000 --- a/lottie/test/data/loading_indicator.json +++ /dev/null @@ -1 +0,0 @@ -{"v":"5.5.7","fr":29.9700012207031,"ip":35.0000014255792,"op":129.000005254278,"w":300,"h":300,"nm":"Box Icon_Test","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Kontur4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":180,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[95,95,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":3,"s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":45,"ix":4},"nm":"Rechteckpfad: 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.266666666667,0.839215746113,0.172549019608,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":16.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren"}],"nm":"Rechteck 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.801],"y":[0.742]},"o":{"x":[0.324],"y":[0]},"t":88,"s":[0]},{"t":127.000005172816,"s":[55]}],"ix":1},"e":{"a":0,"k":0,"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.661]},"o":{"x":[0.175],"y":[0]},"t":90,"s":[-124]},{"i":{"x":[0.839],"y":[1]},"o":{"x":[0.167],"y":[0.125]},"t":103,"s":[-100]},{"t":123.000005009893,"s":[0]}],"ix":3},"m":1,"ix":2,"nm":"Pfade trimmen 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":55.0000022401959,"op":129.000005254278,"st":1.00000004073083,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Kontur3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[95,95,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":3,"s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":45,"ix":4},"nm":"Rechteckpfad: 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.266666666667,0.839215746113,0.172549019608,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":16.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren"}],"nm":"Rechteck 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.801],"y":[0.742]},"o":{"x":[0.324],"y":[0]},"t":88,"s":[0]},{"t":127.000005172816,"s":[55]}],"ix":1},"e":{"a":0,"k":0,"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.661]},"o":{"x":[0.175],"y":[0]},"t":90,"s":[-124]},{"i":{"x":[0.839],"y":[1]},"o":{"x":[0.167],"y":[0.125]},"t":103,"s":[-100]},{"t":123.000005009893,"s":[0]}],"ix":3},"m":1,"ix":2,"nm":"Pfade trimmen 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":55.0000022401959,"op":129.000005254278,"st":1.00000004073083,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Kontur2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":180,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[95,95,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":3,"s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":45,"ix":4},"nm":"Rechteckpfad: 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.266666666667,0.839215746113,0.172549019608,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":16.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren"}],"nm":"Rechteck 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":100,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.531],"y":[1]},"o":{"x":[0.467],"y":[0]},"t":38,"s":[50]},{"t":89.0000036250443,"s":[100]}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.607],"y":[0.813]},"o":{"x":[0.293],"y":[1.11]},"t":44,"s":[130]},{"t":90.0000036657751,"s":[237]}],"ix":3},"m":1,"ix":2,"nm":"Pfade trimmen 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":35.0000014255792,"op":93.0000037879676,"st":-3.00000012219251,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Kontur1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[95,95,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":3,"s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":45,"ix":4},"nm":"Rechteckpfad: 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.266666666667,0.839215746113,0.172549019608,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":16.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren"}],"nm":"Rechteck 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":100,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.531],"y":[1]},"o":{"x":[0.467],"y":[0]},"t":38,"s":[50]},{"t":89.0000036250443,"s":[100]}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.614],"y":[0.854]},"o":{"x":[0.297],"y":[1.125]},"t":44,"s":[130]},{"t":90.0000036657751,"s":[237]}],"ix":3},"m":1,"ix":2,"nm":"Pfade trimmen 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":35.0000014255792,"op":93.0000037879676,"st":-3.00000012219251,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/lottie/test/data/static_lottie.json b/lottie/test/data/static_lottie.json deleted file mode 100644 index cb8efcb..0000000 --- a/lottie/test/data/static_lottie.json +++ /dev/null @@ -1,689 +0,0 @@ -{ - "v": "5.6.6", - "ip": 0, - "op": 1, - "fr": 60, - "w": 953, - "h": 272, - "layers": [ - { - "ind": 2345, - "nm": "surface13687", - "ao": 0, - "ip": 0, - "op": 60, - "st": 0, - "ty": 4, - "ks": { - "ty": "tr", - "o": { "k": 100 }, - "r": { "k": 0 }, - "p": { "k": [0, 0] }, - "a": { "k": [0, 0] }, - "s": { "k": [133.33, 133.33] }, - "sk": { "k": 0 }, - "sa": { "k": 0 } - }, - "shapes": [ - { - "ty": "gr", - "hd": false, - "nm": "surface13687", - "it": [ - { - "ty": "gr", - "hd": false, - "it": [ - { - "ty": "sh", - "ks": { - "k": { - "i": [ - [0, 0], - [0, 0], - [0, 0], - [20, -0.05], - [0.73, 0.64], - [0, 0] - ], - "o": [ - [0, 0], - [0, 0], - [-20.01, 0.05], - [-1.14, 0.25], - [0, 0], - [0, 0] - ], - "v": [ - [79.56, 177.9], - [110.31, 147.43], - [163.43, 200.61], - [103.41, 200.64], - [100.84, 199.21], - [79.55, 177.9] - ], - "c": true - } - } - }, - { - "ty": "fl", - "o": { "k": 100 }, - "c": { "k": [0.03, 0.35, 0.61, 1] } - }, - { - "ty": "tr", - "o": { "k": 100 }, - "r": { "k": 0 }, - "p": { "k": [0, 0] }, - "a": { "k": [0, 0] }, - "s": { "k": [100, 100] }, - "sk": { "k": 0 }, - "sa": { "k": 0 }, - "hd": false - } - ] - }, - { - "ty": "gr", - "hd": false, - "it": [ - { - "ty": "sh", - "ks": { - "k": { - "i": [ - [0, 0], - [0, 0], - [0, 0], - [0, 0], - [0, 0] - ], - "o": [ - [0, 0], - [0, 0], - [0, 0], - [0, 0], - [0, 0] - ], - "v": [ - [49.02, 147.35], - [79.55, 116.86], - [110.18, 147.3], - [110.31, 147.43], - [79.56, 177.9] - ], - "c": true - } - } - }, - { - "ty": "fl", - "o": { "k": 100 }, - "c": { "k": [0.12, 0.74, 0.99, 1] } - }, - { - "ty": "tr", - "o": { "k": 100 }, - "r": { "k": 0 }, - "p": { "k": [0, 0] }, - "a": { "k": [0, 0] }, - "s": { "k": [100, 100] }, - "sk": { "k": 0 }, - "sa": { "k": 0 }, - "hd": false - } - ] - }, - { - "ty": "gr", - "hd": false, - "it": [ - { - "ty": "sh", - "ks": { - "k": { - "i": [ - [0, 0], - [0, 0], - [0, 0], - [17.48, -0.07], - [0.15, -1.03], - [0, 0], - [-1.04, -0.16], - [0, 0], - [0, 0], - [13.93, -0.01], - [2.05, -0.36], - [0, 0], - [4.49, 0.1], - [0, 0], - [0, 0] - ], - "o": [ - [0, 0], - [0, 0], - [-17.47, 0], - [-1.34, 0.44], - [0, 0], - [0.44, 1.33], - [0, 0], - [0, 0], - [-13.93, -0.01], - [-2.07, -0.01], - [0, 0], - [-4.49, -0.18], - [0, 0], - [0, 0], - [0, 0] - ], - "v": [ - [249.55, 45.91], - [316.33, 45.93], - [316.32, 59.08], - [263.9, 59.1], - [263.05, 62.24], - [263.1, 97.61], - [266.25, 98.46], - [311.07, 98.44], - [311.07, 111.57], - [269.28, 111.57], - [263.07, 111.79], - [262.91, 161.71], - [249.44, 161.6], - [249.43, 48.03], - [249.55, 45.91] - ], - "c": true - } - } - }, - { - "ty": "sh", - "ks": { - "k": { - "i": [ - [0, 0], - [0, 0], - [0, 0], - [0, 0], - [4.45, -0.12], - [0, 1.84], - [0, 0] - ], - "o": [ - [0, 0], - [0, 0], - [0, 0], - [-4.46, -0.08], - [-0.34, -1.83], - [0, 0], - [0, 0] - ], - "v": [ - [332.52, 45.93], - [346.23, 45.93], - [346.24, 124.5], - [346.09, 161.5], - [332.71, 161.51], - [332.51, 155.98], - [332.52, 45.93] - ], - "c": true - } - } - }, - { - "ty": "sh", - "ks": { - "k": { - "i": [ - [0, 0], - [0, 0], - [0, 0], - [-6.71, -0.54], - [0.07, -4.17], - [6.68, 0.1], - [0, 0], - [-4.17, -2.21], - [-4.51, 2.61], - [0, 0], - [5.33, 0.73], - [2.27, 7.45], - [0.03, 4.26], - [0, 0], - [0, 0], - [4.75, 0.17], - [-0.27, 4.24], - [-4.82, 0.37] - ], - "o": [ - [0, 0], - [0, 0], - [6.73, 0.16], - [-0.19, 4.17], - [-6.69, 0.02], - [0, 0], - [0.14, 4.29], - [4.76, 2.71], - [0, 0], - [-4.96, 2.25], - [-7.52, -1.15], - [-1.51, -4.08], - [0, 0], - [0, 0], - [-4.75, -0.25], - [0.03, -4.25], - [4.83, -0.08], - [0, 0] - ], - "v": [ - [466.71, 55.67], - [480.46, 55.68], - [480.49, 78.93], - [500.69, 79.16], - [500.59, 91.68], - [480.53, 91.64], - [480.48, 137.95], - [485.71, 149.63], - [500.83, 148.46], - [500.83, 161.93], - [484.87, 163.72], - [467.88, 150], - [466.69, 137.26], - [466.66, 92.16], - [466.32, 91.78], - [452.05, 91.65], - [452.16, 78.92], - [466.66, 78.77] - ], - "c": true - } - } - }, - { - "ty": "sh", - "ks": { - "k": { - "i": [ - [0, 0], - [-4.57, -0.16], - [0, 0], - [-0.41, -7.62], - [-6.51, 0.04], - [0, 0], - [6.55, 0.04], - [0, 0], - [-3.97, -2.02], - [-4.52, 2.71], - [0, 0], - [5.2, 0.6], - [3.18, 6.19], - [0.14, 3.58], - [0, 0], - [4.74, 0.02], - [0, 0], - [-4.67, -0.16], - [-0.29, 7.79] - ], - "o": [ - [4.57, 0.16], - [0, 0], - [0.17, 7.64], - [6.52, -0.12], - [0, 0], - [-6.55, 0.25], - [0, 0], - [-0.01, 4.1], - [4.87, 2.66], - [0, 0], - [-4.82, 2.18], - [-6.76, -0.9], - [-1.53, -3.24], - [0, 0], - [-4.75, -0.01], - [0, 0], - [4.67, 0.13], - [0.5, -7.77], - [0, 0] - ], - "v": [ - [524.82, 55.62], - [538.54, 55.73], - [538.86, 56.07], - [539.04, 78.99], - [558.58, 78.93], - [558.63, 91.57], - [538.94, 91.63], - [538.87, 138.74], - [544.01, 149.71], - [559.3, 148.29], - [559.29, 161.84], - [543.82, 163.83], - [527.28, 152.93], - [524.75, 142.52], - [524.75, 91.69], - [510.52, 91.69], - [510.55, 78.89], - [524.57, 79.01], - [524.82, 55.63] - ], - "c": true - } - } - }, - { - "ty": "sh", - "ks": { - "k": { - "i": [ - [0, 0], - [-9.7, -3.3], - [-3.15, -11.24], - [0.29, -6.48], - [0, 0], - [-4.83, -5.22], - [-9.97, 3.14], - [-3.59, 6.19], - [-3.96, -1.82], - [11.57, -2.22], - [8.71, 4.7], - [2.22, 12.3], - [-3.55, 8.97], - [-9.7, 4.25] - ], - "o": [ - [9.5, -3.94], - [11.11, 3.83], - [2.06, 6.23], - [0, 0], - [0.54, 6.95], - [6.86, 8], - [7, -2.06], - [3.98, 1.78], - [-5.41, 10.32], - [-9.5, 1.78], - [-11.31, -5.62], - [-1.61, -9.45], - [3.73, -9.85], - [0, 0] - ], - "v": [ - [591.59, 79.36], - [621.73, 78.65], - [644.59, 103.42], - [646.27, 122.75], - [580.98, 122.82], - [588.43, 142.08], - [617.08, 149.91], - [633.13, 136.27], - [644.93, 141.9], - [618.09, 162.64], - [589.48, 159.77], - [568.16, 130.41], - [570.61, 101.99], - [591.58, 79.36] - ], - "c": false - } - } - }, - { - "ty": "sh", - "ks": { - "k": { - "i": [ - [0, 0], - [1.61, -8.46], - [0, 0], - [4.05, 4], - [9.3, -4.04] - ], - "o": [ - [-7.99, 3.69], - [0, 0], - [-0.8, -5.53], - [-7.09, -7.61], - [0, 0] - ], - "v": [ - [596.75, 91.22], - [582.01, 111.57], - [632.08, 111.41], - [625.27, 96.27], - [596.75, 91.23] - ], - "c": true - } - } - }, - { - "ty": "sh", - "ks": { - "k": { - "i": [ - [0, 0], - [-12.7, -5.32], - [0, 0], - [5.63, -1.66], - [2.18, -7.55], - [-0.06, -5.23], - [0.44, -6.76], - [-0.5, -5.85], - [4.66, -0.16], - [0.07, 17.64], - [0, 0], - [-4.38, -0.11], - [-0.73, -4.37] - ], - "o": [ - [5.23, -12.7], - [0, 0], - [-5.33, -2.1], - [-7.7, 2.29], - [-1.5, 5.1], - [-0.59, 6.77], - [0.36, 5.84], - [-4.66, 0.23], - [-0.27, -17.63], - [0, 0], - [4.37, 0.12], - [0.4, 4.38], - [0, 0] - ], - "v": [ - [675.99, 92.31], - [709.98, 78.26], - [709.98, 93.08], - [693.04, 91.34], - [677.46, 108.05], - [676.59, 123.7], - [676.44, 144], - [676.62, 161.54], - [662.63, 161.68], - [662.52, 108.76], - [662.62, 79.07], - [675.75, 79.16], - [675.99, 92.31] - ], - "c": true - } - } - }, - { - "ty": "sh", - "ks": { - "k": { - "i": [ - [0, 0], - [-4.63, -0.52], - [0, 0], - [-4.16, -4.66], - [-7.34, 2.35], - [0.39, 10.38], - [0, 0], - [0, 0], - [0, 0], - [4.43, 0.05], - [0, 0], - [4.12, -2.27], - [9.44, 2.72], - [3.05, 5.58], - [0.21, 6.99], - [0, 0] - ], - "o": [ - [4.65, 0.2], - [0, 0], - [-0.05, 6.01], - [5.36, 5.94], - [9.8, -3.51], - [0, 0], - [0, 0], - [0, 0], - [-4.44, -0.07], - [0, 0], - [-2.87, 3.61], - [-8.43, 5.32], - [-6.09, -1.84], - [-3.62, -6.14], - [0, 0], - [0, 0] - ], - "v": [ - [365.89, 78.91], - [379.86, 79.15], - [379.79, 128.31], - [384.75, 145.54], - [406.54, 150.22], - [422.78, 125.95], - [422.93, 78.91], - [436.93, 78.94], - [436.85, 161.48], - [423.55, 161.43], - [423.5, 149.68], - [413.49, 159.21], - [384.93, 162.51], - [370.48, 150.83], - [365.73, 130.45], - [365.9, 78.91] - ], - "c": true - } - } - }, - { "ty": "fl", "o": { "k": 54 }, "c": { "k": [0, 0, 0, 1] } }, - { - "ty": "tr", - "o": { "k": 100 }, - "r": { "k": 0 }, - "p": { "k": [0, 0] }, - "a": { "k": [0, 0] }, - "s": { "k": [100, 100] }, - "sk": { "k": 0 }, - "sa": { "k": 0 }, - "hd": false - } - ] - }, - { - "ty": "gr", - "hd": false, - "it": [ - { - "ty": "sh", - "ks": { - "k": { - "i": [ - [0, 0], - [0, 0], - [0, 0], - [0, 0], - [0, 0] - ], - "o": [ - [0, 0], - [0, 0], - [0, 0], - [0, 0], - [0, 0] - ], - "v": [ - [102.21, 3.07], - [163.46, 3], - [60.7, 105.71], - [33.92, 132.34], - [3.45, 101.83] - ], - "c": true - } - } - }, - { - "ty": "sh", - "ks": { - "k": { - "i": [ - [0, 0], - [-1.11, 0.14], - [0, 0], - [0, 0], - [0, 0], - [0, 0] - ], - "o": [ - [0.8, -1.05], - [0, 0], - [0, 0], - [0, 0], - [0, 0], - [0, 0] - ], - "v": [ - [101.64, 94.78], - [105.01, 94.11], - [163.41, 94.12], - [110.18, 147.3], - [79.55, 116.86], - [101.64, 94.78] - ], - "c": true - } - } - }, - { - "ty": "fl", - "o": { "k": 100 }, - "c": { "k": [0.27, 0.82, 0.99, 1] } - }, - { - "ty": "tr", - "o": { "k": 100 }, - "r": { "k": 0 }, - "p": { "k": [0, 0] }, - "a": { "k": [0, 0] }, - "s": { "k": [100, 100] }, - "sk": { "k": 0 }, - "sa": { "k": 0 }, - "hd": false - } - ] - }, - { - "ty": "tr", - "o": { "k": 100 }, - "r": { "k": 0 }, - "p": { "k": [0, 0] }, - "a": { "k": [0, 0] }, - "s": { "k": [100, 100] }, - "sk": { "k": 0 }, - "sa": { "k": 0 }, - "hd": false - } - ] - } - ] - } - ], - "meta": { "g": "LF SVG to Lottie" } -} diff --git a/lottie/test/data/warningShimmer.json b/lottie/test/data/warningShimmer.json deleted file mode 100644 index 9991b2e..0000000 --- a/lottie/test/data/warningShimmer.json +++ /dev/null @@ -1,1850 +0,0 @@ -{ - "v": "5.5.9", - "fr": 29.9700012207031, - "ip": 0, - "op": 38.0000015477717, - "w": 114, - "h": 114, - "nm": "Warning", - "ddd": 0, - "assets": [], - "layers": [ - { - "ddd": 0, - "ind": 1, - "ty": 4, - "nm": "Layer 5 Outlines", - "sr": 1, - "ks": { - "o": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.833 - ], - "y": [ - 0.833 - ] - }, - "o": { - "x": [ - 0.167 - ], - "y": [ - 0.167 - ] - }, - "t": 26, - "s": [ - 0 - ] - }, - { - "i": { - "x": [ - 0.833 - ], - "y": [ - 0.833 - ] - }, - "o": { - "x": [ - 0.167 - ], - "y": [ - 0.167 - ] - }, - "t": 32, - "s": [ - 100 - ] - }, - { - "t": 38.0000015477717, - "s": [ - 0 - ] - } - ], - "ix": 11 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "p": { - "a": 0, - "k": [ - 56.853, - 56.618, - 0 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 56.897, - 56.897, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.833, - 0.833, - 0.833 - ], - "y": [ - 0.833, - 0.833, - 0.833 - ] - }, - "o": { - "x": [ - 0.167, - 0.167, - 0.167 - ], - "y": [ - 0.167, - 0.167, - 0.167 - ] - }, - "t": 26, - "s": [ - 83, - 83, - 100 - ] - }, - { - "t": 38.0000015477717, - "s": [ - 100, - 100, - 100 - ] - } - ], - "ix": 6 - } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 28.397, - 0 - ], - [ - 0, - -28.397 - ], - [ - -28.397, - 0 - ], - [ - 0, - 28.397 - ] - ], - "o": [ - [ - -28.397, - 0 - ], - [ - 0, - 28.397 - ], - [ - 28.397, - 0 - ], - [ - 0, - -28.397 - ] - ], - "v": [ - [ - 0.001, - -51.497 - ], - [ - -51.498, - 0.001 - ], - [ - 0.001, - 51.497 - ], - [ - 51.498, - 0.001 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "Path 1", - "mn": "ADBE Vector Shape - Group", - "hd": false - }, - { - "ind": 1, - "ty": "sh", - "ix": 2, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 31.234, - 0 - ], - [ - 0, - 31.233 - ], - [ - -31.236, - 0 - ], - [ - 0, - -31.237 - ] - ], - "o": [ - [ - -31.236, - 0 - ], - [ - 0, - -31.237 - ], - [ - 31.234, - 0 - ], - [ - 0, - 31.233 - ] - ], - "v": [ - [ - 0.001, - 56.647 - ], - [ - -56.647, - 0.001 - ], - [ - 0.001, - -56.647 - ], - [ - 56.647, - 0.001 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "Path 2", - "mn": "ADBE Vector Shape - Group", - "hd": false - }, - { - "ty": "mm", - "mm": 1, - "nm": "Merge Paths 1", - "mn": "ADBE Vector Filter - Merge", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 1, - 0.419999994016, - 0, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - 56.897, - 56.898 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Group 1", - "np": 4, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ], - "ip": 4.00000016292334, - "op": 320.000013033867, - "st": 4.00000016292334, - "bm": 0 - }, - { - "ddd": 0, - "ind": 2, - "ty": 4, - "nm": "Layer 2 Outlines", - "sr": 1, - "ks": { - "o": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.833 - ], - "y": [ - 0.833 - ] - }, - "o": { - "x": [ - 0.167 - ], - "y": [ - 0.167 - ] - }, - "t": 20, - "s": [ - 0 - ] - }, - { - "i": { - "x": [ - 0.833 - ], - "y": [ - 0.833 - ] - }, - "o": { - "x": [ - 0.167 - ], - "y": [ - 0.167 - ] - }, - "t": 26, - "s": [ - 100 - ] - }, - { - "t": 32.0000013033867, - "s": [ - 0 - ] - } - ], - "ix": 11 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "p": { - "a": 0, - "k": [ - 56.853, - 56.618, - 0 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 56.897, - 56.897, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.833, - 0.833, - 0.833 - ], - "y": [ - 0.833, - 0.833, - 0.833 - ] - }, - "o": { - "x": [ - 0.167, - 0.167, - 0.167 - ], - "y": [ - 0.167, - 0.167, - 0.167 - ] - }, - "t": 20, - "s": [ - 83, - 83, - 100 - ] - }, - { - "t": 32.0000013033867, - "s": [ - 100, - 100, - 100 - ] - } - ], - "ix": 6 - } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 28.397, - 0 - ], - [ - 0, - -28.397 - ], - [ - -28.397, - 0 - ], - [ - 0, - 28.397 - ] - ], - "o": [ - [ - -28.397, - 0 - ], - [ - 0, - 28.397 - ], - [ - 28.397, - 0 - ], - [ - 0, - -28.397 - ] - ], - "v": [ - [ - 0.001, - -51.497 - ], - [ - -51.498, - 0.001 - ], - [ - 0.001, - 51.497 - ], - [ - 51.498, - 0.001 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "Path 1", - "mn": "ADBE Vector Shape - Group", - "hd": false - }, - { - "ind": 1, - "ty": "sh", - "ix": 2, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 31.234, - 0 - ], - [ - 0, - 31.233 - ], - [ - -31.236, - 0 - ], - [ - 0, - -31.237 - ] - ], - "o": [ - [ - -31.236, - 0 - ], - [ - 0, - -31.237 - ], - [ - 31.234, - 0 - ], - [ - 0, - 31.233 - ] - ], - "v": [ - [ - 0.001, - 56.647 - ], - [ - -56.647, - 0.001 - ], - [ - 0.001, - -56.647 - ], - [ - 56.647, - 0.001 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "Path 2", - "mn": "ADBE Vector Shape - Group", - "hd": false - }, - { - "ty": "mm", - "mm": 1, - "nm": "Merge Paths 1", - "mn": "ADBE Vector Filter - Merge", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 1, - 0.419999994016, - 0, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - 56.897, - 56.898 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Group 1", - "np": 4, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ], - "ip": 0, - "op": 316.000012870944, - "st": 0, - "bm": 0 - }, - { - "ddd": 0, - "ind": 3, - "ty": 4, - "nm": "Layer 4 Outlines", - "sr": 1, - "ks": { - "o": { - "a": 0, - "k": 100, - "ix": 11 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "p": { - "a": 1, - "k": [ - { - "i": { - "x": 0.833, - "y": 0.833 - }, - "o": { - "x": 0.167, - "y": 0.167 - }, - "t": 0, - "s": [ - 57.387, - 65.377, - 0 - ], - "to": [ - 0, - -0.35, - 0 - ], - "ti": [ - 0, - 0.835, - 0 - ] - }, - { - "i": { - "x": 0.833, - "y": 0.833 - }, - "o": { - "x": 0.167, - "y": 0.167 - }, - "t": 4, - "s": [ - 57.387, - 65.46, - 0 - ], - "to": [ - 0, - -1.455, - 0 - ], - "ti": [ - 0, - 0.609, - 0 - ] - }, - { - "i": { - "x": 0.833, - "y": 0.833 - }, - "o": { - "x": 0.167, - "y": 0.167 - }, - "t": 11, - "s": [ - 57.387, - 56.377, - 0 - ], - "to": [ - 0, - -0.958, - 0 - ], - "ti": [ - 0, - 0.609, - 0 - ] - }, - { - "i": { - "x": 0.833, - "y": 0.833 - }, - "o": { - "x": 0.167, - "y": 0.167 - }, - "t": 13, - "s": [ - 57.387, - 50.877, - 0 - ], - "to": [ - 0, - -0.958, - 0 - ], - "ti": [ - 0, - 0.609, - 0 - ] - }, - { - "i": { - "x": 0.833, - "y": 0.833 - }, - "o": { - "x": 0.167, - "y": 0.167 - }, - "t": 15, - "s": [ - 57.387, - 56.377, - 0 - ], - "to": [ - 0, - -0.958, - 0 - ], - "ti": [ - 0, - -0.417, - 0 - ] - }, - { - "i": { - "x": 0.833, - "y": 0.833 - }, - "o": { - "x": 0.167, - "y": 0.167 - }, - "t": 19, - "s": [ - 57.387, - 65.627, - 0 - ], - "to": [ - 0, - 0.417, - 0 - ], - "ti": [ - 0, - 0.958, - 0 - ] - }, - { - "t": 22.0000008960784, - "s": [ - 57.387, - 65.377, - 0 - ] - } - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 5.434, - 31.682, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.833, - 0.833, - 0.833 - ], - "y": [ - 0.833, - 0.833, - 0.833 - ] - }, - "o": { - "x": [ - 0.167, - 0.167, - 0.167 - ], - "y": [ - 0.167, - 0.167, - 0.167 - ] - }, - "t": 0, - "s": [ - 100, - 100, - 100 - ] - }, - { - "i": { - "x": [ - 0.833, - 0.833, - 0.833 - ], - "y": [ - 0.833, - 0.833, - 0.833 - ] - }, - "o": { - "x": [ - 0.167, - 0.167, - 0.167 - ], - "y": [ - 0.167, - 0.167, - 0.167 - ] - }, - "t": 4, - "s": [ - 115, - 90, - 100 - ] - }, - { - "i": { - "x": [ - 0.833, - 0.833, - 0.833 - ], - "y": [ - 0.833, - 0.833, - 0.833 - ] - }, - "o": { - "x": [ - 0.167, - 0.167, - 0.167 - ], - "y": [ - 0.167, - 0.167, - 0.167 - ] - }, - "t": 8, - "s": [ - 100, - 112, - 100 - ] - }, - { - "i": { - "x": [ - 0.833, - 0.833, - 0.833 - ], - "y": [ - 0.833, - 0.833, - 0.833 - ] - }, - "o": { - "x": [ - 0.167, - 0.167, - 0.167 - ], - "y": [ - 0.167, - 0.167, - 0.167 - ] - }, - "t": 11, - "s": [ - 100, - 112, - 100 - ] - }, - { - "i": { - "x": [ - 0.833, - 0.833, - 0.833 - ], - "y": [ - 0.833, - 0.833, - 0.833 - ] - }, - "o": { - "x": [ - 0.167, - 0.167, - 0.167 - ], - "y": [ - 0.167, - 0.167, - 0.167 - ] - }, - "t": 13, - "s": [ - 113.333, - 94.333, - 100 - ] - }, - { - "i": { - "x": [ - 0.833, - 0.833, - 0.833 - ], - "y": [ - 0.833, - 0.833, - 0.833 - ] - }, - "o": { - "x": [ - 0.167, - 0.167, - 0.167 - ], - "y": [ - 0.167, - 0.167, - 0.167 - ] - }, - "t": 15, - "s": [ - 100, - 112, - 100 - ] - }, - { - "i": { - "x": [ - 0.833, - 0.833, - 0.833 - ], - "y": [ - 0.833, - 0.833, - 0.833 - ] - }, - "o": { - "x": [ - 0.167, - 0.167, - 0.167 - ], - "y": [ - 0.167, - 0.167, - 0.167 - ] - }, - "t": 20, - "s": [ - 113, - 95, - 100 - ] - }, - { - "t": 22.0000008960784, - "s": [ - 100, - 100, - 100 - ] - } - ], - "ix": 6 - } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 2.878, - 0 - ], - [ - 0, - -2.487 - ], - [ - 0, - 0 - ], - [ - -2.951, - 0 - ], - [ - 0, - 2.426 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - -2.951, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 2.49 - ], - [ - 2.878, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - -2.428 - ] - ], - "v": [ - [ - 0.001, - -15.433 - ], - [ - -5.184, - -11.406 - ], - [ - -5.184, - 11.409 - ], - [ - 0.001, - 15.433 - ], - [ - 5.184, - 11.409 - ], - [ - 5.184, - -11.406 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "Path 1", - "mn": "ADBE Vector Shape - Group", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 1, - 1, - 1, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - 5.433, - 15.682 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Group 1", - "np": 2, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ], - "ip": 0, - "op": 316.000012870944, - "st": 0, - "bm": 0 - }, - { - "ddd": 0, - "ind": 4, - "ty": 4, - "nm": "Layer 3 Outlines", - "sr": 1, - "ks": { - "o": { - "a": 0, - "k": 100, - "ix": 11 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "p": { - "a": 0, - "k": [ - 57.011, - 80.341, - 0 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 5.516, - 11.142, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.833, - 0.833, - 0.833 - ], - "y": [ - 0.833, - 0.833, - 0.833 - ] - }, - "o": { - "x": [ - 0.167, - 0.167, - 0.167 - ], - "y": [ - 0.167, - 0.167, - 0.167 - ] - }, - "t": 20, - "s": [ - 100, - 100, - 100 - ] - }, - { - "i": { - "x": [ - 0.833, - 0.833, - 0.833 - ], - "y": [ - 0.833, - 0.833, - 0.833 - ] - }, - "o": { - "x": [ - 0.167, - 0.167, - 0.167 - ], - "y": [ - 0.167, - 0.167, - 0.167 - ] - }, - "t": 22, - "s": [ - 100, - 79, - 100 - ] - }, - { - "t": 24.00000097754, - "s": [ - 100, - 100, - 100 - ] - } - ], - "ix": 6 - } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 2.834, - 0 - ], - [ - 0, - -2.837 - ], - [ - -2.835, - 0 - ], - [ - 0, - 2.833 - ] - ], - "o": [ - [ - -2.835, - 0 - ], - [ - 0, - 2.833 - ], - [ - 2.834, - 0 - ], - [ - 0, - -2.837 - ] - ], - "v": [ - [ - 0.002, - -5.142 - ], - [ - -5.141, - 0.003 - ], - [ - 0.002, - 5.142 - ], - [ - 5.141, - 0.003 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "Path 1", - "mn": "ADBE Vector Shape - Group", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 1, - 1, - 1, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - 5.391, - 5.392 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Group 1", - "np": 2, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ], - "ip": 0, - "op": 316.000012870944, - "st": 0, - "bm": 0 - }, - { - "ddd": 0, - "ind": 5, - "ty": 4, - "nm": "Layer 1 Outlines", - "sr": 1, - "ks": { - "o": { - "a": 0, - "k": 100, - "ix": 11 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "p": { - "a": 0, - "k": [ - 56.854, - 56.618, - 0 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 41.449, - 41.449, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100, - 100 - ], - "ix": 6 - } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - -22.753, - 0 - ], - [ - 0, - -22.753 - ], - [ - 22.754, - 0 - ], - [ - 0, - 22.754 - ] - ], - "o": [ - [ - 22.754, - 0 - ], - [ - 0, - 22.754 - ], - [ - -22.753, - 0 - ], - [ - 0, - -22.753 - ] - ], - "v": [ - [ - 0, - -41.199 - ], - [ - 41.199, - 0 - ], - [ - 0, - 41.199 - ], - [ - -41.199, - 0 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "Path 1", - "mn": "ADBE Vector Shape - Group", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 1, - 0.419999994016, - 0, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - 41.449, - 41.449 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Group 1", - "np": 2, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ], - "ip": 0, - "op": 316.000012870944, - "st": 0, - "bm": 0 - } - ], - "markers": [] -} \ No newline at end of file diff --git a/lottie/test/dotlottie.dart b/lottie/test/dotlottie.dart deleted file mode 100644 index 4d06ed9..0000000 --- a/lottie/test/dotlottie.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'dart:io'; -import 'dart:ui'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; -import 'package:lottie/src/utils.dart'; -import 'package:path/path.dart' as p; - -void main() { - testWidgets('Dotlottie', (tester) async { - var size = const Size(500, 400); - tester.view.physicalSize = size; - tester.view.devicePixelRatio = 1.0; - - var provider = FileLottie( - File('example/assets/cat.lottie'), - decoder: customDecoder, - ); - await tester.runAsync(() => provider.load()); - - await tester.pumpWidget(LottieBuilder(lottie: provider)); - - await expectLater( - find.byType(Lottie), - matchesGoldenFile(p.join('goldens/dotlottie.png')), - ); - }); -} - -Future customDecoder(List bytes) { - return LottieComposition.decodeZip( - bytes, - filePicker: (files) { - return files.firstWhereOrNull( - (f) => f.name.startsWith('animations/') && f.name.endsWith('.json'), - ); - }, - ); -} diff --git a/lottie/test/dynamic_image_test.dart b/lottie/test/dynamic_image_test.dart deleted file mode 100644 index 6d66722..0000000 --- a/lottie/test/dynamic_image_test.dart +++ /dev/null @@ -1,96 +0,0 @@ -import 'dart:async'; -import 'dart:io'; -import 'dart:ui' as ui; -import 'package:flutter/widgets.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; -import 'utils.dart'; - -void main() { - testWidgets('Can specify ImageProvider with zip file ', (tester) async { - var size = const Size(500, 400); - tester.view.physicalSize = size; - tester.view.devicePixelRatio = 1.0; - - var callCount = 0; - ImageProvider imageProviderFactory(LottieImageAsset image) { - ++callCount; - return FileImage(File('example/assets/Images/WeAccept/img_0.png')); - } - - Future decoder(List bytes) { - return LottieComposition.decodeZip( - bytes, - imageProviderFactory: imageProviderFactory, - ); - } - - var composition = (await tester.runAsync( - () => FileLottie( - File('example/assets/spinning_carrousel.zip'), - imageProviderFactory: imageProviderFactory, - decoder: decoder, - ).load(), - ))!; - - await tester.pumpWidget(FilmStrip(composition, size: size)); - - expect(callCount, 2); - await expectLater( - find.byType(FilmStrip), - matchesGoldenFile('goldens/dynamic_image/zip_with_provider.png'), - ); - }); - - testWidgets('Can specify image delegate', (tester) async { - var size = const Size(500, 400); - tester.view.physicalSize = size; - tester.view.devicePixelRatio = 1.0; - - var image = await tester.runAsync( - () async => loadImage( - FileImage(File('example/assets/Images/WeAccept/img_0.png')), - ), - ); - - var composition = (await tester.runAsync( - () async => - FileLottie(File('example/assets/spinning_carrousel.zip')).load(), - ))!; - - var delegates = LottieDelegates( - image: (composition, asset) { - return image; - }, - ); - await tester.pumpWidget( - FilmStrip(composition, size: size, delegates: delegates), - ); - - await expectLater( - find.byType(FilmStrip), - matchesGoldenFile('goldens/dynamic_image/delegate.png'), - ); - }); -} - -Future loadImage(ImageProvider provider) { - var completer = Completer(); - var imageStream = provider.resolve(ImageConfiguration.empty); - late ImageStreamListener listener; - listener = ImageStreamListener( - (image, synchronousLoaded) { - imageStream.removeListener(listener); - - completer.complete(image.image); - }, - onError: (dynamic e, _) { - imageStream.removeListener(listener); - - completer.complete(); - }, - ); - imageStream.addListener(listener); - - return completer.future; -} diff --git a/lottie/test/dynamic_properties_test.dart b/lottie/test/dynamic_properties_test.dart deleted file mode 100644 index ece7d18..0000000 --- a/lottie/test/dynamic_properties_test.dart +++ /dev/null @@ -1,478 +0,0 @@ -import 'dart:io'; -import 'dart:ui'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; -import 'utils.dart'; - -void main() { - void testGolden( - String description, - ValueDelegate delegate, { - double? progress, - String? filePath, - }) { - filePath ??= 'Tests/Shapes.json'; - - var screenshotName = description - .toLowerCase() - .replaceAll(RegExp('[^a-z0-9 ]'), '') - .replaceAll(' ', '_'); - - testWidgets(description, (tester) async { - var composition = await LottieComposition.fromBytes( - File('example/assets/$filePath').readAsBytesSync(), - ); - - var animation = AnimationController( - vsync: tester, - duration: composition.duration, - ); - if (progress != null) { - animation.value = progress; - } - - await tester.pumpWidget( - Lottie( - composition: composition, - controller: animation, - delegates: LottieDelegates(values: [delegate]), - addRepaintBoundary: false, - ), - ); - await tester.pump(); - await expectLater( - find.byType(Lottie), - matchesGoldenFile('goldens/dynamic/$screenshotName.png'), - ); - - if (progress == null || progress == 0) { - await tester.pumpWidget( - Lottie( - composition: composition, - controller: animation, - delegates: const LottieDelegates(values: []), - addRepaintBoundary: false, - ), - ); - await tester.pump(); - } - }); - } - - testGolden( - 'Fill color (Green)', - ValueDelegate.color([ - 'Shape Layer 1', - 'Rectangle', - 'Fill 1', - ], value: Colors.green), - ); - - testGolden( - 'Fill color (Yellow)', - ValueDelegate.color([ - 'Shape Layer 1', - 'Rectangle', - 'Fill 1', - ], value: Colors.yellow), - ); - - testGolden( - 'Fill opacity', - ValueDelegate.opacity(['Shape Layer 1', 'Rectangle', 'Fill 1'], value: 50), - ); - - testGolden( - 'Stroke color', - ValueDelegate.strokeColor([ - 'Shape Layer 1', - 'Rectangle', - 'Stroke 1', - ], value: Colors.green), - ); - - testGolden( - 'Stroke width', - ValueDelegate.strokeWidth([ - 'Shape Layer 1', - 'Rectangle', - 'Stroke 1', - ], value: 50), - ); - - testGolden( - 'Stroke opacity', - ValueDelegate.opacity([ - 'Shape Layer 1', - 'Rectangle', - 'Stroke 1', - ], value: 50), - ); - - testGolden( - 'Transform anchor point', - ValueDelegate.transformAnchorPoint([ - 'Shape Layer 1', - 'Rectangle', - ], value: const Offset(20, 20)), - ); - - testGolden( - 'Transform position', - ValueDelegate.transformPosition([ - 'Shape Layer 1', - 'Rectangle', - ], value: const Offset(20, 20)), - ); - - testGolden( - 'Transform position (relative)', - ValueDelegate.transformPosition([ - 'Shape Layer 1', - 'Rectangle', - ], relative: const Offset(20, 20)), - ); - - testGolden( - 'Transform opacity', - ValueDelegate.transformOpacity(['Shape Layer 1', 'Rectangle'], value: 50), - ); - - testGolden( - 'Transform rotation', - ValueDelegate.transformRotation(['Shape Layer 1', 'Rectangle'], value: 45), - ); - - testGolden( - 'Transform scale', - ValueDelegate.transformScale([ - 'Shape Layer 1', - 'Rectangle', - ], value: const Offset(0.5, 0.5)), - ); - - testGolden( - 'Rectangle corner roundedness', - ValueDelegate.cornerRadius([ - 'Shape Layer 1', - 'Rectangle', - 'Rectangle Path 1', - ], value: 7), - ); - - testGolden( - 'Rectangle position', - ValueDelegate.position([ - 'Shape Layer 1', - 'Rectangle', - 'Rectangle Path 1', - ], relative: const Offset(20, 20)), - ); - - testGolden( - 'Rectangle size', - ValueDelegate.rectangleSize([ - 'Shape Layer 1', - 'Rectangle', - 'Rectangle Path 1', - ], relative: const Offset(30, 40)), - ); - - testGolden( - 'Ellipse position', - ValueDelegate.position([ - 'Shape Layer 1', - 'Ellipse', - 'Ellipse Path 1', - ], relative: const Offset(20, 20)), - ); - - testGolden( - 'Ellipse size', - ValueDelegate.ellipseSize([ - 'Shape Layer 1', - 'Ellipse', - 'Ellipse Path 1', - ], relative: const Offset(40, 60)), - ); - - testGolden( - 'Star points', - ValueDelegate.polystarPoints([ - 'Shape Layer 1', - 'Star', - 'Polystar Path 1', - ], value: 8), - ); - - testGolden( - 'Star rotation', - ValueDelegate.polystarRotation([ - 'Shape Layer 1', - 'Star', - 'Polystar Path 1', - ], value: 10), - ); - - testGolden( - 'Star position', - ValueDelegate.position([ - 'Shape Layer 1', - 'Star', - 'Polystar Path 1', - ], relative: const Offset(20, 20)), - ); - - testGolden( - 'Star inner radius', - ValueDelegate.polystarInnerRadius([ - 'Shape Layer 1', - 'Star', - 'Polystar Path 1', - ], value: 10), - ); - - testGolden( - 'Star inner roundedness', - ValueDelegate.polystarInnerRoundedness([ - 'Shape Layer 1', - 'Star', - 'Polystar Path 1', - ], value: 100), - ); - - testGolden( - 'Star outer radius', - ValueDelegate.polystarOuterRadius([ - 'Shape Layer 1', - 'Star', - 'Polystar Path 1', - ], value: 60), - ); - - testGolden( - 'Star outer roundedness', - ValueDelegate.polystarOuterRoundedness([ - 'Shape Layer 1', - 'Star', - 'Polystar Path 1', - ], value: 100), - ); - - testGolden( - 'Polygon points', - ValueDelegate.polystarPoints([ - 'Shape Layer 1', - 'Star', - 'Polystar Path 1', - ], value: 8), - ); - - testGolden( - 'Polygon rotation', - ValueDelegate.polystarRotation([ - 'Shape Layer 1', - 'Star', - 'Polystar Path 1', - ], value: 10), - ); - - testGolden( - 'Polygon position', - ValueDelegate.position([ - 'Shape Layer 1', - 'Star', - 'Polystar Path 1', - ], relative: const Offset(20, 20)), - ); - - testGolden( - 'Polygon radius', - ValueDelegate.polystarOuterRadius([ - 'Shape Layer 1', - 'Star', - 'Polystar Path 1', - ], relative: 60), - ); - - testGolden( - 'Polygon roundedness', - ValueDelegate.polystarOuterRoundedness([ - 'Shape Layer 1', - 'Star', - 'Polystar Path 1', - ], value: 100), - ); - - testGolden( - 'Repeater transform position', - ValueDelegate.transformPosition([ - 'Shape Layer 1', - 'Repeater Shape', - 'Repeater 1', - ], relative: const Offset(100, 100)), - ); - - testGolden( - 'Repeater transform start opacity', - ValueDelegate.transformStartOpacity([ - 'Shape Layer 1', - 'Repeater Shape', - 'Repeater 1', - ], value: 25), - ); - - testGolden( - 'Repeater transform end opacity', - ValueDelegate.transformEndOpacity([ - 'Shape Layer 1', - 'Repeater Shape', - 'Repeater 1', - ], value: 25), - ); - - testGolden( - 'Repeater transform rotation', - ValueDelegate.transformRotation([ - 'Shape Layer 1', - 'Repeater Shape', - 'Repeater 1', - ], value: 45), - ); - - testGolden( - 'Repeater transform scale', - ValueDelegate.transformScale([ - 'Shape Layer 1', - 'Repeater Shape', - 'Repeater 1', - ], value: const Offset(2, 2)), - ); - - testGolden( - 'Time remapping', - ValueDelegate.timeRemap(['Circle 1'], value: 1), - progress: 0.1, - ); - - testGolden( - 'Color Filter', - ValueDelegate.colorFilter([ - '**', - ], value: const ColorFilter.mode(Colors.green, BlendMode.srcATop)), - ); - - testGolden('Null Color Filter', ValueDelegate.colorFilter(['**'])); - - testGolden( - 'Matte property', - ValueDelegate.rectangleSize([ - 'Shape Layer 1', - 'Rectangle 1', - 'Rectangle Path 1', - ], value: const Offset(50, 50)), - filePath: 'Tests/TrackMattes.json', - ); - - testGolden('Blur', ValueDelegate.blurRadius(['**'], value: 10)); - - testGolden( - 'Drop shadow', - ValueDelegate.dropShadow( - ['Shape Layer 1', '**'], - value: const DropShadow( - color: Colors.green, - direction: 150, - distance: 20, - radius: 10, - ), - ), - ); - - testGolden( - 'Solid Color', - ValueDelegate.color(['Cyan Solid 1', '**'], value: Colors.yellow), - filePath: 'Tests/SolidLayerTransform.json', - ); - - for (var progress in [0.0, 0.5, 1.0]) { - testGolden( - 'Opacity interpolation ($progress)', - ValueDelegate.transformOpacity( - ['Shape Layer 1', 'Rectangle'], - callback: (frameInfo) => lerpDouble( - 10, - 100, - Curves.linear.transform(frameInfo.overallProgress), - )!.round(), - ), - progress: progress, - ); - } - - testWidgets('warningShimmer', (tester) async { - var size = const Size(500, 400); - tester.view.physicalSize = size; - tester.view.devicePixelRatio = 1.0; - - var composition = await LottieComposition.fromBytes( - File('test/data/warningShimmer.json').readAsBytesSync(), - ); - - var delegates = >{ - '1': [ - for (var i in ['1', '2', '5']) - ValueDelegate.color(['Layer $i Outlines', '**'], value: Colors.red), - for (var i in ['3', '4']) - ValueDelegate.color([ - 'Layer $i Outlines', - '**', - ], value: Colors.greenAccent), - ], - '2': [ - for (var i in ['1', '2', '5']) - ValueDelegate.color([ - 'Layer $i Outlines', - 'Group 1', - '*', - ], value: Colors.red), - for (var i in ['3', '4']) - ValueDelegate.color([ - 'Layer $i Outlines', - 'Group 1', - '*', - ], value: Colors.greenAccent), - ], - '3': [ - for (var i in ['1', '2', '5']) - ValueDelegate.color([ - 'Layer $i Outlines', - 'Group 1', - 'Fill 1', - ], value: Colors.red), - for (var i in ['3', '4']) - ValueDelegate.color([ - 'Layer $i Outlines', - 'Group 1', - 'Fill 1', - ], value: Colors.greenAccent), - ], - }; - - for (var variant in delegates.entries) { - await tester.pumpWidget( - FilmStrip( - composition, - size: size, - delegates: LottieDelegates(values: variant.value), - ), - ); - - await expectLater( - find.byType(FilmStrip), - matchesGoldenFile('goldens/warningShimmer_${variant.key}.png'), - ); - } - }); -} diff --git a/lottie/test/dynamic_test.dart b/lottie/test/dynamic_test.dart deleted file mode 100644 index 5fed2fe..0000000 --- a/lottie/test/dynamic_test.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'dart:io'; -import 'dart:ui'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; -import 'utils.dart'; - -void main() { - var root = 'example/assets'; - - testWidgets('Mirror animation', (tester) async { - var size = const Size(500, 400); - tester.view.physicalSize = size; - tester.view.devicePixelRatio = 1.0; - - var composition = (await tester.runAsync( - () => FileLottie(File('$root/Tests/MatteTimeStretchScan.json')).load(), - ))!; - await tester.pumpWidget( - FilmStrip( - composition, - size: size, - delegates: LottieDelegates( - values: [ - ValueDelegate.transformAnchorPoint( - [], - value: Offset(composition.bounds.width.toDouble(), 0), - ), - ValueDelegate.transformScale([], value: const Offset(-1, 1)), - ], - ), - ), - ); - - await expectLater( - find.byType(FilmStrip), - matchesGoldenFile('goldens/mirror.png'), - ); - }); -} diff --git a/lottie/test/dynamic_text_properties_test.dart b/lottie/test/dynamic_text_properties_test.dart deleted file mode 100644 index db4982f..0000000 --- a/lottie/test/dynamic_text_properties_test.dart +++ /dev/null @@ -1,61 +0,0 @@ -import 'dart:io'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; - -void main() { - late LottieComposition composition; - - setUpAll(() async { - composition = await LottieComposition.fromBytes( - File('example/assets/Tests/Text.json').readAsBytesSync(), - ); - }); - - void testGolden(String description, ValueDelegate delegate) async { - var screenshotName = description - .toLowerCase() - .replaceAll(RegExp('[^a-z0-9 ]'), '') - .replaceAll(' ', '_'); - - testWidgets(description, (tester) async { - await tester.pumpWidget( - Lottie( - composition: composition, - delegates: LottieDelegates(values: [delegate]), - addRepaintBoundary: false, - ), - ); - await tester.pump(); - await expectLater( - find.byType(Lottie), - matchesGoldenFile('goldens/dynamic_text/$screenshotName.png'), - ); - }); - } - - testGolden( - 'Text Fill (Blue -> Green)', - ValueDelegate.color(['Text'], callback: (_) => Colors.green), - ); - - testGolden( - 'Text Stroke (Red -> Yellow)', - ValueDelegate.strokeColor(['Text'], callback: (_) => Colors.yellow), - ); - - testGolden( - 'Text Stroke Width', - ValueDelegate.strokeWidth(['Text'], callback: (_) => 200), - ); - - testGolden( - 'Text Tracking 1', - ValueDelegate.textTracking(['Text'], callback: (_) => 20), - ); - - testGolden( - 'Text Tracking 2', - ValueDelegate.textSize(['Text'], callback: (_) => 60), - ); -} diff --git a/lottie/test/dynamic_text_test.dart b/lottie/test/dynamic_text_test.dart deleted file mode 100644 index 78df34a..0000000 --- a/lottie/test/dynamic_text_test.dart +++ /dev/null @@ -1,103 +0,0 @@ -import 'dart:io'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; -import 'utils.dart'; - -void main() { - late LottieComposition composition; - - setUpAll(() async { - composition = await LottieComposition.fromBytes( - File('example/assets/Tests/DynamicText.json').readAsBytesSync(), - ); - }); - - void testGolden(String description, LottieDelegates delegates) async { - var screenshotName = description - .toLowerCase() - .replaceAll(RegExp('[^a-z0-9 ]'), '') - .replaceAll(' ', '_'); - - var size = const Size(500, 400); - testWidgets(description, (tester) async { - await tester.pumpWidget( - MaterialApp( - home: FilmStrip(composition, delegates: delegates, size: size), - ), - ); - await tester.pump(); - await expectLater( - find.byType(FilmStrip), - matchesGoldenFile('goldens/dynamic_text/$screenshotName.png'), - ); - }); - } - - testGolden( - 'Dynamic text delegate', - LottieDelegates( - text: (input) => '🔥c️🔥👮🏿‍🔥', - textStyle: (font) => const TextStyle( - fontFamily: 'Roboto', - fontFamilyFallback: ['Noto Emoji'], - ), - values: const [], - ), - ); - - testGolden( - 'Dynamic Text ValueDelegate', - LottieDelegates( - values: [ - ValueDelegate.text(['NAME'], value: 'Text with ValueDelegate'), - ], - ), - ); - - testGolden( - 'Dynamic Text ValueDelegate overallProgress', - LottieDelegates( - values: [ - ValueDelegate.text([ - 'NAME', - ], callback: (frame) => '${frame.overallProgress}'), - ], - ), - ); - - testGolden( - 'Dynamic Text ValueDelegate startValue', - LottieDelegates( - values: [ - ValueDelegate.text([ - 'NAME', - ], callback: (frame) => '${frame.startValue}!!'), - ], - ), - ); - - testGolden( - 'Dynamic Text ValueDelegate endValue', - LottieDelegates( - values: [ - ValueDelegate.text([ - 'NAME', - ], callback: (frame) => '${frame.endValue}!!'), - ], - ), - ); - - testGolden( - 'Dynamic Text Emoji', - LottieDelegates( - textStyle: (font) => const TextStyle( - fontFamily: 'Roboto', - fontFamilyFallback: ['Noto Emoji'], - ), - values: [ - ValueDelegate.text(['NAME'], value: '🔥💪💯'), - ], - ), - ); -} diff --git a/lottie/test/fireworks_test.dart b/lottie/test/fireworks_test.dart deleted file mode 100644 index e744859..0000000 --- a/lottie/test/fireworks_test.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'dart:io'; -import 'dart:ui'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; -import 'package:path/path.dart' as p; -import 'utils.dart'; - -void main() { - testWidgets('Animations with stroke', (tester) async { - var size = const Size(500, 400); - tester.view.physicalSize = size; - tester.view.devicePixelRatio = 1.0; - - var composition = await LottieComposition.fromBytes( - File('example/assets/17297-fireworks.json').readAsBytesSync(), - ); - - await tester.pumpWidget(FilmStrip(composition, size: size)); - - await expectLater( - find.byType(FilmStrip), - matchesGoldenFile(p.join('goldens/fireworks.png')), - ); - }); -} diff --git a/lottie/test/flutter_test_config.dart b/lottie/test/flutter_test_config.dart deleted file mode 100644 index 991fd95..0000000 --- a/lottie/test/flutter_test_config.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'dart:async'; -import 'dart:io'; -import 'package:flutter/services.dart'; -import 'package:path/path.dart' as path; - -Future testExecutable(FutureOr Function() testMain) async { - await loadFonts(); - return testMain(); -} - -Future loadFonts() async { - for (var file in Directory( - 'example/assets/fonts', - ).listSync().whereType().where((f) => f.path.endsWith('.ttf'))) { - var fontLoader = FontLoader( - path.basenameWithoutExtension(file.path).replaceAll('-', ' '), - ); - var future = file.readAsBytes().then((value) => value.buffer.asByteData()); - fontLoader.addFont(future); - await fontLoader.load(); - } -} diff --git a/lottie/test/frame_rate_test.dart b/lottie/test/frame_rate_test.dart deleted file mode 100644 index f353155..0000000 --- a/lottie/test/frame_rate_test.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'dart:io'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; - -void main() { - test('Frame rate round', () async { - var composition = await LottieComposition.fromBytes( - File('example/assets/LottieLogo1.json').readAsBytesSync(), - ); - expect(composition.roundProgress(0, frameRate: FrameRate.composition), 0); - expect( - composition.roundProgress(0.0001, frameRate: FrameRate.composition), - 0, - ); - expect(composition.roundProgress(0.0001, frameRate: FrameRate.max), 0.0001); - }); -} diff --git a/lottie/test/gamma_evaluator_test.dart b/lottie/test/gamma_evaluator_test.dart deleted file mode 100644 index fd9d0e6..0000000 --- a/lottie/test/gamma_evaluator_test.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'dart:ui'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/src/utils/gamma_evaluator.dart'; - -void main() { - test('Evaluate for same color values', () { - for (var color = 0x000000; color <= 0xffffff; color++) { - var colorToTest = Color(0xff000000 | color); - var actual = GammaEvaluator.evaluate(0.3, colorToTest, colorToTest); - expect(actual, colorToTest); - } - }); -} diff --git a/lottie/test/golden/AndroidWave_0_0.png b/lottie/test/golden/AndroidWave_0_0.png deleted file mode 100644 index 9683bb9..0000000 Binary files a/lottie/test/golden/AndroidWave_0_0.png and /dev/null differ diff --git a/lottie/test/golden/HamburgerArrow_0_0.png b/lottie/test/golden/HamburgerArrow_0_0.png deleted file mode 100644 index 60ca047..0000000 Binary files a/lottie/test/golden/HamburgerArrow_0_0.png and /dev/null differ diff --git a/lottie/test/golden/HamburgerArrow_0_5.png b/lottie/test/golden/HamburgerArrow_0_5.png deleted file mode 100644 index 56d41dd..0000000 Binary files a/lottie/test/golden/HamburgerArrow_0_5.png and /dev/null differ diff --git a/lottie/test/golden/HamburgerArrow_1_0.png b/lottie/test/golden/HamburgerArrow_1_0.png deleted file mode 100644 index 60ca047..0000000 Binary files a/lottie/test/golden/HamburgerArrow_1_0.png and /dev/null differ diff --git a/lottie/test/golden/Logo/LogoSmall_0_5.png b/lottie/test/golden/Logo/LogoSmall_0_5.png deleted file mode 100644 index 04a10aa..0000000 Binary files a/lottie/test/golden/Logo/LogoSmall_0_5.png and /dev/null differ diff --git a/lottie/test/golden/Mobilo/A_0_5.png b/lottie/test/golden/Mobilo/A_0_5.png deleted file mode 100644 index d3718b1..0000000 Binary files a/lottie/test/golden/Mobilo/A_0_5.png and /dev/null differ diff --git a/lottie/test/golden/Mobilo/B_0_5.png b/lottie/test/golden/Mobilo/B_0_5.png deleted file mode 100644 index 276acdc..0000000 Binary files a/lottie/test/golden/Mobilo/B_0_5.png and /dev/null differ diff --git a/lottie/test/golden/lottiefiles/atm_link_1_0.png b/lottie/test/golden/lottiefiles/atm_link_1_0.png deleted file mode 100644 index 87dcf30..0000000 Binary files a/lottie/test/golden/lottiefiles/atm_link_1_0.png and /dev/null differ diff --git a/lottie/test/golden_test.dart b/lottie/test/golden_test.dart deleted file mode 100644 index ad50680..0000000 --- a/lottie/test/golden_test.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'dart:io'; -import 'dart:ui'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; -import 'package:path/path.dart' as p; -import 'utils.dart'; - -void main() { - var root = 'example/assets'; - for (var asset - in Directory(root) - .listSync(recursive: true) - .whereType() - .where( - (f) => const ['.json', '.zip'].contains(p.extension(f.path)), - )) { - testWidgets('Goldens ${asset.path}', (tester) async { - var size = const Size(500, 400); - tester.view.physicalSize = size; - tester.view.devicePixelRatio = 1.0; - var composition = (await tester.runAsync( - () => FileLottie(asset).load(), - ))!; - - await tester.pumpWidget(FilmStrip(composition, size: size)); - - var folder = p.relative(asset.path, from: root); - var fileName = '${p.basenameWithoutExtension(asset.path)}.png' - .toLowerCase(); - await expectLater( - find.byType(FilmStrip), - matchesGoldenFile(p.join('goldens/all', p.dirname(folder), fileName)), - ); - }); - } -} diff --git a/lottie/test/goldens/all/14595-thumbs-up.png b/lottie/test/goldens/all/14595-thumbs-up.png deleted file mode 100644 index 133e2a0..0000000 Binary files a/lottie/test/goldens/all/14595-thumbs-up.png and /dev/null differ diff --git a/lottie/test/goldens/all/17297-fireworks.png b/lottie/test/goldens/all/17297-fireworks.png deleted file mode 100644 index f1be459..0000000 Binary files a/lottie/test/goldens/all/17297-fireworks.png and /dev/null differ diff --git a/lottie/test/goldens/all/Logo/logosmall.png b/lottie/test/goldens/all/Logo/logosmall.png deleted file mode 100644 index 5e2d3a3..0000000 Binary files a/lottie/test/goldens/all/Logo/logosmall.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/a.png b/lottie/test/goldens/all/Mobilo/a.png deleted file mode 100644 index c5e8f34..0000000 Binary files a/lottie/test/goldens/all/Mobilo/a.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/apostrophe.png b/lottie/test/goldens/all/Mobilo/apostrophe.png deleted file mode 100644 index 77a071b..0000000 Binary files a/lottie/test/goldens/all/Mobilo/apostrophe.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/b.png b/lottie/test/goldens/all/Mobilo/b.png deleted file mode 100644 index 5eae13f..0000000 Binary files a/lottie/test/goldens/all/Mobilo/b.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/blinkingcursor.png b/lottie/test/goldens/all/Mobilo/blinkingcursor.png deleted file mode 100644 index 2e799fc..0000000 Binary files a/lottie/test/goldens/all/Mobilo/blinkingcursor.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/c.png b/lottie/test/goldens/all/Mobilo/c.png deleted file mode 100644 index 6cb7fa1..0000000 Binary files a/lottie/test/goldens/all/Mobilo/c.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/colon.png b/lottie/test/goldens/all/Mobilo/colon.png deleted file mode 100644 index 2c4998f..0000000 Binary files a/lottie/test/goldens/all/Mobilo/colon.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/comma.png b/lottie/test/goldens/all/Mobilo/comma.png deleted file mode 100644 index a0bb2bd..0000000 Binary files a/lottie/test/goldens/all/Mobilo/comma.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/d.png b/lottie/test/goldens/all/Mobilo/d.png deleted file mode 100644 index 61cc856..0000000 Binary files a/lottie/test/goldens/all/Mobilo/d.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/e.png b/lottie/test/goldens/all/Mobilo/e.png deleted file mode 100644 index 5f1c81f..0000000 Binary files a/lottie/test/goldens/all/Mobilo/e.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/f.png b/lottie/test/goldens/all/Mobilo/f.png deleted file mode 100644 index 80b044b..0000000 Binary files a/lottie/test/goldens/all/Mobilo/f.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/g.png b/lottie/test/goldens/all/Mobilo/g.png deleted file mode 100644 index 652fa5c..0000000 Binary files a/lottie/test/goldens/all/Mobilo/g.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/h.png b/lottie/test/goldens/all/Mobilo/h.png deleted file mode 100644 index 084d0d7..0000000 Binary files a/lottie/test/goldens/all/Mobilo/h.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/i.png b/lottie/test/goldens/all/Mobilo/i.png deleted file mode 100644 index 3647331..0000000 Binary files a/lottie/test/goldens/all/Mobilo/i.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/j.png b/lottie/test/goldens/all/Mobilo/j.png deleted file mode 100644 index 6b30c04..0000000 Binary files a/lottie/test/goldens/all/Mobilo/j.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/k.png b/lottie/test/goldens/all/Mobilo/k.png deleted file mode 100644 index b2a45f4..0000000 Binary files a/lottie/test/goldens/all/Mobilo/k.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/l.png b/lottie/test/goldens/all/Mobilo/l.png deleted file mode 100644 index 23d16c9..0000000 Binary files a/lottie/test/goldens/all/Mobilo/l.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/m.png b/lottie/test/goldens/all/Mobilo/m.png deleted file mode 100644 index 2c3b44e..0000000 Binary files a/lottie/test/goldens/all/Mobilo/m.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/n.png b/lottie/test/goldens/all/Mobilo/n.png deleted file mode 100644 index df71163..0000000 Binary files a/lottie/test/goldens/all/Mobilo/n.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/o.png b/lottie/test/goldens/all/Mobilo/o.png deleted file mode 100644 index 76f1958..0000000 Binary files a/lottie/test/goldens/all/Mobilo/o.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/p.png b/lottie/test/goldens/all/Mobilo/p.png deleted file mode 100644 index caa8655..0000000 Binary files a/lottie/test/goldens/all/Mobilo/p.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/q.png b/lottie/test/goldens/all/Mobilo/q.png deleted file mode 100644 index bd359bb..0000000 Binary files a/lottie/test/goldens/all/Mobilo/q.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/r.png b/lottie/test/goldens/all/Mobilo/r.png deleted file mode 100644 index 31bbcaf..0000000 Binary files a/lottie/test/goldens/all/Mobilo/r.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/s.png b/lottie/test/goldens/all/Mobilo/s.png deleted file mode 100644 index c8daf51..0000000 Binary files a/lottie/test/goldens/all/Mobilo/s.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/t.png b/lottie/test/goldens/all/Mobilo/t.png deleted file mode 100644 index 74e4151..0000000 Binary files a/lottie/test/goldens/all/Mobilo/t.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/u.png b/lottie/test/goldens/all/Mobilo/u.png deleted file mode 100644 index 924d729..0000000 Binary files a/lottie/test/goldens/all/Mobilo/u.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/v.png b/lottie/test/goldens/all/Mobilo/v.png deleted file mode 100644 index f73360b..0000000 Binary files a/lottie/test/goldens/all/Mobilo/v.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/w.png b/lottie/test/goldens/all/Mobilo/w.png deleted file mode 100644 index 08b5e41..0000000 Binary files a/lottie/test/goldens/all/Mobilo/w.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/x.png b/lottie/test/goldens/all/Mobilo/x.png deleted file mode 100644 index 5e6c6bf..0000000 Binary files a/lottie/test/goldens/all/Mobilo/x.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/y.png b/lottie/test/goldens/all/Mobilo/y.png deleted file mode 100644 index b32ebf8..0000000 Binary files a/lottie/test/goldens/all/Mobilo/y.png and /dev/null differ diff --git a/lottie/test/goldens/all/Mobilo/z.png b/lottie/test/goldens/all/Mobilo/z.png deleted file mode 100644 index c2da09c..0000000 Binary files a/lottie/test/goldens/all/Mobilo/z.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/ telegramalphacompat.png b/lottie/test/goldens/all/Tests/ telegramalphacompat.png deleted file mode 100644 index 616d81d..0000000 Binary files a/lottie/test/goldens/all/Tests/ telegramalphacompat.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/1669133489622.png b/lottie/test/goldens/all/Tests/1669133489622.png deleted file mode 100644 index cf809d8..0000000 Binary files a/lottie/test/goldens/all/Tests/1669133489622.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/2frameanimation.png b/lottie/test/goldens/all/Tests/2frameanimation.png deleted file mode 100644 index 2baeaba..0000000 Binary files a/lottie/test/goldens/all/Tests/2frameanimation.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/2parentsmatte.png b/lottie/test/goldens/all/Tests/2parentsmatte.png deleted file mode 100644 index bafb09b..0000000 Binary files a/lottie/test/goldens/all/Tests/2parentsmatte.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/adrock.png b/lottie/test/goldens/all/Tests/adrock.png deleted file mode 100644 index 3a4b1fe..0000000 Binary files a/lottie/test/goldens/all/Tests/adrock.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/adrock_converted.png b/lottie/test/goldens/all/Tests/adrock_converted.png deleted file mode 100644 index 3a4b1fe..0000000 Binary files a/lottie/test/goldens/all/Tests/adrock_converted.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/airbnb.png b/lottie/test/goldens/all/Tests/airbnb.png deleted file mode 100644 index 6bf9ac9..0000000 Binary files a/lottie/test/goldens/all/Tests/airbnb.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/airbnb400.png b/lottie/test/goldens/all/Tests/airbnb400.png deleted file mode 100644 index 2378fbd..0000000 Binary files a/lottie/test/goldens/all/Tests/airbnb400.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/airbnb800.png b/lottie/test/goldens/all/Tests/airbnb800.png deleted file mode 100644 index 405f7a3..0000000 Binary files a/lottie/test/goldens/all/Tests/airbnb800.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/anim_jpg.png b/lottie/test/goldens/all/Tests/anim_jpg.png deleted file mode 100644 index bdd4ac5..0000000 Binary files a/lottie/test/goldens/all/Tests/anim_jpg.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/animatedshadow.png b/lottie/test/goldens/all/Tests/animatedshadow.png deleted file mode 100644 index b069fcd..0000000 Binary files a/lottie/test/goldens/all/Tests/animatedshadow.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/august_view_pulse.png b/lottie/test/goldens/all/Tests/august_view_pulse.png deleted file mode 100644 index 40c1ffc..0000000 Binary files a/lottie/test/goldens/all/Tests/august_view_pulse.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/autoorient.png b/lottie/test/goldens/all/Tests/autoorient.png deleted file mode 100644 index c4df3cc..0000000 Binary files a/lottie/test/goldens/all/Tests/autoorient.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/beyondbounds.png b/lottie/test/goldens/all/Tests/beyondbounds.png deleted file mode 100644 index c03b99b..0000000 Binary files a/lottie/test/goldens/all/Tests/beyondbounds.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/bm.png b/lottie/test/goldens/all/Tests/bm.png deleted file mode 100644 index b809fed..0000000 Binary files a/lottie/test/goldens/all/Tests/bm.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/bm_converted.png b/lottie/test/goldens/all/Tests/bm_converted.png deleted file mode 100644 index b809fed..0000000 Binary files a/lottie/test/goldens/all/Tests/bm_converted.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/bounceeasings.png b/lottie/test/goldens/all/Tests/bounceeasings.png deleted file mode 100644 index 1841465..0000000 Binary files a/lottie/test/goldens/all/Tests/bounceeasings.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/boxposition.png b/lottie/test/goldens/all/Tests/boxposition.png deleted file mode 100644 index 4a7d3a8..0000000 Binary files a/lottie/test/goldens/all/Tests/boxposition.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/catrim.png b/lottie/test/goldens/all/Tests/catrim.png deleted file mode 100644 index 2e19432..0000000 Binary files a/lottie/test/goldens/all/Tests/catrim.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/catrim_converted.png b/lottie/test/goldens/all/Tests/catrim_converted.png deleted file mode 100644 index 2e19432..0000000 Binary files a/lottie/test/goldens/all/Tests/catrim_converted.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/checkswitch.png b/lottie/test/goldens/all/Tests/checkswitch.png deleted file mode 100644 index bf28118..0000000 Binary files a/lottie/test/goldens/all/Tests/checkswitch.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/dalek.png b/lottie/test/goldens/all/Tests/dalek.png deleted file mode 100644 index f4aa742..0000000 Binary files a/lottie/test/goldens/all/Tests/dalek.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/dalek_converted.png b/lottie/test/goldens/all/Tests/dalek_converted.png deleted file mode 100644 index f4aa742..0000000 Binary files a/lottie/test/goldens/all/Tests/dalek_converted.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/defaultlinejoincap.png b/lottie/test/goldens/all/Tests/defaultlinejoincap.png deleted file mode 100644 index de41d6b..0000000 Binary files a/lottie/test/goldens/all/Tests/defaultlinejoincap.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/differentpointscount.png b/lottie/test/goldens/all/Tests/differentpointscount.png deleted file mode 100644 index e501852..0000000 Binary files a/lottie/test/goldens/all/Tests/differentpointscount.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/dynamicgradient.png b/lottie/test/goldens/all/Tests/dynamicgradient.png deleted file mode 100644 index 307e816..0000000 Binary files a/lottie/test/goldens/all/Tests/dynamicgradient.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/dynamictext.png b/lottie/test/goldens/all/Tests/dynamictext.png deleted file mode 100644 index de0e149..0000000 Binary files a/lottie/test/goldens/all/Tests/dynamictext.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/editedcolor.png b/lottie/test/goldens/all/Tests/editedcolor.png deleted file mode 100644 index 0bbcd7b..0000000 Binary files a/lottie/test/goldens/all/Tests/editedcolor.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/ellipsedirection.png b/lottie/test/goldens/all/Tests/ellipsedirection.png deleted file mode 100644 index f26a6fc..0000000 Binary files a/lottie/test/goldens/all/Tests/ellipsedirection.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/embeddedfont.png b/lottie/test/goldens/all/Tests/embeddedfont.png deleted file mode 100644 index de0e149..0000000 Binary files a/lottie/test/goldens/all/Tests/embeddedfont.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/endframe.png b/lottie/test/goldens/all/Tests/endframe.png deleted file mode 100644 index 8d5f374..0000000 Binary files a/lottie/test/goldens/all/Tests/endframe.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/exported_with_flow.png b/lottie/test/goldens/all/Tests/exported_with_flow.png deleted file mode 100644 index 49a1945..0000000 Binary files a/lottie/test/goldens/all/Tests/exported_with_flow.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/fill.png b/lottie/test/goldens/all/Tests/fill.png deleted file mode 100644 index d8599cf..0000000 Binary files a/lottie/test/goldens/all/Tests/fill.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/fillblur.png b/lottie/test/goldens/all/Tests/fillblur.png deleted file mode 100644 index a98b5a6..0000000 Binary files a/lottie/test/goldens/all/Tests/fillblur.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/font_text_justification_translate_scale_rotation_test.png b/lottie/test/goldens/all/Tests/font_text_justification_translate_scale_rotation_test.png deleted file mode 100644 index 055b7e3..0000000 Binary files a/lottie/test/goldens/all/Tests/font_text_justification_translate_scale_rotation_test.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/frame.png b/lottie/test/goldens/all/Tests/frame.png deleted file mode 100644 index e1e27df..0000000 Binary files a/lottie/test/goldens/all/Tests/frame.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/framerate.png b/lottie/test/goldens/all/Tests/framerate.png deleted file mode 100644 index ed78982..0000000 Binary files a/lottie/test/goldens/all/Tests/framerate.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/gradientcolorkeyframeanimation.png b/lottie/test/goldens/all/Tests/gradientcolorkeyframeanimation.png deleted file mode 100644 index c459ca5..0000000 Binary files a/lottie/test/goldens/all/Tests/gradientcolorkeyframeanimation.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/gradientfill.png b/lottie/test/goldens/all/Tests/gradientfill.png deleted file mode 100644 index abb2323..0000000 Binary files a/lottie/test/goldens/all/Tests/gradientfill.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/gradientfillblur.png b/lottie/test/goldens/all/Tests/gradientfillblur.png deleted file mode 100644 index 4844923..0000000 Binary files a/lottie/test/goldens/all/Tests/gradientfillblur.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/gradientonecolor.png b/lottie/test/goldens/all/Tests/gradientonecolor.png deleted file mode 100644 index 8184f1f..0000000 Binary files a/lottie/test/goldens/all/Tests/gradientonecolor.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/gradientopacityinterpolation.png b/lottie/test/goldens/all/Tests/gradientopacityinterpolation.png deleted file mode 100644 index d6aa263..0000000 Binary files a/lottie/test/goldens/all/Tests/gradientopacityinterpolation.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/gradients.color_opacity.changes.multiple.stops.countfirst.png b/lottie/test/goldens/all/Tests/gradients.color_opacity.changes.multiple.stops.countfirst.png deleted file mode 100644 index 690e145..0000000 Binary files a/lottie/test/goldens/all/Tests/gradients.color_opacity.changes.multiple.stops.countfirst.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/gradientstrokeblur.png b/lottie/test/goldens/all/Tests/gradientstrokeblur.png deleted file mode 100644 index 6224cba..0000000 Binary files a/lottie/test/goldens/all/Tests/gradientstrokeblur.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/gradientwithvaryingopacitystops.png b/lottie/test/goldens/all/Tests/gradientwithvaryingopacitystops.png deleted file mode 100644 index 3796d16..0000000 Binary files a/lottie/test/goldens/all/Tests/gradientwithvaryingopacitystops.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/hd.png b/lottie/test/goldens/all/Tests/hd.png deleted file mode 100644 index ef528bf..0000000 Binary files a/lottie/test/goldens/all/Tests/hd.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/heart.png b/lottie/test/goldens/all/Tests/heart.png deleted file mode 100644 index 9672355..0000000 Binary files a/lottie/test/goldens/all/Tests/heart.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/interpolatebetweenopacitystops.png b/lottie/test/goldens/all/Tests/interpolatebetweenopacitystops.png deleted file mode 100644 index f4d73d7..0000000 Binary files a/lottie/test/goldens/all/Tests/interpolatebetweenopacitystops.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/interpolatorloopback.png b/lottie/test/goldens/all/Tests/interpolatorloopback.png deleted file mode 100644 index 4ed8394..0000000 Binary files a/lottie/test/goldens/all/Tests/interpolatorloopback.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/issue_288.png b/lottie/test/goldens/all/Tests/issue_288.png deleted file mode 100644 index e545de1..0000000 Binary files a/lottie/test/goldens/all/Tests/issue_288.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/keyframetypes.png b/lottie/test/goldens/all/Tests/keyframetypes.png deleted file mode 100644 index 6f71bb6..0000000 Binary files a/lottie/test/goldens/all/Tests/keyframetypes.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/kona_splash_animation.png b/lottie/test/goldens/all/Tests/kona_splash_animation.png deleted file mode 100644 index 01522d4..0000000 Binary files a/lottie/test/goldens/all/Tests/kona_splash_animation.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/largecomposition.png b/lottie/test/goldens/all/Tests/largecomposition.png deleted file mode 100644 index cd0fe25..0000000 Binary files a/lottie/test/goldens/all/Tests/largecomposition.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/largesquare.png b/lottie/test/goldens/all/Tests/largesquare.png deleted file mode 100644 index f2853a8..0000000 Binary files a/lottie/test/goldens/all/Tests/largesquare.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/laugh4.png b/lottie/test/goldens/all/Tests/laugh4.png deleted file mode 100644 index 6397a95..0000000 Binary files a/lottie/test/goldens/all/Tests/laugh4.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_0.png b/lottie/test/goldens/all/Tests/layerblend_0.png deleted file mode 100644 index 3ea02f9..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_0.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_1.png b/lottie/test/goldens/all/Tests/layerblend_1.png deleted file mode 100644 index 52eee81..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_1.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_10.png b/lottie/test/goldens/all/Tests/layerblend_10.png deleted file mode 100644 index 9c381b2..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_10.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_11.png b/lottie/test/goldens/all/Tests/layerblend_11.png deleted file mode 100644 index 979f63c..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_11.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_12.png b/lottie/test/goldens/all/Tests/layerblend_12.png deleted file mode 100644 index c0afafd..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_12.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_13.png b/lottie/test/goldens/all/Tests/layerblend_13.png deleted file mode 100644 index b2d5e85..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_13.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_14.png b/lottie/test/goldens/all/Tests/layerblend_14.png deleted file mode 100644 index ad0d5ee..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_14.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_15.png b/lottie/test/goldens/all/Tests/layerblend_15.png deleted file mode 100644 index 9c586f6..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_15.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_16.png b/lottie/test/goldens/all/Tests/layerblend_16.png deleted file mode 100644 index 4a1c5c1..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_16.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_17.png b/lottie/test/goldens/all/Tests/layerblend_17.png deleted file mode 100644 index 3ea02f9..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_17.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_2.png b/lottie/test/goldens/all/Tests/layerblend_2.png deleted file mode 100644 index 42ca4e6..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_2.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_3.png b/lottie/test/goldens/all/Tests/layerblend_3.png deleted file mode 100644 index 97f84f5..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_3.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_4.png b/lottie/test/goldens/all/Tests/layerblend_4.png deleted file mode 100644 index 36882f9..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_4.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_5.png b/lottie/test/goldens/all/Tests/layerblend_5.png deleted file mode 100644 index 7dcbb71..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_5.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_6.png b/lottie/test/goldens/all/Tests/layerblend_6.png deleted file mode 100644 index e5f9773..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_6.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_7.png b/lottie/test/goldens/all/Tests/layerblend_7.png deleted file mode 100644 index 47d4afe..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_7.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_8.png b/lottie/test/goldens/all/Tests/layerblend_8.png deleted file mode 100644 index f22aea9..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_8.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/layerblend_9.png b/lottie/test/goldens/all/Tests/layerblend_9.png deleted file mode 100644 index ac0ae4d..0000000 Binary files a/lottie/test/goldens/all/Tests/layerblend_9.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/loopplayonce.png b/lottie/test/goldens/all/Tests/loopplayonce.png deleted file mode 100644 index 56243f8..0000000 Binary files a/lottie/test/goldens/all/Tests/loopplayonce.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/map.png b/lottie/test/goldens/all/Tests/map.png deleted file mode 100644 index bfbbbd3..0000000 Binary files a/lottie/test/goldens/all/Tests/map.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/marker.png b/lottie/test/goldens/all/Tests/marker.png deleted file mode 100644 index 7a21b9e..0000000 Binary files a/lottie/test/goldens/all/Tests/marker.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/maska.png b/lottie/test/goldens/all/Tests/maska.png deleted file mode 100644 index bc9b162..0000000 Binary files a/lottie/test/goldens/all/Tests/maska.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/maskinv.png b/lottie/test/goldens/all/Tests/maskinv.png deleted file mode 100644 index 2d4b03b..0000000 Binary files a/lottie/test/goldens/all/Tests/maskinv.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/masknone.png b/lottie/test/goldens/all/Tests/masknone.png deleted file mode 100644 index 8b37c50..0000000 Binary files a/lottie/test/goldens/all/Tests/masknone.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/masks.png b/lottie/test/goldens/all/Tests/masks.png deleted file mode 100644 index d12da08..0000000 Binary files a/lottie/test/goldens/all/Tests/masks.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/mattetimestretchline.png b/lottie/test/goldens/all/Tests/mattetimestretchline.png deleted file mode 100644 index 2673952..0000000 Binary files a/lottie/test/goldens/all/Tests/mattetimestretchline.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/mattetimestretchscan.png b/lottie/test/goldens/all/Tests/mattetimestretchscan.png deleted file mode 100644 index b265c35..0000000 Binary files a/lottie/test/goldens/all/Tests/mattetimestretchscan.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/missingendvalue.png b/lottie/test/goldens/all/Tests/missingendvalue.png deleted file mode 100644 index 4c060be..0000000 Binary files a/lottie/test/goldens/all/Tests/missingendvalue.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/miterlimit.png b/lottie/test/goldens/all/Tests/miterlimit.png deleted file mode 100644 index ce7b64b..0000000 Binary files a/lottie/test/goldens/all/Tests/miterlimit.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/multiline.png b/lottie/test/goldens/all/Tests/multiline.png deleted file mode 100644 index 4429135..0000000 Binary files a/lottie/test/goldens/all/Tests/multiline.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/nullendshape.png b/lottie/test/goldens/all/Tests/nullendshape.png deleted file mode 100644 index 2cd68bd..0000000 Binary files a/lottie/test/goldens/all/Tests/nullendshape.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/opacity_layers.png b/lottie/test/goldens/all/Tests/opacity_layers.png deleted file mode 100644 index a584cd8..0000000 Binary files a/lottie/test/goldens/all/Tests/opacity_layers.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/opacitystops.png b/lottie/test/goldens/all/Tests/opacitystops.png deleted file mode 100644 index 9c7e525..0000000 Binary files a/lottie/test/goldens/all/Tests/opacitystops.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/overlapshapewithopacity.png b/lottie/test/goldens/all/Tests/overlapshapewithopacity.png deleted file mode 100644 index 588e1ce..0000000 Binary files a/lottie/test/goldens/all/Tests/overlapshapewithopacity.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/parenting.png b/lottie/test/goldens/all/Tests/parenting.png deleted file mode 100644 index c676031..0000000 Binary files a/lottie/test/goldens/all/Tests/parenting.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/precompblur.png b/lottie/test/goldens/all/Tests/precompblur.png deleted file mode 100644 index 1e60d43..0000000 Binary files a/lottie/test/goldens/all/Tests/precompblur.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/precompblurdecimapprecompsize.png b/lottie/test/goldens/all/Tests/precompblurdecimapprecompsize.png deleted file mode 100644 index 1e60d43..0000000 Binary files a/lottie/test/goldens/all/Tests/precompblurdecimapprecompsize.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/precomps.png b/lottie/test/goldens/all/Tests/precomps.png deleted file mode 100644 index ba34c5c..0000000 Binary files a/lottie/test/goldens/all/Tests/precomps.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/rect1.png b/lottie/test/goldens/all/Tests/rect1.png deleted file mode 100644 index 77a3e83..0000000 Binary files a/lottie/test/goldens/all/Tests/rect1.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/rect2.png b/lottie/test/goldens/all/Tests/rect2.png deleted file mode 100644 index 7e51e65..0000000 Binary files a/lottie/test/goldens/all/Tests/rect2.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/rect3.png b/lottie/test/goldens/all/Tests/rect3.png deleted file mode 100644 index adcf177..0000000 Binary files a/lottie/test/goldens/all/Tests/rect3.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/rect4.png b/lottie/test/goldens/all/Tests/rect4.png deleted file mode 100644 index 88aa901..0000000 Binary files a/lottie/test/goldens/all/Tests/rect4.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/rect5.png b/lottie/test/goldens/all/Tests/rect5.png deleted file mode 100644 index 763afe8..0000000 Binary files a/lottie/test/goldens/all/Tests/rect5.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/rect6.png b/lottie/test/goldens/all/Tests/rect6.png deleted file mode 100644 index bc3188e..0000000 Binary files a/lottie/test/goldens/all/Tests/rect6.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/rect7.png b/lottie/test/goldens/all/Tests/rect7.png deleted file mode 100644 index 30a3a1a..0000000 Binary files a/lottie/test/goldens/all/Tests/rect7.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/rect8.png b/lottie/test/goldens/all/Tests/rect8.png deleted file mode 100644 index af822af..0000000 Binary files a/lottie/test/goldens/all/Tests/rect8.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/rect9.png b/lottie/test/goldens/all/Tests/rect9.png deleted file mode 100644 index 7fc1f6f..0000000 Binary files a/lottie/test/goldens/all/Tests/rect9.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/remap.png b/lottie/test/goldens/all/Tests/remap.png deleted file mode 100644 index 55eebcc..0000000 Binary files a/lottie/test/goldens/all/Tests/remap.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/repeater.png b/lottie/test/goldens/all/Tests/repeater.png deleted file mode 100644 index 3432c01..0000000 Binary files a/lottie/test/goldens/all/Tests/repeater.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/reversedstar.png b/lottie/test/goldens/all/Tests/reversedstar.png deleted file mode 100644 index 9fd1db3..0000000 Binary files a/lottie/test/goldens/all/Tests/reversedstar.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/rgb.png b/lottie/test/goldens/all/Tests/rgb.png deleted file mode 100644 index 58df429..0000000 Binary files a/lottie/test/goldens/all/Tests/rgb.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/rgbmarker.png b/lottie/test/goldens/all/Tests/rgbmarker.png deleted file mode 100644 index 6ff09aa..0000000 Binary files a/lottie/test/goldens/all/Tests/rgbmarker.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/roundedcorners.png b/lottie/test/goldens/all/Tests/roundedcorners.png deleted file mode 100644 index 2744988..0000000 Binary files a/lottie/test/goldens/all/Tests/roundedcorners.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/roundednonclosed.png b/lottie/test/goldens/all/Tests/roundednonclosed.png deleted file mode 100644 index e21f64a..0000000 Binary files a/lottie/test/goldens/all/Tests/roundednonclosed.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/roundedwithalreadyroundedcorners.png b/lottie/test/goldens/all/Tests/roundedwithalreadyroundedcorners.png deleted file mode 100644 index 0bf368f..0000000 Binary files a/lottie/test/goldens/all/Tests/roundedwithalreadyroundedcorners.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/scale0.png b/lottie/test/goldens/all/Tests/scale0.png deleted file mode 100644 index fe75641..0000000 Binary files a/lottie/test/goldens/all/Tests/scale0.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/shapes.png b/lottie/test/goldens/all/Tests/shapes.png deleted file mode 100644 index 70c57e2..0000000 Binary files a/lottie/test/goldens/all/Tests/shapes.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/shapetypes.png b/lottie/test/goldens/all/Tests/shapetypes.png deleted file mode 100644 index b34684d..0000000 Binary files a/lottie/test/goldens/all/Tests/shapetypes.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/skew.png b/lottie/test/goldens/all/Tests/skew.png deleted file mode 100644 index 1dc9625..0000000 Binary files a/lottie/test/goldens/all/Tests/skew.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/solidlayertransform.png b/lottie/test/goldens/all/Tests/solidlayertransform.png deleted file mode 100644 index 188a916..0000000 Binary files a/lottie/test/goldens/all/Tests/solidlayertransform.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/splitdimensions.png b/lottie/test/goldens/all/Tests/splitdimensions.png deleted file mode 100644 index ba8cba5..0000000 Binary files a/lottie/test/goldens/all/Tests/splitdimensions.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/splitpathtransform.png b/lottie/test/goldens/all/Tests/splitpathtransform.png deleted file mode 100644 index b3a5b30..0000000 Binary files a/lottie/test/goldens/all/Tests/splitpathtransform.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/squares.png b/lottie/test/goldens/all/Tests/squares.png deleted file mode 100644 index 0b3f48d..0000000 Binary files a/lottie/test/goldens/all/Tests/squares.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/starskew.png b/lottie/test/goldens/all/Tests/starskew.png deleted file mode 100644 index 4d01d5a..0000000 Binary files a/lottie/test/goldens/all/Tests/starskew.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/startendframe.png b/lottie/test/goldens/all/Tests/startendframe.png deleted file mode 100644 index 14de220..0000000 Binary files a/lottie/test/goldens/all/Tests/startendframe.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/staticshadow.png b/lottie/test/goldens/all/Tests/staticshadow.png deleted file mode 100644 index dd7a9b8..0000000 Binary files a/lottie/test/goldens/all/Tests/staticshadow.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/stroke.png b/lottie/test/goldens/all/Tests/stroke.png deleted file mode 100644 index ac1da22..0000000 Binary files a/lottie/test/goldens/all/Tests/stroke.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/strokeblur.png b/lottie/test/goldens/all/Tests/strokeblur.png deleted file mode 100644 index 02a8e87..0000000 Binary files a/lottie/test/goldens/all/Tests/strokeblur.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/telegramalphacompat.png b/lottie/test/goldens/all/Tests/telegramalphacompat.png deleted file mode 100644 index c30831a..0000000 Binary files a/lottie/test/goldens/all/Tests/telegramalphacompat.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/text.png b/lottie/test/goldens/all/Tests/text.png deleted file mode 100644 index ec3382e..0000000 Binary files a/lottie/test/goldens/all/Tests/text.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/text_justification_translate_scale_rotation_text.png b/lottie/test/goldens/all/Tests/text_justification_translate_scale_rotation_text.png deleted file mode 100644 index 7ebb098..0000000 Binary files a/lottie/test/goldens/all/Tests/text_justification_translate_scale_rotation_text.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/text_with_parent_alpha.png b/lottie/test/goldens/all/Tests/text_with_parent_alpha.png deleted file mode 100644 index dc966e7..0000000 Binary files a/lottie/test/goldens/all/Tests/text_with_parent_alpha.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/textbaseline.png b/lottie/test/goldens/all/Tests/textbaseline.png deleted file mode 100644 index a4d17ba..0000000 Binary files a/lottie/test/goldens/all/Tests/textbaseline.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/textwithpscenter.png b/lottie/test/goldens/all/Tests/textwithpscenter.png deleted file mode 100644 index ba48649..0000000 Binary files a/lottie/test/goldens/all/Tests/textwithpscenter.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/textwithpsleft.png b/lottie/test/goldens/all/Tests/textwithpsleft.png deleted file mode 100644 index 1ed24a9..0000000 Binary files a/lottie/test/goldens/all/Tests/textwithpsleft.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/tgswithoutopacity.png b/lottie/test/goldens/all/Tests/tgswithoutopacity.png deleted file mode 100644 index b56f1ae..0000000 Binary files a/lottie/test/goldens/all/Tests/tgswithoutopacity.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/thumb.png b/lottie/test/goldens/all/Tests/thumb.png deleted file mode 100644 index cc9ecd8..0000000 Binary files a/lottie/test/goldens/all/Tests/thumb.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/timeremapandstartoffset.png b/lottie/test/goldens/all/Tests/timeremapandstartoffset.png deleted file mode 100644 index c22297f..0000000 Binary files a/lottie/test/goldens/all/Tests/timeremapandstartoffset.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/timestretch.png b/lottie/test/goldens/all/Tests/timestretch.png deleted file mode 100644 index 3b2593d..0000000 Binary files a/lottie/test/goldens/all/Tests/timestretch.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/timestretchandstartoffset.png b/lottie/test/goldens/all/Tests/timestretchandstartoffset.png deleted file mode 100644 index 8ea04e4..0000000 Binary files a/lottie/test/goldens/all/Tests/timestretchandstartoffset.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/timestretchmask.png b/lottie/test/goldens/all/Tests/timestretchmask.png deleted file mode 100644 index 1ea160b..0000000 Binary files a/lottie/test/goldens/all/Tests/timestretchmask.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/timestretchprecomp.png b/lottie/test/goldens/all/Tests/timestretchprecomp.png deleted file mode 100644 index 175a22b..0000000 Binary files a/lottie/test/goldens/all/Tests/timestretchprecomp.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/timestretchprecomp2.png b/lottie/test/goldens/all/Tests/timestretchprecomp2.png deleted file mode 100644 index 4ae626d..0000000 Binary files a/lottie/test/goldens/all/Tests/timestretchprecomp2.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/trackmattes.png b/lottie/test/goldens/all/Tests/trackmattes.png deleted file mode 100644 index 72780e7..0000000 Binary files a/lottie/test/goldens/all/Tests/trackmattes.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/transformwithoutendvalues.png b/lottie/test/goldens/all/Tests/transformwithoutendvalues.png deleted file mode 100644 index 2614304..0000000 Binary files a/lottie/test/goldens/all/Tests/transformwithoutendvalues.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/trimpaths.png b/lottie/test/goldens/all/Tests/trimpaths.png deleted file mode 100644 index 6c24972..0000000 Binary files a/lottie/test/goldens/all/Tests/trimpaths.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/trimpathsinsideandoutsidegroup.png b/lottie/test/goldens/all/Tests/trimpathsinsideandoutsidegroup.png deleted file mode 100644 index c67e9d2..0000000 Binary files a/lottie/test/goldens/all/Tests/trimpathsinsideandoutsidegroup.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/trimpathwraparound.png b/lottie/test/goldens/all/Tests/trimpathwraparound.png deleted file mode 100644 index 7fa570a..0000000 Binary files a/lottie/test/goldens/all/Tests/trimpathwraparound.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/weaccept.png b/lottie/test/goldens/all/Tests/weaccept.png deleted file mode 100644 index 2ef4a3c..0000000 Binary files a/lottie/test/goldens/all/Tests/weaccept.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/weacceptinlineimage.png b/lottie/test/goldens/all/Tests/weacceptinlineimage.png deleted file mode 100644 index 2ef4a3c..0000000 Binary files a/lottie/test/goldens/all/Tests/weacceptinlineimage.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/wile.png b/lottie/test/goldens/all/Tests/wile.png deleted file mode 100644 index d7b5882..0000000 Binary files a/lottie/test/goldens/all/Tests/wile.png and /dev/null differ diff --git a/lottie/test/goldens/all/Tests/zipinlineimage.png b/lottie/test/goldens/all/Tests/zipinlineimage.png deleted file mode 100644 index 2ef4a3c..0000000 Binary files a/lottie/test/goldens/all/Tests/zipinlineimage.png and /dev/null differ diff --git a/lottie/test/goldens/all/androidwave.png b/lottie/test/goldens/all/androidwave.png deleted file mode 100644 index c92a3d8..0000000 Binary files a/lottie/test/goldens/all/androidwave.png and /dev/null differ diff --git a/lottie/test/goldens/all/animation-1700642783167.png b/lottie/test/goldens/all/animation-1700642783167.png deleted file mode 100644 index 7984e70..0000000 Binary files a/lottie/test/goldens/all/animation-1700642783167.png and /dev/null differ diff --git a/lottie/test/goldens/all/battery_optimizations.png b/lottie/test/goldens/all/battery_optimizations.png deleted file mode 100644 index ab21c2a..0000000 Binary files a/lottie/test/goldens/all/battery_optimizations.png and /dev/null differ diff --git a/lottie/test/goldens/all/blub.png b/lottie/test/goldens/all/blub.png deleted file mode 100644 index 906ad2f..0000000 Binary files a/lottie/test/goldens/all/blub.png and /dev/null differ diff --git a/lottie/test/goldens/all/bluetoothscanning.png b/lottie/test/goldens/all/bluetoothscanning.png deleted file mode 100644 index d92fdcb..0000000 Binary files a/lottie/test/goldens/all/bluetoothscanning.png and /dev/null differ diff --git a/lottie/test/goldens/all/camera_change.png b/lottie/test/goldens/all/camera_change.png deleted file mode 100644 index c903e91..0000000 Binary files a/lottie/test/goldens/all/camera_change.png and /dev/null differ diff --git a/lottie/test/goldens/all/dynamicgradient.png b/lottie/test/goldens/all/dynamicgradient.png deleted file mode 100644 index 307e816..0000000 Binary files a/lottie/test/goldens/all/dynamicgradient.png and /dev/null differ diff --git a/lottie/test/goldens/all/envelope.png b/lottie/test/goldens/all/envelope.png deleted file mode 100644 index 348e81f..0000000 Binary files a/lottie/test/goldens/all/envelope.png and /dev/null differ diff --git a/lottie/test/goldens/all/example_with_images/data.png b/lottie/test/goldens/all/example_with_images/data.png deleted file mode 100644 index 1fbb262..0000000 Binary files a/lottie/test/goldens/all/example_with_images/data.png and /dev/null differ diff --git a/lottie/test/goldens/all/gradientcolorinterpolation.png b/lottie/test/goldens/all/gradientcolorinterpolation.png deleted file mode 100644 index 8592b8f..0000000 Binary files a/lottie/test/goldens/all/gradientcolorinterpolation.png and /dev/null differ diff --git a/lottie/test/goldens/all/hamburgerarrow.png b/lottie/test/goldens/all/hamburgerarrow.png deleted file mode 100644 index 7714862..0000000 Binary files a/lottie/test/goldens/all/hamburgerarrow.png and /dev/null differ diff --git a/lottie/test/goldens/all/issue270.png b/lottie/test/goldens/all/issue270.png deleted file mode 100644 index bc3916b..0000000 Binary files a/lottie/test/goldens/all/issue270.png and /dev/null differ diff --git a/lottie/test/goldens/all/lf20_w2afea.png b/lottie/test/goldens/all/lf20_w2afea.png deleted file mode 100644 index 4da6435..0000000 Binary files a/lottie/test/goldens/all/lf20_w2afea.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/100_percent.png b/lottie/test/goldens/all/lottiefiles/100_percent.png deleted file mode 100644 index bc6e7db..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/100_percent.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/28861-connection-style-2.png b/lottie/test/goldens/all/lottiefiles/28861-connection-style-2.png deleted file mode 100644 index 2ced9a6..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/28861-connection-style-2.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/45668-arrow-with-light-passing-through.png b/lottie/test/goldens/all/lottiefiles/45668-arrow-with-light-passing-through.png deleted file mode 100644 index af54325..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/45668-arrow-with-light-passing-through.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/a_mountain.png b/lottie/test/goldens/all/lottiefiles/a_mountain.png deleted file mode 100644 index 252b341..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/a_mountain.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/accept_arrows.png b/lottie/test/goldens/all/lottiefiles/accept_arrows.png deleted file mode 100644 index f216d30..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/accept_arrows.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/airbnb.png b/lottie/test/goldens/all/lottiefiles/airbnb.png deleted file mode 100644 index 6bf9ac9..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/airbnb.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/android_fingerprint.png b/lottie/test/goldens/all/lottiefiles/android_fingerprint.png deleted file mode 100644 index 59584f9..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/android_fingerprint.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/angel.png b/lottie/test/goldens/all/lottiefiles/angel.png deleted file mode 100644 index 3ae8b0a..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/angel.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/anima.png b/lottie/test/goldens/all/lottiefiles/anima.png deleted file mode 100644 index c3c16e3..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/anima.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/animated_graph.png b/lottie/test/goldens/all/lottiefiles/animated_graph.png deleted file mode 100644 index 5cf9818..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/animated_graph.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/animated_laptop_.png b/lottie/test/goldens/all/lottiefiles/animated_laptop_.png deleted file mode 100644 index 4a881e2..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/animated_laptop_.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/animated_logo.png b/lottie/test/goldens/all/lottiefiles/animated_logo.png deleted file mode 100644 index 20b1c08..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/animated_logo.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/atm_link.png b/lottie/test/goldens/all/lottiefiles/atm_link.png deleted file mode 100644 index 1e223cf..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/atm_link.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/autoconnect_loading.png b/lottie/test/goldens/all/lottiefiles/autoconnect_loading.png deleted file mode 100644 index 36ad377..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/autoconnect_loading.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/ball_&_map.png b/lottie/test/goldens/all/lottiefiles/ball_&_map.png deleted file mode 100644 index 9fb73eb..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/ball_&_map.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/banner_animation.png b/lottie/test/goldens/all/lottiefiles/banner_animation.png deleted file mode 100644 index 98b94fb..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/banner_animation.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/bb8.png b/lottie/test/goldens/all/lottiefiles/bb8.png deleted file mode 100644 index 8140652..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/bb8.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/bell.png b/lottie/test/goldens/all/lottiefiles/bell.png deleted file mode 100644 index 27b8466..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/bell.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/birds.png b/lottie/test/goldens/all/lottiefiles/birds.png deleted file mode 100644 index a9fb21b..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/birds.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/bitcoin_to_the_moon.png b/lottie/test/goldens/all/lottiefiles/bitcoin_to_the_moon.png deleted file mode 100644 index 039c95e..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/bitcoin_to_the_moon.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/blood_transfusion_kawaii.png b/lottie/test/goldens/all/lottiefiles/blood_transfusion_kawaii.png deleted file mode 100644 index 5fca596..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/blood_transfusion_kawaii.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/bomb.png b/lottie/test/goldens/all/lottiefiles/bomb.png deleted file mode 100644 index 6a54fb3..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/bomb.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/books.png b/lottie/test/goldens/all/lottiefiles/books.png deleted file mode 100644 index 8f6e217..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/books.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/bootymovin.png b/lottie/test/goldens/all/lottiefiles/bootymovin.png deleted file mode 100644 index 52f5f04..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/bootymovin.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/bounching_ball.png b/lottie/test/goldens/all/lottiefiles/bounching_ball.png deleted file mode 100644 index 2044e5c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/bounching_ball.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/brain__.png b/lottie/test/goldens/all/lottiefiles/brain__.png deleted file mode 100644 index 05d805b..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/brain__.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/browser.png b/lottie/test/goldens/all/lottiefiles/browser.png deleted file mode 100644 index e25130c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/browser.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/building_evolution_animation.png b/lottie/test/goldens/all/lottiefiles/building_evolution_animation.png deleted file mode 100644 index 2b5a973..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/building_evolution_animation.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/camera.png b/lottie/test/goldens/all/lottiefiles/camera.png deleted file mode 100644 index 1928a82..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/camera.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/camptravel.png b/lottie/test/goldens/all/lottiefiles/camptravel.png deleted file mode 100644 index 6585968..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/camptravel.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/cancel_button.png b/lottie/test/goldens/all/lottiefiles/cancel_button.png deleted file mode 100644 index c85b8e4..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/cancel_button.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/cash.png b/lottie/test/goldens/all/lottiefiles/cash.png deleted file mode 100644 index fe281fe..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/cash.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/change_to_search_bar.png b/lottie/test/goldens/all/lottiefiles/change_to_search_bar.png deleted file mode 100644 index 7bb8d01..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/change_to_search_bar.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/check_pop.png b/lottie/test/goldens/all/lottiefiles/check_pop.png deleted file mode 100644 index 9f03c7f..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/check_pop.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/chinese.png b/lottie/test/goldens/all/lottiefiles/chinese.png deleted file mode 100644 index 3b7e3d5..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/chinese.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/clock.png b/lottie/test/goldens/all/lottiefiles/clock.png deleted file mode 100644 index 5873721..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/clock.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/cloud_disconnection.png b/lottie/test/goldens/all/lottiefiles/cloud_disconnection.png deleted file mode 100644 index 205d38c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/cloud_disconnection.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/code_invite_success.png b/lottie/test/goldens/all/lottiefiles/code_invite_success.png deleted file mode 100644 index 068c3b9..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/code_invite_success.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/coding_ape.png b/lottie/test/goldens/all/lottiefiles/coding_ape.png deleted file mode 100644 index 3317bd3..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/coding_ape.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/coinfall.png b/lottie/test/goldens/all/lottiefiles/coinfall.png deleted file mode 100644 index d65ad1d..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/coinfall.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/colorline.png b/lottie/test/goldens/all/lottiefiles/colorline.png deleted file mode 100644 index 5a6648c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/colorline.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/confusion.png b/lottie/test/goldens/all/lottiefiles/confusion.png deleted file mode 100644 index 8299bcb..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/confusion.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/construction_site.png b/lottie/test/goldens/all/lottiefiles/construction_site.png deleted file mode 100644 index afd701b..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/construction_site.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/cooking_app.png b/lottie/test/goldens/all/lottiefiles/cooking_app.png deleted file mode 100644 index ff7b626..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/cooking_app.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/countdown.png b/lottie/test/goldens/all/lottiefiles/countdown.png deleted file mode 100644 index 0e4764e..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/countdown.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/credit_card.png b/lottie/test/goldens/all/lottiefiles/credit_card.png deleted file mode 100644 index c344dc1..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/credit_card.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/credit_level.png b/lottie/test/goldens/all/lottiefiles/credit_level.png deleted file mode 100644 index bc21a2b..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/credit_level.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/cube_loader.png b/lottie/test/goldens/all/lottiefiles/cube_loader.png deleted file mode 100644 index abd0df8..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/cube_loader.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/cubo_livre.png b/lottie/test/goldens/all/lottiefiles/cubo_livre.png deleted file mode 100644 index 1af68e4..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/cubo_livre.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/curly_hair_character_loop.png b/lottie/test/goldens/all/lottiefiles/curly_hair_character_loop.png deleted file mode 100644 index 15a2e7d..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/curly_hair_character_loop.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/cycle_animation.png b/lottie/test/goldens/all/lottiefiles/cycle_animation.png deleted file mode 100644 index f62814a..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/cycle_animation.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/day_night_cycle.png b/lottie/test/goldens/all/lottiefiles/day_night_cycle.png deleted file mode 100644 index 84ba384..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/day_night_cycle.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/day_of_the_dead.png b/lottie/test/goldens/all/lottiefiles/day_of_the_dead.png deleted file mode 100644 index 087149c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/day_of_the_dead.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/deadpool.png b/lottie/test/goldens/all/lottiefiles/deadpool.png deleted file mode 100644 index 9365699..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/deadpool.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/delivery_van.png b/lottie/test/goldens/all/lottiefiles/delivery_van.png deleted file mode 100644 index 5d1acd4..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/delivery_van.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/developer-animation.png b/lottie/test/goldens/all/lottiefiles/developer-animation.png deleted file mode 100644 index 2d0efd0..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/developer-animation.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/dna_loader.png b/lottie/test/goldens/all/lottiefiles/dna_loader.png deleted file mode 100644 index 0e5c419..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/dna_loader.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/dog.png b/lottie/test/goldens/all/lottiefiles/dog.png deleted file mode 100644 index bef9012..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/dog.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/done.png b/lottie/test/goldens/all/lottiefiles/done.png deleted file mode 100644 index 1fc6021..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/done.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/download copy.png b/lottie/test/goldens/all/lottiefiles/download copy.png deleted file mode 100644 index 3ed0ee9..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/download copy.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/download.png b/lottie/test/goldens/all/lottiefiles/download.png deleted file mode 100644 index 24eecae..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/download.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/downloader.png b/lottie/test/goldens/all/lottiefiles/downloader.png deleted file mode 100644 index a83e233..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/downloader.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/drop.png b/lottie/test/goldens/all/lottiefiles/drop.png deleted file mode 100644 index d9f3cdc..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/drop.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/drop_to_refresh.png b/lottie/test/goldens/all/lottiefiles/drop_to_refresh.png deleted file mode 100644 index 8e3c310..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/drop_to_refresh.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/edited-landscape.png b/lottie/test/goldens/all/lottiefiles/edited-landscape.png deleted file mode 100644 index e6a7556..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/edited-landscape.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/elephant_trunk_swing.png b/lottie/test/goldens/all/lottiefiles/elephant_trunk_swing.png deleted file mode 100644 index 5694786..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/elephant_trunk_swing.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/emoji_shock.png b/lottie/test/goldens/all/lottiefiles/emoji_shock.png deleted file mode 100644 index 2d9b864..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/emoji_shock.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/emoji_tongue.png b/lottie/test/goldens/all/lottiefiles/emoji_tongue.png deleted file mode 100644 index 6ff1dbd..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/emoji_tongue.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/emoji_wink.png b/lottie/test/goldens/all/lottiefiles/emoji_wink.png deleted file mode 100644 index 68239bc..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/emoji_wink.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/empty_status.png b/lottie/test/goldens/all/lottiefiles/empty_status.png deleted file mode 100644 index 04db8de..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/empty_status.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/estimate.png b/lottie/test/goldens/all/lottiefiles/estimate.png deleted file mode 100644 index fb36984..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/estimate.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/fab_animate.png b/lottie/test/goldens/all/lottiefiles/fab_animate.png deleted file mode 100644 index 9dbafd3..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/fab_animate.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/fabulous_onboarding_animation.png b/lottie/test/goldens/all/lottiefiles/fabulous_onboarding_animation.png deleted file mode 100644 index 1efbd0e..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/fabulous_onboarding_animation.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/favourite_app_icon.png b/lottie/test/goldens/all/lottiefiles/favourite_app_icon.png deleted file mode 100644 index 072f9a5..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/favourite_app_icon.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/file_error.png b/lottie/test/goldens/all/lottiefiles/file_error.png deleted file mode 100644 index 850ba0b..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/file_error.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/finance_animation.png b/lottie/test/goldens/all/lottiefiles/finance_animation.png deleted file mode 100644 index 577acc5..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/finance_animation.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/fingerprint_scanner.png b/lottie/test/goldens/all/lottiefiles/fingerprint_scanner.png deleted file mode 100644 index dddbc1f..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/fingerprint_scanner.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/finish,done.png b/lottie/test/goldens/all/lottiefiles/finish,done.png deleted file mode 100644 index 35c7857..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/finish,done.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/fish.png b/lottie/test/goldens/all/lottiefiles/fish.png deleted file mode 100644 index 88e07ea..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/fish.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/flag_of_mexico.png b/lottie/test/goldens/all/lottiefiles/flag_of_mexico.png deleted file mode 100644 index 07841d3..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/flag_of_mexico.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/flow.png b/lottie/test/goldens/all/lottiefiles/flow.png deleted file mode 100644 index 7691db1..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/flow.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/frog.png b/lottie/test/goldens/all/lottiefiles/frog.png deleted file mode 100644 index de4d510..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/frog.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/funky_chicken.png b/lottie/test/goldens/all/lottiefiles/funky_chicken.png deleted file mode 100644 index 18bc49c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/funky_chicken.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/gaming_pad.png b/lottie/test/goldens/all/lottiefiles/gaming_pad.png deleted file mode 100644 index 212ef53..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/gaming_pad.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/gears.png b/lottie/test/goldens/all/lottiefiles/gears.png deleted file mode 100644 index b5b85e1..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/gears.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/geometry.png b/lottie/test/goldens/all/lottiefiles/geometry.png deleted file mode 100644 index aeb6c21..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/geometry.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/glow_loading.png b/lottie/test/goldens/all/lottiefiles/glow_loading.png deleted file mode 100644 index bf59756..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/glow_loading.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/gradient_animated_background.png b/lottie/test/goldens/all/lottiefiles/gradient_animated_background.png deleted file mode 100644 index 4f65fca..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/gradient_animated_background.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/happy birthday.png b/lottie/test/goldens/all/lottiefiles/happy birthday.png deleted file mode 100644 index 91868f8..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/happy birthday.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/hardware.png b/lottie/test/goldens/all/lottiefiles/hardware.png deleted file mode 100644 index b6e6f02..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/hardware.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/hint_01.png b/lottie/test/goldens/all/lottiefiles/hint_01.png deleted file mode 100644 index 5430e68..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/hint_01.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/im_thirsty.png b/lottie/test/goldens/all/lottiefiles/im_thirsty.png deleted file mode 100644 index 4fd12b6..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/im_thirsty.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/immiguide_.png b/lottie/test/goldens/all/lottiefiles/immiguide_.png deleted file mode 100644 index 4ced820..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/immiguide_.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/in-app_purchasing.png b/lottie/test/goldens/all/lottiefiles/in-app_purchasing.png deleted file mode 100644 index a3f5380..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/in-app_purchasing.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/india.png b/lottie/test/goldens/all/lottiefiles/india.png deleted file mode 100644 index 226c653..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/india.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/infinite_rainbow.png b/lottie/test/goldens/all/lottiefiles/infinite_rainbow.png deleted file mode 100644 index 40ea749..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/infinite_rainbow.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/intelia_logo_animation.png b/lottie/test/goldens/all/lottiefiles/intelia_logo_animation.png deleted file mode 100644 index 61174ca..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/intelia_logo_animation.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/iphone_x_loading.png b/lottie/test/goldens/all/lottiefiles/iphone_x_loading.png deleted file mode 100644 index 25afc05..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/iphone_x_loading.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/jojo_the_bird.png b/lottie/test/goldens/all/lottiefiles/jojo_the_bird.png deleted file mode 100644 index 6cde270..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/jojo_the_bird.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/jolly_walker.png b/lottie/test/goldens/all/lottiefiles/jolly_walker.png deleted file mode 100644 index d199b64..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/jolly_walker.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/judgement.png b/lottie/test/goldens/all/lottiefiles/judgement.png deleted file mode 100644 index 947dcae..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/judgement.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/kod.io_logo_reveal.png b/lottie/test/goldens/all/lottiefiles/kod.io_logo_reveal.png deleted file mode 100644 index bc6015e..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/kod.io_logo_reveal.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/la_calavera.png b/lottie/test/goldens/all/lottiefiles/la_calavera.png deleted file mode 100644 index 9ab71d2..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/la_calavera.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/landing_page.png b/lottie/test/goldens/all/lottiefiles/landing_page.png deleted file mode 100644 index 0f72ae3..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/landing_page.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/lego_loader.png b/lottie/test/goldens/all/lottiefiles/lego_loader.png deleted file mode 100644 index 266785b..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/lego_loader.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/lf20_fteywrno.png b/lottie/test/goldens/all/lottiefiles/lf20_fteywrno.png deleted file mode 100644 index cad4fac..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/lf20_fteywrno.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/light.png b/lottie/test/goldens/all/lottiefiles/light.png deleted file mode 100644 index 9496f86..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/light.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/lightsaber.png b/lottie/test/goldens/all/lottiefiles/lightsaber.png deleted file mode 100644 index 77f9a13..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/lightsaber.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/little_girl_jumping_-_loader.png b/lottie/test/goldens/all/lottiefiles/little_girl_jumping_-_loader.png deleted file mode 100644 index 42a5516..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/little_girl_jumping_-_loader.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/loading.png b/lottie/test/goldens/all/lottiefiles/loading.png deleted file mode 100644 index 095e2a7..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/loading.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/loading_copy.png b/lottie/test/goldens/all/lottiefiles/loading_copy.png deleted file mode 100644 index 77f7436..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/loading_copy.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/loading_disc.png b/lottie/test/goldens/all/lottiefiles/loading_disc.png deleted file mode 100644 index b9fb3ba..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/loading_disc.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/loading_semicircle.png b/lottie/test/goldens/all/lottiefiles/loading_semicircle.png deleted file mode 100644 index c3dc99c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/loading_semicircle.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/location.png b/lottie/test/goldens/all/lottiefiles/location.png deleted file mode 100644 index 059d49a..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/location.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/location_marker.png b/lottie/test/goldens/all/lottiefiles/location_marker.png deleted file mode 100644 index 2371a8f..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/location_marker.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/location_pin.png b/lottie/test/goldens/all/lottiefiles/location_pin.png deleted file mode 100644 index d102c7f..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/location_pin.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/lottie_logo_1.png b/lottie/test/goldens/all/lottiefiles/lottie_logo_1.png deleted file mode 100644 index a55533b..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/lottie_logo_1.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/lottiepreview_qr.png b/lottie/test/goldens/all/lottiefiles/lottiepreview_qr.png deleted file mode 100644 index 28840e9..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/lottiepreview_qr.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/mailsent.png b/lottie/test/goldens/all/lottiefiles/mailsent.png deleted file mode 100644 index 5bd847b..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/mailsent.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/man_and_pay_with_credit_card.png b/lottie/test/goldens/all/lottiefiles/man_and_pay_with_credit_card.png deleted file mode 100644 index 1958b36..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/man_and_pay_with_credit_card.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/map_animation.png b/lottie/test/goldens/all/lottiefiles/map_animation.png deleted file mode 100644 index 19b2f54..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/map_animation.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/material loading.png b/lottie/test/goldens/all/lottiefiles/material loading.png deleted file mode 100644 index 626f81f..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/material loading.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/material_loader.png b/lottie/test/goldens/all/lottiefiles/material_loader.png deleted file mode 100644 index c2731a8..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/material_loader.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/material_loading_2.png b/lottie/test/goldens/all/lottiefiles/material_loading_2.png deleted file mode 100644 index ac5ba10..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/material_loading_2.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/material_wave_loading.png b/lottie/test/goldens/all/lottiefiles/material_wave_loading.png deleted file mode 100644 index faa6c22..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/material_wave_loading.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/me_at_office.png b/lottie/test/goldens/all/lottiefiles/me_at_office.png deleted file mode 100644 index 753f5d3..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/me_at_office.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/medal.png b/lottie/test/goldens/all/lottiefiles/medal.png deleted file mode 100644 index d41c80b..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/medal.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/menu_button_alt.png b/lottie/test/goldens/all/lottiefiles/menu_button_alt.png deleted file mode 100644 index d056b22..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/menu_button_alt.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/menubutton2.png b/lottie/test/goldens/all/lottiefiles/menubutton2.png deleted file mode 100644 index d056b22..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/menubutton2.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/mindful.png b/lottie/test/goldens/all/lottiefiles/mindful.png deleted file mode 100644 index 25ceb2d..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/mindful.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/mnemonics.png b/lottie/test/goldens/all/lottiefiles/mnemonics.png deleted file mode 100644 index 46820ea..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/mnemonics.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/money.png b/lottie/test/goldens/all/lottiefiles/money.png deleted file mode 100644 index 7f01330..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/money.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/motorcycle.png b/lottie/test/goldens/all/lottiefiles/motorcycle.png deleted file mode 100644 index 99a704a..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/motorcycle.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/moving bus.png b/lottie/test/goldens/all/lottiefiles/moving bus.png deleted file mode 100644 index f26c77f..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/moving bus.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/moving_eye.png b/lottie/test/goldens/all/lottiefiles/moving_eye.png deleted file mode 100644 index 24525f7..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/moving_eye.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/no_internet_connection.png b/lottie/test/goldens/all/lottiefiles/no_internet_connection.png deleted file mode 100644 index 1caeee5..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/no_internet_connection.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/notification_request.png b/lottie/test/goldens/all/lottiefiles/notification_request.png deleted file mode 100644 index 475ae52..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/notification_request.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/octopus.png b/lottie/test/goldens/all/lottiefiles/octopus.png deleted file mode 100644 index 9d121ff..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/octopus.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/ofrenda.png b/lottie/test/goldens/all/lottiefiles/ofrenda.png deleted file mode 100644 index 4a51f4c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/ofrenda.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/on_off_settings_switch.png b/lottie/test/goldens/all/lottiefiles/on_off_settings_switch.png deleted file mode 100644 index 53ef4de..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/on_off_settings_switch.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/pagado.png b/lottie/test/goldens/all/lottiefiles/pagado.png deleted file mode 100644 index ceb0bc1..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/pagado.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/pagination.png b/lottie/test/goldens/all/lottiefiles/pagination.png deleted file mode 100644 index 2a81be9..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/pagination.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/panel2d.png b/lottie/test/goldens/all/lottiefiles/panel2d.png deleted file mode 100644 index 4c807e0..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/panel2d.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/passport.png b/lottie/test/goldens/all/lottiefiles/passport.png deleted file mode 100644 index f9cae3c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/passport.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/patient_successfully_added.png b/lottie/test/goldens/all/lottiefiles/patient_successfully_added.png deleted file mode 100644 index 2e5884e..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/patient_successfully_added.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/payme.png b/lottie/test/goldens/all/lottiefiles/payme.png deleted file mode 100644 index ce00de5..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/payme.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/peli-canon.png b/lottie/test/goldens/all/lottiefiles/peli-canon.png deleted file mode 100644 index ef1cf85..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/peli-canon.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/pen_tool_loop.png b/lottie/test/goldens/all/lottiefiles/pen_tool_loop.png deleted file mode 100644 index 8433c62..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/pen_tool_loop.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/pencil_write.png b/lottie/test/goldens/all/lottiefiles/pencil_write.png deleted file mode 100644 index dbfd782..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/pencil_write.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/penguin.png b/lottie/test/goldens/all/lottiefiles/penguin.png deleted file mode 100644 index 9c228be..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/penguin.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/permission.png b/lottie/test/goldens/all/lottiefiles/permission.png deleted file mode 100644 index b8a1f07..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/permission.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/personal_character.png b/lottie/test/goldens/all/lottiefiles/personal_character.png deleted file mode 100644 index d57088b..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/personal_character.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/ph_onboarding_.png b/lottie/test/goldens/all/lottiefiles/ph_onboarding_.png deleted file mode 100644 index cbfdd6c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/ph_onboarding_.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/phonological.png b/lottie/test/goldens/all/lottiefiles/phonological.png deleted file mode 100644 index a7b6bb6..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/phonological.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/pink_drink_machine.png b/lottie/test/goldens/all/lottiefiles/pink_drink_machine.png deleted file mode 100644 index 73d1a5c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/pink_drink_machine.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/plane.png b/lottie/test/goldens/all/lottiefiles/plane.png deleted file mode 100644 index 2fc18ec..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/plane.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/plane_to_dollar.png b/lottie/test/goldens/all/lottiefiles/plane_to_dollar.png deleted file mode 100644 index e4fe28b..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/plane_to_dollar.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/play,_pause.png b/lottie/test/goldens/all/lottiefiles/play,_pause.png deleted file mode 100644 index 8c0a080..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/play,_pause.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/play_and_like_it.png b/lottie/test/goldens/all/lottiefiles/play_and_like_it.png deleted file mode 100644 index 6a56a3e..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/play_and_like_it.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/play_button.png b/lottie/test/goldens/all/lottiefiles/play_button.png deleted file mode 100644 index 568a73e..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/play_button.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/playing.png b/lottie/test/goldens/all/lottiefiles/playing.png deleted file mode 100644 index d98f10d..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/playing.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/point.png b/lottie/test/goldens/all/lottiefiles/point.png deleted file mode 100644 index df835ad..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/point.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/poo_loader.png b/lottie/test/goldens/all/lottiefiles/poo_loader.png deleted file mode 100644 index 4be936e..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/poo_loader.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/powerupp_app_onboard (1).png b/lottie/test/goldens/all/lottiefiles/powerupp_app_onboard (1).png deleted file mode 100644 index 6b69c65..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/powerupp_app_onboard (1).png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/powerupp_app_onboard.png b/lottie/test/goldens/all/lottiefiles/powerupp_app_onboard.png deleted file mode 100644 index 6b69c65..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/powerupp_app_onboard.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/preloader.png b/lottie/test/goldens/all/lottiefiles/preloader.png deleted file mode 100644 index da6b2c5..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/preloader.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/print.png b/lottie/test/goldens/all/lottiefiles/print.png deleted file mode 100644 index e05bd69..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/print.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/progress_bar 2.png b/lottie/test/goldens/all/lottiefiles/progress_bar 2.png deleted file mode 100644 index 922d396..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/progress_bar 2.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/progress_bar.png b/lottie/test/goldens/all/lottiefiles/progress_bar.png deleted file mode 100644 index ebcdaf3..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/progress_bar.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/rating.png b/lottie/test/goldens/all/lottiefiles/rating.png deleted file mode 100644 index fa3b3be..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/rating.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/red_pocket_pop_up.png b/lottie/test/goldens/all/lottiefiles/red_pocket_pop_up.png deleted file mode 100644 index 4b831b6..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/red_pocket_pop_up.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/rejection.png b/lottie/test/goldens/all/lottiefiles/rejection.png deleted file mode 100644 index aeb5919..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/rejection.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/retweet.png b/lottie/test/goldens/all/lottiefiles/retweet.png deleted file mode 100644 index bdad478..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/retweet.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/rocket.png b/lottie/test/goldens/all/lottiefiles/rocket.png deleted file mode 100644 index a730102..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/rocket.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/rocksauce_title_card.png b/lottie/test/goldens/all/lottiefiles/rocksauce_title_card.png deleted file mode 100644 index 41fb064..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/rocksauce_title_card.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/scan.png b/lottie/test/goldens/all/lottiefiles/scan.png deleted file mode 100644 index 6a55a01..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/scan.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/scan_qr_code_success.png b/lottie/test/goldens/all/lottiefiles/scan_qr_code_success.png deleted file mode 100644 index 22142c2..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/scan_qr_code_success.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/search_button.png b/lottie/test/goldens/all/lottiefiles/search_button.png deleted file mode 100644 index 0dfc4c9..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/search_button.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/security_token_roundtable.png b/lottie/test/goldens/all/lottiefiles/security_token_roundtable.png deleted file mode 100644 index 86c4ea6..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/security_token_roundtable.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/sensor_scan.png b/lottie/test/goldens/all/lottiefiles/sensor_scan.png deleted file mode 100644 index e1fdfc9..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/sensor_scan.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/servishero_loading.png b/lottie/test/goldens/all/lottiefiles/servishero_loading.png deleted file mode 100644 index 1c6387c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/servishero_loading.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/simple_loader.png b/lottie/test/goldens/all/lottiefiles/simple_loader.png deleted file mode 100644 index 156f381..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/simple_loader.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/sky.png b/lottie/test/goldens/all/lottiefiles/sky.png deleted file mode 100644 index 0677e28..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/sky.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/slack_app_loader.png b/lottie/test/goldens/all/lottiefiles/slack_app_loader.png deleted file mode 100644 index a9394e6..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/slack_app_loader.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/snowcation.png b/lottie/test/goldens/all/lottiefiles/snowcation.png deleted file mode 100644 index 96ece32..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/snowcation.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/socar_logo.png b/lottie/test/goldens/all/lottiefiles/socar_logo.png deleted file mode 100644 index 643ca2a..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/socar_logo.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/soda_loader.png b/lottie/test/goldens/all/lottiefiles/soda_loader.png deleted file mode 100644 index b6b38b9..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/soda_loader.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/spacehub.png b/lottie/test/goldens/all/lottiefiles/spacehub.png deleted file mode 100644 index fb51e80..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/spacehub.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/spinner loading.png b/lottie/test/goldens/all/lottiefiles/spinner loading.png deleted file mode 100644 index ccd08cf..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/spinner loading.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/splashy_loader.png b/lottie/test/goldens/all/lottiefiles/splashy_loader.png deleted file mode 100644 index 694943c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/splashy_loader.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/square_drop_loader.png b/lottie/test/goldens/all/lottiefiles/square_drop_loader.png deleted file mode 100644 index 5a75b52..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/square_drop_loader.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/star 2.png b/lottie/test/goldens/all/lottiefiles/star 2.png deleted file mode 100644 index 5b2a443..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/star 2.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/streetby_test_loading.png b/lottie/test/goldens/all/lottiefiles/streetby_test_loading.png deleted file mode 100644 index b635bac..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/streetby_test_loading.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/streetbymorning.png b/lottie/test/goldens/all/lottiefiles/streetbymorning.png deleted file mode 100644 index cd3dd2f..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/streetbymorning.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/submit button.png b/lottie/test/goldens/all/lottiefiles/submit button.png deleted file mode 100644 index 8e0fe36..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/submit button.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/summer.png b/lottie/test/goldens/all/lottiefiles/summer.png deleted file mode 100644 index 965d853..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/summer.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/sushi_and_wine.png b/lottie/test/goldens/all/lottiefiles/sushi_and_wine.png deleted file mode 100644 index 0a64264..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/sushi_and_wine.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/swiftkey-logo.png b/lottie/test/goldens/all/lottiefiles/swiftkey-logo.png deleted file mode 100644 index 3cc0b1c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/swiftkey-logo.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/swipe_menu.png b/lottie/test/goldens/all/lottiefiles/swipe_menu.png deleted file mode 100644 index 2efd467..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/swipe_menu.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/swipe_right_indicator.png b/lottie/test/goldens/all/lottiefiles/swipe_right_indicator.png deleted file mode 100644 index 741f38c..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/swipe_right_indicator.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/switch_loop.png b/lottie/test/goldens/all/lottiefiles/switch_loop.png deleted file mode 100644 index e483eae..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/switch_loop.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/the_final_frontier.png b/lottie/test/goldens/all/lottiefiles/the_final_frontier.png deleted file mode 100644 index 8521513..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/the_final_frontier.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/tigerobo_demo.png b/lottie/test/goldens/all/lottiefiles/tigerobo_demo.png deleted file mode 100644 index 3a4b1fe..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/tigerobo_demo.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/timer_(3_second_loop).png b/lottie/test/goldens/all/lottiefiles/timer_(3_second_loop).png deleted file mode 100644 index 15bc9bd..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/timer_(3_second_loop).png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/toggle.png b/lottie/test/goldens/all/lottiefiles/toggle.png deleted file mode 100644 index 715d419..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/toggle.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/toggle_switch.png b/lottie/test/goldens/all/lottiefiles/toggle_switch.png deleted file mode 100644 index b5ab8fb..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/toggle_switch.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/touch_id.png b/lottie/test/goldens/all/lottiefiles/touch_id.png deleted file mode 100644 index a24e3ad..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/touch_id.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/tractor.png b/lottie/test/goldens/all/lottiefiles/tractor.png deleted file mode 100644 index 307e038..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/tractor.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/tractor_animation.png b/lottie/test/goldens/all/lottiefiles/tractor_animation.png deleted file mode 100644 index 8d71b8b..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/tractor_animation.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/trail_loading.png b/lottie/test/goldens/all/lottiefiles/trail_loading.png deleted file mode 100644 index f439428..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/trail_loading.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/trophy.png b/lottie/test/goldens/all/lottiefiles/trophy.png deleted file mode 100644 index d1feda6..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/trophy.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/trophy_animation.png b/lottie/test/goldens/all/lottiefiles/trophy_animation.png deleted file mode 100644 index f317fce..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/trophy_animation.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/truecosmos.png b/lottie/test/goldens/all/lottiefiles/truecosmos.png deleted file mode 100644 index 167c8da..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/truecosmos.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/turbine.png b/lottie/test/goldens/all/lottiefiles/turbine.png deleted file mode 100644 index d6925e0..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/turbine.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/typing dot.png b/lottie/test/goldens/all/lottiefiles/typing dot.png deleted file mode 100644 index 08a3ab9..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/typing dot.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/uk.png b/lottie/test/goldens/all/lottiefiles/uk.png deleted file mode 100644 index fdf22e0..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/uk.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/updating_map.png b/lottie/test/goldens/all/lottiefiles/updating_map.png deleted file mode 100644 index 53f12fd..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/updating_map.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/us.png b/lottie/test/goldens/all/lottiefiles/us.png deleted file mode 100644 index 9d261e7..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/us.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/video_cam.png b/lottie/test/goldens/all/lottiefiles/video_cam.png deleted file mode 100644 index 0d0aa58..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/video_cam.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/vigilance_camera.png b/lottie/test/goldens/all/lottiefiles/vigilance_camera.png deleted file mode 100644 index f42fad0..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/vigilance_camera.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/volume_indicator.png b/lottie/test/goldens/all/lottiefiles/volume_indicator.png deleted file mode 100644 index ecf1849..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/volume_indicator.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/volume_shake_indicator.png b/lottie/test/goldens/all/lottiefiles/volume_shake_indicator.png deleted file mode 100644 index f421dd4..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/volume_shake_indicator.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/vr_animation.png b/lottie/test/goldens/all/lottiefiles/vr_animation.png deleted file mode 100644 index 0058701..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/vr_animation.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/vr_sickness.png b/lottie/test/goldens/all/lottiefiles/vr_sickness.png deleted file mode 100644 index 446c815..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/vr_sickness.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/walking.png b/lottie/test/goldens/all/lottiefiles/walking.png deleted file mode 100644 index 7dee164..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/walking.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/walking_arrow.png b/lottie/test/goldens/all/lottiefiles/walking_arrow.png deleted file mode 100644 index c07e668..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/walking_arrow.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/wallet recharge.png b/lottie/test/goldens/all/lottiefiles/wallet recharge.png deleted file mode 100644 index 0751e7a..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/wallet recharge.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/washing_machine.png b/lottie/test/goldens/all/lottiefiles/washing_machine.png deleted file mode 100644 index 4f854fa..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/washing_machine.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/win_result_2.png b/lottie/test/goldens/all/lottiefiles/win_result_2.png deleted file mode 100644 index 3a12d41..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/win_result_2.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/wolf_peek.png b/lottie/test/goldens/all/lottiefiles/wolf_peek.png deleted file mode 100644 index 4a2574f..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/wolf_peek.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/x_pop.png b/lottie/test/goldens/all/lottiefiles/x_pop.png deleted file mode 100644 index 176c1b0..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/x_pop.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/xamarin_logo_2.png b/lottie/test/goldens/all/lottiefiles/xamarin_logo_2.png deleted file mode 100644 index eee2616..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/xamarin_logo_2.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/xuanwheel_logo.png b/lottie/test/goldens/all/lottiefiles/xuanwheel_logo.png deleted file mode 100644 index c92efc8..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/xuanwheel_logo.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/yoga_carpet.png b/lottie/test/goldens/all/lottiefiles/yoga_carpet.png deleted file mode 100644 index f5fa42d..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/yoga_carpet.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottiefiles/youtube_icon_reveal.png b/lottie/test/goldens/all/lottiefiles/youtube_icon_reveal.png deleted file mode 100644 index 2a1221d..0000000 Binary files a/lottie/test/goldens/all/lottiefiles/youtube_icon_reveal.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottielogo1.png b/lottie/test/goldens/all/lottielogo1.png deleted file mode 100644 index a55533b..0000000 Binary files a/lottie/test/goldens/all/lottielogo1.png and /dev/null differ diff --git a/lottie/test/goldens/all/lottielogo2.png b/lottie/test/goldens/all/lottielogo2.png deleted file mode 100644 index 0dcc186..0000000 Binary files a/lottie/test/goldens/all/lottielogo2.png and /dev/null differ diff --git a/lottie/test/goldens/all/pass_loading.png b/lottie/test/goldens/all/pass_loading.png deleted file mode 100644 index f2d0645..0000000 Binary files a/lottie/test/goldens/all/pass_loading.png and /dev/null differ diff --git a/lottie/test/goldens/all/playing.png b/lottie/test/goldens/all/playing.png deleted file mode 100644 index 245e1ea..0000000 Binary files a/lottie/test/goldens/all/playing.png and /dev/null differ diff --git a/lottie/test/goldens/all/spinning_carrousel.png b/lottie/test/goldens/all/spinning_carrousel.png deleted file mode 100644 index 34b2387..0000000 Binary files a/lottie/test/goldens/all/spinning_carrousel.png and /dev/null differ diff --git a/lottie/test/goldens/all/sticker.png b/lottie/test/goldens/all/sticker.png deleted file mode 100644 index 8dd0a1f..0000000 Binary files a/lottie/test/goldens/all/sticker.png and /dev/null differ diff --git a/lottie/test/goldens/all/tent.png b/lottie/test/goldens/all/tent.png deleted file mode 100644 index 64ec0e8..0000000 Binary files a/lottie/test/goldens/all/tent.png and /dev/null differ diff --git a/lottie/test/goldens/all/twitterheartbutton.png b/lottie/test/goldens/all/twitterheartbutton.png deleted file mode 100644 index d971a18..0000000 Binary files a/lottie/test/goldens/all/twitterheartbutton.png and /dev/null differ diff --git a/lottie/test/goldens/all/vegan_font.png b/lottie/test/goldens/all/vegan_font.png deleted file mode 100644 index 749b1cc..0000000 Binary files a/lottie/test/goldens/all/vegan_font.png and /dev/null differ diff --git a/lottie/test/goldens/all/weather/fog.png b/lottie/test/goldens/all/weather/fog.png deleted file mode 100644 index a272819..0000000 Binary files a/lottie/test/goldens/all/weather/fog.png and /dev/null differ diff --git a/lottie/test/goldens/all/weather/hurricane.png b/lottie/test/goldens/all/weather/hurricane.png deleted file mode 100644 index 4d1f7be..0000000 Binary files a/lottie/test/goldens/all/weather/hurricane.png and /dev/null differ diff --git a/lottie/test/goldens/all/weather/thunder-storm.png b/lottie/test/goldens/all/weather/thunder-storm.png deleted file mode 100644 index 31edb6f..0000000 Binary files a/lottie/test/goldens/all/weather/thunder-storm.png and /dev/null differ diff --git a/lottie/test/goldens/all/weather/tornado.png b/lottie/test/goldens/all/weather/tornado.png deleted file mode 100644 index c30be23..0000000 Binary files a/lottie/test/goldens/all/weather/tornado.png and /dev/null differ diff --git a/lottie/test/goldens/all/weather/windy.png b/lottie/test/goldens/all/weather/windy.png deleted file mode 100644 index 3b6e895..0000000 Binary files a/lottie/test/goldens/all/weather/windy.png and /dev/null differ diff --git a/lottie/test/goldens/dotlottie.png b/lottie/test/goldens/dotlottie.png deleted file mode 100644 index 31ccec6..0000000 Binary files a/lottie/test/goldens/dotlottie.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/blur.png b/lottie/test/goldens/dynamic/blur.png deleted file mode 100644 index 2e607c7..0000000 Binary files a/lottie/test/goldens/dynamic/blur.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/color_filter.png b/lottie/test/goldens/dynamic/color_filter.png deleted file mode 100644 index 126f2ea..0000000 Binary files a/lottie/test/goldens/dynamic/color_filter.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/drop_shadow.png b/lottie/test/goldens/dynamic/drop_shadow.png deleted file mode 100644 index 5f93bef..0000000 Binary files a/lottie/test/goldens/dynamic/drop_shadow.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/ellipse_position.png b/lottie/test/goldens/dynamic/ellipse_position.png deleted file mode 100644 index 38c38ee..0000000 Binary files a/lottie/test/goldens/dynamic/ellipse_position.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/ellipse_size.png b/lottie/test/goldens/dynamic/ellipse_size.png deleted file mode 100644 index 3df9840..0000000 Binary files a/lottie/test/goldens/dynamic/ellipse_size.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/fill_color_green.png b/lottie/test/goldens/dynamic/fill_color_green.png deleted file mode 100644 index 003d3cc..0000000 Binary files a/lottie/test/goldens/dynamic/fill_color_green.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/fill_color_yellow.png b/lottie/test/goldens/dynamic/fill_color_yellow.png deleted file mode 100644 index fc0df9c..0000000 Binary files a/lottie/test/goldens/dynamic/fill_color_yellow.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/fill_opacity.png b/lottie/test/goldens/dynamic/fill_opacity.png deleted file mode 100644 index 32aeba8..0000000 Binary files a/lottie/test/goldens/dynamic/fill_opacity.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/matte_property.png b/lottie/test/goldens/dynamic/matte_property.png deleted file mode 100644 index d8de149..0000000 Binary files a/lottie/test/goldens/dynamic/matte_property.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/null_color_filter.png b/lottie/test/goldens/dynamic/null_color_filter.png deleted file mode 100644 index ce9f91a..0000000 Binary files a/lottie/test/goldens/dynamic/null_color_filter.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/opacity_interpolation_00.png b/lottie/test/goldens/dynamic/opacity_interpolation_00.png deleted file mode 100644 index c54ee21..0000000 Binary files a/lottie/test/goldens/dynamic/opacity_interpolation_00.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/opacity_interpolation_05.png b/lottie/test/goldens/dynamic/opacity_interpolation_05.png deleted file mode 100644 index 51ce27e..0000000 Binary files a/lottie/test/goldens/dynamic/opacity_interpolation_05.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/opacity_interpolation_10.png b/lottie/test/goldens/dynamic/opacity_interpolation_10.png deleted file mode 100644 index d9c8555..0000000 Binary files a/lottie/test/goldens/dynamic/opacity_interpolation_10.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/polygon_points.png b/lottie/test/goldens/dynamic/polygon_points.png deleted file mode 100644 index 0dc4513..0000000 Binary files a/lottie/test/goldens/dynamic/polygon_points.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/polygon_position.png b/lottie/test/goldens/dynamic/polygon_position.png deleted file mode 100644 index ce9f91a..0000000 Binary files a/lottie/test/goldens/dynamic/polygon_position.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/polygon_radius.png b/lottie/test/goldens/dynamic/polygon_radius.png deleted file mode 100644 index 9bf31b0..0000000 Binary files a/lottie/test/goldens/dynamic/polygon_radius.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/polygon_rotation.png b/lottie/test/goldens/dynamic/polygon_rotation.png deleted file mode 100644 index 5b5393e..0000000 Binary files a/lottie/test/goldens/dynamic/polygon_rotation.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/polygon_roundedness.png b/lottie/test/goldens/dynamic/polygon_roundedness.png deleted file mode 100644 index d43d7c1..0000000 Binary files a/lottie/test/goldens/dynamic/polygon_roundedness.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/rectangle_corner_roundedness.png b/lottie/test/goldens/dynamic/rectangle_corner_roundedness.png deleted file mode 100644 index 5d843fb..0000000 Binary files a/lottie/test/goldens/dynamic/rectangle_corner_roundedness.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/rectangle_position.png b/lottie/test/goldens/dynamic/rectangle_position.png deleted file mode 100644 index cf745ae..0000000 Binary files a/lottie/test/goldens/dynamic/rectangle_position.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/rectangle_size.png b/lottie/test/goldens/dynamic/rectangle_size.png deleted file mode 100644 index 1f7dadf..0000000 Binary files a/lottie/test/goldens/dynamic/rectangle_size.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/repeater_transform_end_opacity.png b/lottie/test/goldens/dynamic/repeater_transform_end_opacity.png deleted file mode 100644 index 89ee29f..0000000 Binary files a/lottie/test/goldens/dynamic/repeater_transform_end_opacity.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/repeater_transform_position.png b/lottie/test/goldens/dynamic/repeater_transform_position.png deleted file mode 100644 index 07dbcf3..0000000 Binary files a/lottie/test/goldens/dynamic/repeater_transform_position.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/repeater_transform_rotation.png b/lottie/test/goldens/dynamic/repeater_transform_rotation.png deleted file mode 100644 index 2495071..0000000 Binary files a/lottie/test/goldens/dynamic/repeater_transform_rotation.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/repeater_transform_scale.png b/lottie/test/goldens/dynamic/repeater_transform_scale.png deleted file mode 100644 index 7dde00a..0000000 Binary files a/lottie/test/goldens/dynamic/repeater_transform_scale.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/repeater_transform_start_opacity.png b/lottie/test/goldens/dynamic/repeater_transform_start_opacity.png deleted file mode 100644 index 1e791dd..0000000 Binary files a/lottie/test/goldens/dynamic/repeater_transform_start_opacity.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/solid_color.png b/lottie/test/goldens/dynamic/solid_color.png deleted file mode 100644 index 2ce55ec..0000000 Binary files a/lottie/test/goldens/dynamic/solid_color.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/star_inner_radius.png b/lottie/test/goldens/dynamic/star_inner_radius.png deleted file mode 100644 index 1fec408..0000000 Binary files a/lottie/test/goldens/dynamic/star_inner_radius.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/star_inner_roundedness.png b/lottie/test/goldens/dynamic/star_inner_roundedness.png deleted file mode 100644 index 2b2d22c..0000000 Binary files a/lottie/test/goldens/dynamic/star_inner_roundedness.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/star_outer_radius.png b/lottie/test/goldens/dynamic/star_outer_radius.png deleted file mode 100644 index e09bccb..0000000 Binary files a/lottie/test/goldens/dynamic/star_outer_radius.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/star_outer_roundedness.png b/lottie/test/goldens/dynamic/star_outer_roundedness.png deleted file mode 100644 index d43d7c1..0000000 Binary files a/lottie/test/goldens/dynamic/star_outer_roundedness.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/star_points.png b/lottie/test/goldens/dynamic/star_points.png deleted file mode 100644 index 0dc4513..0000000 Binary files a/lottie/test/goldens/dynamic/star_points.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/star_position.png b/lottie/test/goldens/dynamic/star_position.png deleted file mode 100644 index ce9f91a..0000000 Binary files a/lottie/test/goldens/dynamic/star_position.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/star_rotation.png b/lottie/test/goldens/dynamic/star_rotation.png deleted file mode 100644 index 5b5393e..0000000 Binary files a/lottie/test/goldens/dynamic/star_rotation.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/stroke_color.png b/lottie/test/goldens/dynamic/stroke_color.png deleted file mode 100644 index 6de030b..0000000 Binary files a/lottie/test/goldens/dynamic/stroke_color.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/stroke_opacity.png b/lottie/test/goldens/dynamic/stroke_opacity.png deleted file mode 100644 index 54cae03..0000000 Binary files a/lottie/test/goldens/dynamic/stroke_opacity.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/stroke_width.png b/lottie/test/goldens/dynamic/stroke_width.png deleted file mode 100644 index ed3498c..0000000 Binary files a/lottie/test/goldens/dynamic/stroke_width.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/time_remapping.png b/lottie/test/goldens/dynamic/time_remapping.png deleted file mode 100644 index 22ace03..0000000 Binary files a/lottie/test/goldens/dynamic/time_remapping.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/transform_anchor_point.png b/lottie/test/goldens/dynamic/transform_anchor_point.png deleted file mode 100644 index 803a4cb..0000000 Binary files a/lottie/test/goldens/dynamic/transform_anchor_point.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/transform_opacity.png b/lottie/test/goldens/dynamic/transform_opacity.png deleted file mode 100644 index 7f15d6d..0000000 Binary files a/lottie/test/goldens/dynamic/transform_opacity.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/transform_position.png b/lottie/test/goldens/dynamic/transform_position.png deleted file mode 100644 index 6c9d5c0..0000000 Binary files a/lottie/test/goldens/dynamic/transform_position.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/transform_position_relative.png b/lottie/test/goldens/dynamic/transform_position_relative.png deleted file mode 100644 index cf745ae..0000000 Binary files a/lottie/test/goldens/dynamic/transform_position_relative.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/transform_rotation.png b/lottie/test/goldens/dynamic/transform_rotation.png deleted file mode 100644 index b625c25..0000000 Binary files a/lottie/test/goldens/dynamic/transform_rotation.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic/transform_scale.png b/lottie/test/goldens/dynamic/transform_scale.png deleted file mode 100644 index 76436f1..0000000 Binary files a/lottie/test/goldens/dynamic/transform_scale.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic_image/delegate.png b/lottie/test/goldens/dynamic_image/delegate.png deleted file mode 100644 index 78fb150..0000000 Binary files a/lottie/test/goldens/dynamic_image/delegate.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic_image/zip_with_provider.png b/lottie/test/goldens/dynamic_image/zip_with_provider.png deleted file mode 100644 index 78fb150..0000000 Binary files a/lottie/test/goldens/dynamic_image/zip_with_provider.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic_text.png b/lottie/test/goldens/dynamic_text.png deleted file mode 100644 index 69c6efe..0000000 Binary files a/lottie/test/goldens/dynamic_text.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic_text/dynamic_text_delegate.png b/lottie/test/goldens/dynamic_text/dynamic_text_delegate.png deleted file mode 100644 index 31ccfe1..0000000 Binary files a/lottie/test/goldens/dynamic_text/dynamic_text_delegate.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic_text/dynamic_text_emoji.png b/lottie/test/goldens/dynamic_text/dynamic_text_emoji.png deleted file mode 100644 index 77cc567..0000000 Binary files a/lottie/test/goldens/dynamic_text/dynamic_text_emoji.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic_text/dynamic_text_valuedelegate.png b/lottie/test/goldens/dynamic_text/dynamic_text_valuedelegate.png deleted file mode 100644 index a034915..0000000 Binary files a/lottie/test/goldens/dynamic_text/dynamic_text_valuedelegate.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic_text/dynamic_text_valuedelegate_endvalue.png b/lottie/test/goldens/dynamic_text/dynamic_text_valuedelegate_endvalue.png deleted file mode 100644 index fe8525f..0000000 Binary files a/lottie/test/goldens/dynamic_text/dynamic_text_valuedelegate_endvalue.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic_text/dynamic_text_valuedelegate_overallprogress.png b/lottie/test/goldens/dynamic_text/dynamic_text_valuedelegate_overallprogress.png deleted file mode 100644 index b98aae7..0000000 Binary files a/lottie/test/goldens/dynamic_text/dynamic_text_valuedelegate_overallprogress.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic_text/dynamic_text_valuedelegate_startvalue.png b/lottie/test/goldens/dynamic_text/dynamic_text_valuedelegate_startvalue.png deleted file mode 100644 index fe8525f..0000000 Binary files a/lottie/test/goldens/dynamic_text/dynamic_text_valuedelegate_startvalue.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic_text/text_fill_blue__green.png b/lottie/test/goldens/dynamic_text/text_fill_blue__green.png deleted file mode 100644 index c7d793a..0000000 Binary files a/lottie/test/goldens/dynamic_text/text_fill_blue__green.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic_text/text_stroke_red__yellow.png b/lottie/test/goldens/dynamic_text/text_stroke_red__yellow.png deleted file mode 100644 index d4b6773..0000000 Binary files a/lottie/test/goldens/dynamic_text/text_stroke_red__yellow.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic_text/text_stroke_width.png b/lottie/test/goldens/dynamic_text/text_stroke_width.png deleted file mode 100644 index 4ed3799..0000000 Binary files a/lottie/test/goldens/dynamic_text/text_stroke_width.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic_text/text_tracking_1.png b/lottie/test/goldens/dynamic_text/text_tracking_1.png deleted file mode 100644 index f25aaf4..0000000 Binary files a/lottie/test/goldens/dynamic_text/text_tracking_1.png and /dev/null differ diff --git a/lottie/test/goldens/dynamic_text/text_tracking_2.png b/lottie/test/goldens/dynamic_text/text_tracking_2.png deleted file mode 100644 index 55e202c..0000000 Binary files a/lottie/test/goldens/dynamic_text/text_tracking_2.png and /dev/null differ diff --git a/lottie/test/goldens/enable_render_cache.png b/lottie/test/goldens/enable_render_cache.png deleted file mode 100644 index e8220b7..0000000 Binary files a/lottie/test/goldens/enable_render_cache.png and /dev/null differ diff --git a/lottie/test/goldens/fireworks.png b/lottie/test/goldens/fireworks.png deleted file mode 100644 index f1be459..0000000 Binary files a/lottie/test/goldens/fireworks.png and /dev/null differ diff --git a/lottie/test/goldens/gradients/blub_red_callback.png b/lottie/test/goldens/gradients/blub_red_callback.png deleted file mode 100644 index 99523b8..0000000 Binary files a/lottie/test/goldens/gradients/blub_red_callback.png and /dev/null differ diff --git a/lottie/test/goldens/gradients/blub_red_value.png b/lottie/test/goldens/gradients/blub_red_value.png deleted file mode 100644 index 99523b8..0000000 Binary files a/lottie/test/goldens/gradients/blub_red_value.png and /dev/null differ diff --git a/lottie/test/goldens/gradients/linear_gradient_fill.png b/lottie/test/goldens/gradients/linear_gradient_fill.png deleted file mode 100644 index c523a56..0000000 Binary files a/lottie/test/goldens/gradients/linear_gradient_fill.png and /dev/null differ diff --git a/lottie/test/goldens/gradients/linear_gradient_stroke.png b/lottie/test/goldens/gradients/linear_gradient_stroke.png deleted file mode 100644 index f39fbfd..0000000 Binary files a/lottie/test/goldens/gradients/linear_gradient_stroke.png and /dev/null differ diff --git a/lottie/test/goldens/gradients/opacity_linear_gradient_fill.png b/lottie/test/goldens/gradients/opacity_linear_gradient_fill.png deleted file mode 100644 index 55016d4..0000000 Binary files a/lottie/test/goldens/gradients/opacity_linear_gradient_fill.png and /dev/null differ diff --git a/lottie/test/goldens/gradients/radial_gradient_fill.png b/lottie/test/goldens/gradients/radial_gradient_fill.png deleted file mode 100644 index 787a0b3..0000000 Binary files a/lottie/test/goldens/gradients/radial_gradient_fill.png and /dev/null differ diff --git a/lottie/test/goldens/gradients/radial_gradient_stroke.png b/lottie/test/goldens/gradients/radial_gradient_stroke.png deleted file mode 100644 index 7e1bc5a..0000000 Binary files a/lottie/test/goldens/gradients/radial_gradient_stroke.png and /dev/null differ diff --git a/lottie/test/goldens/lightningbug_file.png b/lottie/test/goldens/lightningbug_file.png deleted file mode 100644 index 2e2e098..0000000 Binary files a/lottie/test/goldens/lightningbug_file.png and /dev/null differ diff --git a/lottie/test/goldens/mirror.png b/lottie/test/goldens/mirror.png deleted file mode 100644 index 7a3fdb1..0000000 Binary files a/lottie/test/goldens/mirror.png and /dev/null differ diff --git a/lottie/test/goldens/opacity_layers.png b/lottie/test/goldens/opacity_layers.png deleted file mode 100644 index d30b198..0000000 Binary files a/lottie/test/goldens/opacity_layers.png and /dev/null differ diff --git a/lottie/test/goldens/warningShimmer_1.png b/lottie/test/goldens/warningShimmer_1.png deleted file mode 100644 index a7d01e4..0000000 Binary files a/lottie/test/goldens/warningShimmer_1.png and /dev/null differ diff --git a/lottie/test/goldens/warningShimmer_2.png b/lottie/test/goldens/warningShimmer_2.png deleted file mode 100644 index a7d01e4..0000000 Binary files a/lottie/test/goldens/warningShimmer_2.png and /dev/null differ diff --git a/lottie/test/goldens/warningShimmer_3.png b/lottie/test/goldens/warningShimmer_3.png deleted file mode 100644 index a7d01e4..0000000 Binary files a/lottie/test/goldens/warningShimmer_3.png and /dev/null differ diff --git a/lottie/test/gradient_test.dart b/lottie/test/gradient_test.dart deleted file mode 100644 index 5d2beaf..0000000 --- a/lottie/test/gradient_test.dart +++ /dev/null @@ -1,166 +0,0 @@ -import 'dart:io'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; - -void main() { - void testGradient(String name, ValueDelegate valueDelegate) { - testWidgets(name, (tester) async { - var composition = await LottieComposition.fromBytes( - File('example/assets/Tests/DynamicGradient.json').readAsBytesSync(), - ); - - var animation = AnimationController( - vsync: tester, - duration: composition.duration, - ); - - await tester.pumpWidget( - Lottie( - composition: composition, - controller: animation, - delegates: LottieDelegates(values: [valueDelegate]), - ), - ); - - var screenshotName = name - .toLowerCase() - .replaceAll(RegExp('[^a-z0-9 ]'), '') - .replaceAll(' ', '_'); - - await expectLater( - find.byType(Lottie), - matchesGoldenFile('goldens/gradients/$screenshotName.png'), - ); - }); - } - - testGradient( - 'Linear Gradient Fill', - ValueDelegate.gradientColor( - ['Linear', 'Rectangle', 'Gradient Fill'], - value: const [Color(0xFFFFFF00), Color(0xFF00FF00)], - ), - ); - - testGradient( - 'Radial Gradient Fill', - ValueDelegate.gradientColor( - ['Radial', 'Rectangle', 'Gradient Fill'], - value: const [Color(0xFFFFFF00), Color(0xFF00FF00)], - ), - ); - - testGradient( - 'Linear Gradient Stroke', - ValueDelegate.gradientColor( - ['Linear', 'Rectangle', 'Gradient Stroke'], - value: const [Color(0xFFFFFF00), Color(0xFF00FF00)], - ), - ); - - testGradient( - 'Radial Gradient Stroke', - ValueDelegate.gradientColor( - ['Radial', 'Rectangle', 'Gradient Stroke'], - value: const [Color(0xFFFFFF00), Color(0xFF00FF00)], - ), - ); - - testGradient( - 'Opacity Linear Gradient Fill', - ValueDelegate.opacity(['Linear', 'Rectangle', 'Gradient Fill'], value: 50), - ); - - testWidgets('Can change gradient dynamically with value', (tester) async { - var composition = await LottieComposition.fromBytes( - File('example/assets/blub.json').readAsBytesSync(), - ); - - var animation = AnimationController( - vsync: tester, - duration: composition.duration, - ); - - await tester.pumpWidget( - Lottie( - composition: composition, - controller: animation, - delegates: LottieDelegates( - values: [ - ValueDelegate.gradientColor( - const ['灯光', '灯光', 'Gradient Fill 2'], - value: [Colors.yellow, Colors.white], - ), - ], - ), - ), - ); - await tester.pumpWidget( - Lottie( - composition: composition, - controller: animation, - delegates: LottieDelegates( - values: [ - ValueDelegate.gradientColor( - const ['灯光', '灯光', 'Gradient Fill 2'], - value: [Colors.red, Colors.white], - ), - ], - ), - ), - ); - - await expectLater( - find.byType(Lottie), - matchesGoldenFile('goldens/gradients/blub_red_value.png'), - ); - }); - - testWidgets('Can change gradient dynamically with callback', (tester) async { - var composition = await LottieComposition.fromBytes( - File('example/assets/blub.json').readAsBytesSync(), - ); - - var animation = AnimationController( - vsync: tester, - duration: composition.duration, - ); - - await tester.pumpWidget( - Lottie( - composition: composition, - controller: animation, - delegates: LottieDelegates( - values: [ - ValueDelegate.gradientColor(const [ - '灯光', - '灯光', - 'Gradient Fill 2', - ], callback: (_) => [Colors.yellow, Colors.white]), - ], - ), - ), - ); - await tester.pumpWidget( - Lottie( - composition: composition, - controller: animation, - delegates: LottieDelegates( - values: [ - ValueDelegate.gradientColor(const [ - '灯光', - '灯光', - 'Gradient Fill 2', - ], callback: (_) => [Colors.red, Colors.white]), - ], - ), - ), - ); - - await expectLater( - find.byType(Lottie), - matchesGoldenFile('goldens/gradients/blub_red_callback.png'), - ); - }); -} diff --git a/lottie/test/lottie_test.dart b/lottie/test/lottie_test.dart deleted file mode 100644 index 5dad105..0000000 --- a/lottie/test/lottie_test.dart +++ /dev/null @@ -1,558 +0,0 @@ -import 'dart:async'; -import 'dart:io'; -import 'package:flutter/services.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; - -void main() { - tearDown(() { - Lottie.cache.clear(); - }); - - testWidgets('Should settle if no animation', (tester) async { - var data = File('example/assets/HamburgerArrow.json').readAsBytesSync(); - var composition = await LottieComposition.fromBytes(data); - - await tester.pumpWidget(Lottie(composition: composition, animate: false)); - - await tester.pumpAndSettle(); - }); - - testWidgets('onLoaded called with the correct composition', (tester) async { - late LottieComposition composition; - - var file = SynchronousFile(File('example/assets/HamburgerArrow.json')); - - await tester.pumpWidget( - LottieBuilder.file( - file, - onLoaded: (c) { - composition = c; - }, - ), - ); - - await tester.pump(); - - expect(composition.endFrame, 179.99); - }); - - testWidgets('onLoaded called when remplacing the widget animation', ( - tester, - ) async { - var hamburgerData = Future.value( - bytesForFile('example/assets/HamburgerArrow.json'), - ); - var androidData = Future.value( - bytesForFile('example/assets/AndroidWave.json'), - ); - - var mockAsset = FakeAssetBundle({ - 'hamburger.json': hamburgerData, - 'android.json': androidData, - }); - - var animation = AnimationController(vsync: tester); - - LottieComposition? composition; - await tester.pumpWidget( - Lottie.asset( - 'hamburger.json', - controller: animation, - bundle: mockAsset, - onLoaded: (c) { - composition = c; - }, - ), - ); - await tester.pump(); - expect(tester.takeException(), isNull); - //expect(find.byType(Lottie), findsOneWidget); - expect(composition, isNotNull); - expect(composition!.duration, const Duration(seconds: 6)); - - composition = null; - - await tester.pumpWidget( - Lottie.asset( - 'android.json', - controller: animation, - bundle: mockAsset, - onLoaded: (c) { - composition = c; - }, - ), - ); - - await tester.pump(); - expect(composition, isNotNull); - expect(composition!.duration, const Duration(seconds: 2, milliseconds: 50)); - }); - - testWidgets('onLoaded data race 1', (tester) async { - var hamburgerCompleter = Completer(); - var androidCompleter = Completer(); - - var hamburgerData = bytesForFile('example/assets/HamburgerArrow.json'); - var androidData = bytesForFile('example/assets/AndroidWave.json'); - - var mockAsset = FakeAssetBundle({ - 'hamburger.json': hamburgerCompleter.future, - 'android.json': androidCompleter.future, - }); - - var animation = AnimationController(vsync: tester); - - var onLoadedCount = 0; - - LottieComposition? composition; - await tester.pumpWidget( - Lottie.asset( - 'hamburger.json', - controller: animation, - bundle: mockAsset, - onLoaded: (c) { - composition = c; - ++onLoadedCount; - }, - ), - ); - await tester.pump(); - expect( - find.byWidgetPredicate((w) => w is RawLottie && w.composition == null), - findsOneWidget, - ); - expect(composition, isNull); - expect(onLoadedCount, 0); - - await tester.pumpWidget( - Lottie.asset( - 'android.json', - controller: animation, - bundle: mockAsset, - onLoaded: (c) { - composition = c; - ++onLoadedCount; - }, - ), - ); - - await tester.pump(); - expect(composition, isNull); - expect(onLoadedCount, 0); - - hamburgerCompleter.complete(hamburgerData); - - await tester.pump(); - expect(composition, isNull); - expect(onLoadedCount, 0); - - androidCompleter.complete(androidData); - - await tester.pump(); - expect(composition!.duration, const Duration(seconds: 2, milliseconds: 50)); - expect(onLoadedCount, 1); - }); - - testWidgets('onLoaded data race 2', (tester) async { - var hamburgerCompleter = Completer(); - var androidCompleter = Completer(); - - var hamburgerData = bytesForFile('example/assets/HamburgerArrow.json'); - var androidData = bytesForFile('example/assets/AndroidWave.json'); - - var mockAsset = FakeAssetBundle({ - 'hamburger.json': hamburgerCompleter.future, - 'android.json': androidCompleter.future, - }); - - var animation = AnimationController(vsync: tester); - - var onLoadedCount = 0; - - LottieComposition? composition; - await tester.pumpWidget( - Lottie.asset( - 'hamburger.json', - controller: animation, - bundle: mockAsset, - onLoaded: (c) { - composition = c; - ++onLoadedCount; - }, - ), - ); - await tester.pump(); - expect( - find.byWidgetPredicate((w) => w is RawLottie && w.composition == null), - findsOneWidget, - ); - expect(composition, isNull); - expect(onLoadedCount, 0); - - await tester.pumpWidget( - Lottie.asset( - 'android.json', - controller: animation, - bundle: mockAsset, - onLoaded: (c) { - composition = c; - ++onLoadedCount; - }, - ), - ); - - await tester.pump(); - expect(composition, isNull); - expect(onLoadedCount, 0); - - androidCompleter.complete(androidData); - - await tester.pump(); - expect(composition!.duration, const Duration(seconds: 2, milliseconds: 50)); - expect(onLoadedCount, 1); - - hamburgerCompleter.complete(hamburgerData); - - await tester.pump(); - expect(composition!.duration, const Duration(seconds: 2, milliseconds: 50)); - expect(onLoadedCount, 1); - }); - - testWidgets('Should auto animate', (tester) async { - var composition = await LottieComposition.fromBytes( - File('example/assets/HamburgerArrow.json').readAsBytesSync(), - ); - - await tester.pumpWidget(Lottie(composition: composition)); - - await tester.pump(); - - var lottie = tester.firstWidget( - find.byType(AnimatedBuilder), - ); - expect(lottie.listenable, isNotNull); - expect( - (lottie.listenable as AnimationController).duration, - const Duration(seconds: 6), - ); - expect((lottie.listenable as AnimationController).isAnimating, true); - - await tester.pumpWidget(Lottie(composition: composition, animate: false)); - - lottie = tester.firstWidget(find.byType(AnimatedBuilder)); - expect(lottie.listenable, isNotNull); - expect( - (lottie.listenable as AnimationController).duration, - const Duration(seconds: 6), - ); - expect((lottie.listenable as AnimationController).isAnimating, false); - - await tester.pumpWidget(Lottie(composition: composition)); - - lottie = tester.firstWidget(find.byType(AnimatedBuilder)); - expect(lottie.listenable, isNotNull); - expect( - (lottie.listenable as AnimationController).duration, - const Duration(seconds: 6), - ); - - var animationController = AnimationController( - vsync: tester, - duration: const Duration(seconds: 2), - ); - - await tester.pumpWidget( - Lottie(composition: composition, controller: animationController.view), - ); - - lottie = tester.firstWidget(find.byType(AnimatedBuilder)); - expect(lottie.listenable, isNotNull); - expect( - (lottie.listenable as AnimationController).duration, - const Duration(seconds: 2), - ); - - await tester.pumpWidget( - Lottie( - composition: composition, - controller: animationController.view, - animate: false, - ), - ); - - lottie = tester.firstWidget(find.byType(AnimatedBuilder)); - expect(lottie.listenable, isNotNull); - expect( - (lottie.listenable as AnimationController).duration, - const Duration(seconds: 2), - ); - - await tester.pumpWidget(Lottie(composition: composition, animate: false)); - - lottie = tester.firstWidget(find.byType(AnimatedBuilder)); - expect(lottie.listenable, isNotNull); - expect( - (lottie.listenable as AnimationController).duration, - const Duration(seconds: 6), - ); - expect((lottie.listenable as AnimationController).isAnimating, false); - }); - - testWidgets('errorBuilder called when error', (tester) async { - var hamburgerData = Future.value( - bytesForFile('example/assets/HamburgerArrow.json'), - ); - var mockAsset = FakeAssetBundle({'hamburger.json': hamburgerData}); - - var errorKey = UniqueKey(); - var loadedCall = 0; - await tester.pumpWidget( - LottieBuilder.asset( - 'error.json', - bundle: mockAsset, - errorBuilder: (c, e, stackTrace) => Container(key: errorKey), - onLoaded: (c) { - ++loadedCall; - }, - ), - ); - - await tester.pump(); - expect(find.byKey(errorKey), findsOneWidget); - expect(loadedCall, 0); - - await tester.pumpWidget( - LottieBuilder.asset( - 'hamburger.json', - bundle: mockAsset, - errorBuilder: (c, e, stackTrace) => Container(key: errorKey), - onLoaded: (c) { - ++loadedCall; - }, - ), - ); - await tester.pump(); - - expect(find.byType(Lottie), findsOneWidget); - expect(find.byKey(errorKey), findsNothing); - expect(loadedCall, 1); - }); - - testWidgets('Cache should be synchronous', (tester) async { - var hamburgerData = Future.value( - bytesForFile('example/assets/HamburgerArrow.json'), - ); - var mockAsset = FakeAssetBundle({'hamburger.json': hamburgerData}); - - var loadedCall = 0; - var lottieWidget = LottieBuilder.asset( - 'hamburger.json', - bundle: mockAsset, - onLoaded: (c) { - ++loadedCall; - }, - ); - - await tester.pumpWidget(lottieWidget); - expect(tester.widget(find.byType(Lottie)).composition, isNull); - await tester.pump(); - expect(tester.widget(find.byType(Lottie)).composition, isNotNull); - - await tester.pumpWidget(Column(children: [lottieWidget, lottieWidget])); - expect( - tester.widget(find.byType(Lottie).at(0)).composition, - isNotNull, - ); - expect( - tester.widget(find.byType(Lottie).at(1)).composition, - isNotNull, - ); - expect(loadedCall, 3); - }); - - testWidgets('Cache can be cleared', (tester) async { - var hamburgerData = Future.value( - bytesForFile('example/assets/HamburgerArrow.json'), - ); - var mockAsset = FakeAssetBundle({'hamburger.json': hamburgerData}); - - var loadedCall = 0; - var lottieWidget = LottieBuilder.asset( - 'hamburger.json', - bundle: mockAsset, - onLoaded: (c) { - ++loadedCall; - }, - ); - - await tester.pumpWidget(lottieWidget); - expect(tester.widget(find.byType(Lottie)).composition, isNull); - await tester.pump(); - expect(tester.widget(find.byType(Lottie)).composition, isNotNull); - - Lottie.cache.clear(); - - await tester.pumpWidget(Center(child: lottieWidget)); - expect(tester.widget(find.byType(Lottie)).composition, isNull); - await tester.pump(); - expect(tester.widget(find.byType(Lottie)).composition, isNotNull); - expect(loadedCall, 2); - }); - - testWidgets('onLoaded is ', (tester) async { - var hamburgerData = Future.value( - bytesForFile('example/assets/HamburgerArrow.json'), - ); - var mockAsset = FakeAssetBundle({'hamburger.json': hamburgerData}); - var provider = AssetLottie('hamburger.json', bundle: mockAsset); - - await tester.pumpWidget( - KeyedSubtree( - key: UniqueKey(), - child: _LottieWithSetStateInOnLoaded(provider), - ), - ); - var state1 = tester.state<__LottieWithSetStateInOnLoadedState>( - find.byType(_LottieWithSetStateInOnLoaded), - ); - expect(state1.loadedCount, 1); - await tester.pump(); - expect(state1.loadedCount, 1); - - await tester.pumpWidget( - KeyedSubtree( - key: UniqueKey(), - child: _LottieWithSetStateInOnLoaded(provider), - ), - ); - var state2 = tester.state<__LottieWithSetStateInOnLoadedState>( - find.byType(_LottieWithSetStateInOnLoaded), - ); - expect(state2.loadedCount, 1); - await tester.pump(); - expect(state2.loadedCount, 1); - expect(state1, isNot(state2)); - }); - - testWidgets( - 'if composition is static should create Lottie with [animate] false by default', - (tester) async { - await tester.pumpWidget( - LottieBuilder.memory( - File('test/data/static_lottie.json').readAsBytesSync(), - ), - ); - expect(tester.hasRunningAnimations, false); - }, - ); - - testWidgets( - 'if composition is static and [animate] is true, should have animations', - (tester) async { - await tester.pumpWidget( - LottieBuilder.memory( - File('test/data/static_lottie.json').readAsBytesSync(), - animate: true, - ), - ); - expect(tester.hasRunningAnimations, true); - }, - ); - - testWidgets('AssetLottie uses DefaultAssetBundle', (tester) async { - var hamburgerData = Future.value( - bytesForFile('example/assets/HamburgerArrow.json'), - ); - var mockAsset = FakeAssetBundle({ - 'hamburger.json': hamburgerData, - 'other.json': hamburgerData, - }); - await tester.pumpWidget( - DefaultAssetBundle( - bundle: mockAsset, - child: Lottie.asset('hamburger.json'), - ), - ); - await tester.pump(const Duration(milliseconds: 100)); - expect(find.byType(RawLottie), findsOneWidget); - expect( - find.byWidgetPredicate((w) => w is RawLottie && w.composition != null), - findsOneWidget, - ); - - await tester.pumpWidget( - DefaultAssetBundle(bundle: mockAsset, child: Lottie.asset('other.json')), - ); - await tester.pump(const Duration(milliseconds: 100)); - expect( - find.byWidgetPredicate((w) => w is RawLottie && w.composition != null), - findsOneWidget, - ); - }); - - testWidgets('expected an int', (tester) async { - var data = File( - 'example/assets/Tests/kona_splash_animation.json', - ).readAsBytesSync(); - var composition = await LottieComposition.fromBytes(data); - - await tester.pumpWidget(Lottie(composition: composition, animate: false)); - - await tester.pumpAndSettle(); - }); -} - -class SynchronousFile extends Fake implements File { - final File _real; - - SynchronousFile(this._real); - - @override - String get path => _real.path; - - @override - Future readAsBytes() => Future.value(_real.readAsBytesSync()); -} - -ByteData bytesForFile(String path) => - File(path).readAsBytesSync().buffer.asByteData(); - -class FakeAssetBundle extends Fake implements AssetBundle { - final Map> data; - - FakeAssetBundle(this.data); - - @override - Future load(String key) { - return data[key] ?? (Future.error('Asset $key not found')); - } -} - -class _LottieWithSetStateInOnLoaded extends StatefulWidget { - final LottieProvider lottie; - - const _LottieWithSetStateInOnLoaded(this.lottie); - - @override - State<_LottieWithSetStateInOnLoaded> createState() => - __LottieWithSetStateInOnLoadedState(); -} - -class __LottieWithSetStateInOnLoadedState - extends State<_LottieWithSetStateInOnLoaded> { - var loadedCount = 0; - - @override - Widget build(BuildContext context) { - return LottieBuilder( - lottie: widget.lottie, - onLoaded: (_) { - setState(() { - ++loadedCount; - }); - }, - ); - } -} diff --git a/lottie/test/opacity_layer_test.dart b/lottie/test/opacity_layer_test.dart deleted file mode 100644 index 345e120..0000000 --- a/lottie/test/opacity_layer_test.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'dart:io'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; -import 'package:path/path.dart' as p; - -void main() { - testWidgets('Opacity layer option', (tester) async { - var size = const Size(500, 800); - tester.view.physicalSize = size; - tester.view.devicePixelRatio = 1.0; - - var bytes = File( - 'example/assets/Tests/opacity_layers.json', - ).readAsBytesSync(); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Lottie.memory( - bytes, - options: LottieOptions(enableApplyingOpacityToLayers: true), - ), - Lottie.memory(bytes), - ], - ), - ), - ), - ); - await tester.pump(); - await tester.pump(const Duration(milliseconds: 500)); - - await expectLater( - find.byType(Scaffold), - matchesGoldenFile(p.join('goldens/opacity_layers.png')), - ); - }); -} diff --git a/lottie/test/parser/moshi/buffer_test.dart b/lottie/test/parser/moshi/buffer_test.dart deleted file mode 100644 index 124c7ad..0000000 --- a/lottie/test/parser/moshi/buffer_test.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'dart:typed_data'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/src/parser/moshi/buffer.dart'; - -void main() { - test('Read', () { - var buffer = Buffer(Uint8List.fromList(List.generate(10, (i) => i))); - - buffer.request(4); - expect(buffer.readByte(), 0); - expect(buffer.readByte(), 1); - expect(buffer.getByte(0), 2); - expect(buffer.getByte(1), 3); - }); - test('Skip', () { - var buffer = Buffer(Uint8List.fromList(List.generate(10, (i) => i))); - - buffer.skip(2); - buffer.request(1); - expect(buffer.readByte(), 2); - expect(buffer.size, 0); - buffer.skip(2); - expect(buffer.size, 0); - }); -} diff --git a/lottie/test/parser/moshi/json_reader_test.dart b/lottie/test/parser/moshi/json_reader_test.dart deleted file mode 100644 index 129eb24..0000000 --- a/lottie/test/parser/moshi/json_reader_test.dart +++ /dev/null @@ -1,113 +0,0 @@ -import 'dart:convert'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/src/parser/moshi/json_reader.dart'; - -void main() { - test('Read json', () { - var reader = JsonReader.fromBytes(utf8.encoder.convert(_simpleJson)); - var messages = readMessagesArray(reader); - expect(messages, hasLength(2)); - expect(messages.first.user!.name, 'json_newb'); - }); -} - -class Message { - final int id; - final String? text; - final List? geo; - final User? user; - - Message(this.id, this.text, this.user, this.geo); -} - -class User { - final String? name; - final int followerCount; - - User(this.name, this.followerCount); -} - -List readMessagesArray(JsonReader reader) { - var messages = []; - reader.beginArray(); - while (reader.hasNext()) { - messages.add(readMessage(reader)); - } - reader.endArray(); - return messages; -} - -Message readMessage(JsonReader reader) { - var id = -1; - String? text; - User? user; - List? geo; - reader.beginObject(); - while (reader.hasNext()) { - var name = reader.nextName(); - if (name == 'id') { - id = reader.nextInt(); - } else if (name == 'text') { - text = reader.nextString(); - } else if (name == 'geo' && reader.peek() != Token.nullToken) { - geo = readDoublesArray(reader); - } else if (name == 'user') { - user = readUser(reader); - } else { - reader.skipValue(); - } - } - reader.endObject(); - return Message(id, text, user, geo); -} - -List readDoublesArray(JsonReader reader) { - var doubles = []; - reader.beginArray(); - while (reader.hasNext()) { - doubles.add(reader.nextDouble()); - } - reader.endArray(); - return doubles; -} - -User readUser(JsonReader reader) { - String? username; - var followersCount = -1; - reader.beginObject(); - while (reader.hasNext()) { - var name = reader.nextName(); - if (name == 'name') { - username = reader.nextString(); - } else if (name == 'followers_count') { - followersCount = reader.nextInt(); - } else { - reader.skipValue(); - } - } - reader.endObject(); - return User(username, followersCount); -} - -const _simpleJson = ''' -[ - { - "id": 912345678901, - "text": "How do I read a JSON stream in Java?", - "geo": null, - "user": { - "name": "json_newb", - "followers_count": 41 - } - }, - { - "id": 912345678902, - "text": "@json_newb just use JsonReader!", - "geo": [50.454722, -104.606667], - "user": { - "name": "jesse", - "followers_count": 2 - } - } -] -'''; diff --git a/lottie/test/render_cache_store_test.dart b/lottie/test/render_cache_store_test.dart deleted file mode 100644 index 2d113b1..0000000 --- a/lottie/test/render_cache_store_test.dart +++ /dev/null @@ -1,107 +0,0 @@ -import 'dart:io'; -import 'dart:ui'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; -import 'package:lottie/src/render_cache/key.dart'; -import 'package:lottie/src/render_cache/store_raster.dart'; - -void main() { - var animationBytes = File( - 'example/assets/AndroidWave.json', - ).readAsBytesSync(); - var key1 = CacheKey( - composition: LottieComposition.parseJsonBytes(animationBytes), - size: const Size(10, 10), - config: const [FrameRate.composition], - delegates: 0, - ); - var key2 = CacheKey( - composition: LottieComposition.parseJsonBytes(animationBytes), - size: const Size(20, 10), - config: const [FrameRate.composition], - delegates: 0, - ); - - test('RenderCache acquire/release logic', () async { - var cache = RasterStore(5000000); - - var user = Object(); - - var handle = cache.acquire(user); - var entry = handle.withKey(key1); - entry.imageForProgress(0, (p0) {}); - expect(cache.imageCount, 1); - - cache.release(user); - expect(cache.imageCount, 0); - }); - - test('RenderCache change key', () async { - var cache = RasterStore(500000); - - var user = Object(); - - var handle = cache.acquire(user); - var entry = handle.withKey(key1); - entry.imageForProgress(0, (p0) {}); - expect(cache.imageCount, 1); - - entry = handle.withKey(key2); - expect(cache.imageCount, 0); - - entry.imageForProgress(0, (p0) {}); - entry.imageForProgress(0, (p0) {}); - expect(cache.imageCount, 1); - }); - - test('RenderCache acquire with same key', () async { - var cache = RasterStore(5000000); - - var user1 = Object(); - var user2 = Object(); - - var handle1 = cache.acquire(user1); - var entry1 = handle1.withKey(key1); - entry1.imageForProgress(0, (p0) {}); - expect(cache.imageCount, 1); - - var handle2 = cache.acquire(user2); - var entry2 = handle2.withKey(key1); - expect(entry1, entry2); - - cache.release(user2); - expect(cache.imageCount, 1); - - entry1.imageForProgress(1, (p0) {}); - expect(cache.imageCount, 2); - }); - - test('RenderCache change key and release', () async { - var cache = RasterStore(50000000); - - var user1 = Object(); - var user2 = Object(); - - var handle1 = cache.acquire(user1); - var entry1 = handle1.withKey(key1); - entry1.imageForProgress(0, (p0) {}); - expect(cache.imageCount, 1); - - var handle2 = cache.acquire(user2); - var entry2 = handle2.withKey(key1); - expect(entry1, entry2); - - entry2 = handle2.withKey(key2); - expect(entry1, isNot(equals(entry2))); - expect(cache.imageCount, 1); - - entry2.imageForProgress(0, (p0) {}); - expect(cache.imageCount, 2); - - cache.release(user2); - expect(cache.imageCount, 1); - - cache.release(user1); - expect(cache.imageCount, 0); - }); -} diff --git a/lottie/test/render_cache_test.dart b/lottie/test/render_cache_test.dart deleted file mode 100644 index 73b73de..0000000 --- a/lottie/test/render_cache_test.dart +++ /dev/null @@ -1,276 +0,0 @@ -import 'dart:io'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; - -void main() { - testWidgets('Golden renderCache', (tester) async { - var composition = LottieComposition.parseJsonBytes( - File('example/assets/lottiefiles/a_mountain.json').readAsBytesSync(), - ); - - var size = const Size(500, 400); - tester.view.physicalSize = size; - tester.view.devicePixelRatio = 1.0; - - await tester.pumpWidget( - RawLottie( - progress: 0.5, - composition: composition, - renderCache: RenderCache.raster, - ), - ); - expect(RenderCache.raster.store.imageCount, 1); - - await expectLater( - find.byType(RawLottie), - matchesGoldenFile('goldens/enable_render_cache.png'), - ); - }); - - testWidgets('Enable render cache', (tester) async { - var composition = LottieComposition.parseJsonBytes( - File('example/assets/lottiefiles/bell.json').readAsBytesSync(), - ); - - var widget = _boilerplate( - ListView( - children: [ - for (var i = 0; i < 2; i++) - Lottie( - composition: composition, - renderCache: RenderCache.raster, - height: 100, - ), - ], - ), - ); - - await tester.pumpWidget(widget); - expect(RenderCache.raster.store.imageCount, 1); - expect(RenderCache.raster.store.handles.length, 2); - expect(RenderCache.raster.store.entries.length, 1); - var image = - RenderCache.raster.store.entries.values.first.images.values.first; - await tester.pumpWidget(widget); - expect(RenderCache.raster.store.imageCount, 1); - var image2 = - RenderCache.raster.store.entries.values.first.images.values.first; - expect(image, image2); - await tester.pump(const Duration(milliseconds: 100)); - await tester.pumpWidget(widget); - expect(RenderCache.raster.store.imageCount, 2); - await tester.pumpWidget(Container()); - expect(RenderCache.raster.store.imageCount, 0); - await tester.pumpWidget(widget); - expect(RenderCache.raster.store.imageCount, 1); - }); - - testWidgets('Enable render cache', (tester) async { - var composition = LottieComposition.parseJsonBytes( - File('example/assets/lottiefiles/bell.json').readAsBytesSync(), - ); - - var widget = _boilerplate( - ListView( - children: [ - for (var i = 0; i < 2; i++) - RawLottie( - composition: composition, - renderCache: RenderCache.raster, - height: 100, - progress: 0, - ), - ], - ), - ); - - await tester.pumpWidget(widget); - }); - - testWidgets('Cache cleared when a property change', (tester) async { - var composition = LottieComposition.parseJsonBytes( - File('example/assets/lottiefiles/a_mountain.json').readAsBytesSync(), - ); - - await tester.pumpWidget( - RawLottie( - progress: 0.5, - composition: composition, - frameRate: const FrameRate(60), - renderCache: RenderCache.raster, - ), - ); - await tester.pumpWidget( - RawLottie( - progress: 0.6, - composition: composition, - frameRate: const FrameRate(60), - renderCache: RenderCache.raster, - ), - ); - expect(RenderCache.raster.store.imageCount, 2); - - await tester.pumpWidget( - RawLottie( - progress: 0.7, - composition: composition, - frameRate: const FrameRate(30), - renderCache: RenderCache.raster, - ), - ); - expect(RenderCache.raster.store.imageCount, 1); - }); - - testWidgets('Cache cleared when a delegate change', (tester) async { - var composition = LottieComposition.parseJsonBytes( - File('example/assets/lottiefiles/a_mountain.json').readAsBytesSync(), - ); - - String textCallback(String s) => s; - String textCallback2(String s) => s; - await tester.pumpWidget( - RawLottie( - progress: 0.5, - composition: composition, - delegates: LottieDelegates(text: textCallback), - renderCache: RenderCache.raster, - ), - ); - await tester.pumpWidget( - RawLottie( - progress: 0.6, - composition: composition, - delegates: LottieDelegates(text: textCallback), - renderCache: RenderCache.raster, - ), - ); - expect(RenderCache.raster.store.imageCount, 2); - - await tester.pumpWidget( - RawLottie( - progress: 0.7, - composition: composition, - delegates: LottieDelegates(text: textCallback2), - renderCache: RenderCache.raster, - ), - ); - expect(RenderCache.raster.store.imageCount, 1); - }); - - testWidgets('Cache cleared when a delegate value change', (tester) async { - var composition = LottieComposition.parseJsonBytes( - File('example/assets/lottiefiles/a_mountain.json').readAsBytesSync(), - ); - - await tester.pumpWidget( - RawLottie( - progress: 0.5, - composition: composition, - delegates: LottieDelegates( - values: [ - ValueDelegate.color(['*'], value: Colors.red), - ], - ), - renderCache: RenderCache.raster, - ), - ); - await tester.pumpWidget( - RawLottie( - progress: 0.6, - composition: composition, - delegates: LottieDelegates( - values: [ - ValueDelegate.color(['*'], value: Colors.red), - ], - ), - renderCache: RenderCache.raster, - ), - ); - expect(RenderCache.raster.store.imageCount, 2); - - await tester.pumpWidget( - RawLottie( - progress: 0.7, - composition: composition, - delegates: LottieDelegates( - values: [ - ValueDelegate.color(['*'], value: Colors.blue), - ], - ), - renderCache: RenderCache.raster, - ), - ); - expect(RenderCache.raster.store.imageCount, 1); - }); - - testWidgets('2 widgets with same animation share cache', (tester) async { - var composition = LottieComposition.parseJsonBytes( - File('example/assets/lottiefiles/a_mountain.json').readAsBytesSync(), - ); - - await tester.pumpWidget( - Column( - children: [ - RawLottie( - progress: 0.5, - composition: composition, - renderCache: RenderCache.raster, - height: 50, - ), - RawLottie( - progress: 0.5, - composition: composition, - renderCache: RenderCache.raster, - height: 50, - ), - ], - ), - ); - expect(RenderCache.raster.store.imageCount, 1); - - await tester.pumpWidget( - Column( - children: [ - RawLottie( - progress: 0.6, - composition: composition, - renderCache: RenderCache.raster, - height: 50, - ), - RawLottie( - progress: 0.5, - composition: composition, - renderCache: RenderCache.raster, - height: 50, - ), - ], - ), - ); - expect(RenderCache.raster.store.imageCount, 2); - - await tester.pumpWidget( - Column( - children: [ - RawLottie( - progress: 0.6, - composition: composition, - renderCache: RenderCache.raster, - height: 50, - ), - RawLottie( - progress: 0.6, - composition: composition, - renderCache: RenderCache.raster, - height: 50, - ), - ], - ), - ); - expect(RenderCache.raster.store.imageCount, 2); - }); -} - -Widget _boilerplate(Widget widget) { - return MaterialApp(home: Scaffold(body: widget)); -} diff --git a/lottie/test/screenshot_test.dart b/lottie/test/screenshot_test.dart deleted file mode 100644 index 6081536..0000000 --- a/lottie/test/screenshot_test.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'dart:io'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; -import 'package:path/path.dart' as p; - -void main() { - //TODO(xha): download all screenshots from lottie-android as golden screenshots - // https://happo.io/api/a/27/p/27/reports/abe43ed3d2f25a3ea3c38b1740011cf84fea5e93-android28 - - const animationPath = 'example/assets'; - - var animations = <_Screenshot>[ - _Screenshot('AndroidWave.json'), - _Screenshot('HamburgerArrow.json'), - _Screenshot('HamburgerArrow.json', progress: 0.5), - _Screenshot('HamburgerArrow.json', progress: 1.0), - _Screenshot('Mobilo/A.json', progress: 0.5), - _Screenshot('Mobilo/B.json', progress: 0.5), - _Screenshot('Logo/LogoSmall.json', progress: 0.5), - _Screenshot('lottiefiles/atm_link.json', progress: 1.0), - ]; - for (var animation in animations) { - testWidgets('Screenshot ${animation.name} at ${animation.progress}', ( - WidgetTester tester, - ) async { - var composition = await LottieComposition.fromBytes( - File(p.join(animationPath, animation.name)).readAsBytesSync(), - ); - - var goldenName = animation.goldenName; - - await tester.pumpWidget( - RawLottie(composition: composition, progress: animation.progress), - ); - await expectLater( - find.byType(RawLottie), - matchesGoldenFile( - p.join('golden', p.dirname(animation.name), '$goldenName.png'), - ), - ); - }); - } -} - -class _Screenshot { - final String name; - final double progress; - - _Screenshot(this.name, {this.progress = 0.0}); - - String get goldenName => - '${p.basenameWithoutExtension(name)}_${progress.toStringAsFixed(1).replaceAll('.', '_')}'; -} diff --git a/lottie/test/telegram_sticker_test.dart b/lottie/test/telegram_sticker_test.dart deleted file mode 100644 index 63674f9..0000000 --- a/lottie/test/telegram_sticker_test.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'dart:io'; -import 'dart:ui'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:lottie/lottie.dart'; -import 'package:path/path.dart' as p; - -void main() { - testWidgets('Telegram sticker', (tester) async { - var size = const Size(500, 400); - tester.view.physicalSize = size; - tester.view.devicePixelRatio = 1.0; - - var provider = FileLottie( - File('example/assets/LightningBug_file.tgs'), - decoder: LottieComposition.decodeGZip, - ); - await tester.runAsync(() => provider.load()); - - await tester.pumpWidget(LottieBuilder(lottie: provider)); - - await expectLater( - find.byType(Lottie), - matchesGoldenFile(p.join('goldens/lightningbug_file.png')), - ); - }); -} diff --git a/lottie/test/utils.dart b/lottie/test/utils.dart deleted file mode 100644 index 5e05663..0000000 --- a/lottie/test/utils.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:lottie/lottie.dart'; - -class FilmStrip extends StatelessWidget { - final LottieComposition composition; - final LottieDelegates? delegates; - final Size size; - - const FilmStrip( - this.composition, { - super.key, - required this.size, - this.delegates, - }); - - @override - Widget build(BuildContext context) { - return CustomPaint(size: size, painter: _CustomerPainter(this)); - } -} - -class _CustomerPainter extends CustomPainter { - static const _columns = 5; - final FilmStrip parent; - - _CustomerPainter(this.parent); - - @override - void paint(Canvas canvas, Size size) { - var thumbSize = Size(size.width / _columns, size.width / _columns); - var drawable = LottieDrawable(parent.composition, frameRate: FrameRate.max); - if (parent.delegates != null) { - drawable.delegates = parent.delegates; - } - - var index = 0; - for (var progress = 0.0; progress <= 1; progress += 0.05) { - var x = index % _columns; - var y = index ~/ _columns; - - var rect = - Offset(x * thumbSize.width, y.toDouble() * thumbSize.height) & - thumbSize; - - drawable - ..setProgress(progress) - ..draw(canvas, rect); - - ++index; - } - } - - @override - bool shouldRepaint(CustomPainter oldDelegate) { - return true; - } -} diff --git a/pubspec.yaml b/pubspec.yaml index 1a9908e..20b10d0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,3 @@ dependency_overrides: - exif: - path: ./dependencies/exif - sprintf: - path: ./dependencies/sprintf + lottie: + path: ./dependencies/lottie diff --git a/update.py b/update.py index 1670a97..34ccd28 100644 --- a/update.py +++ b/update.py @@ -47,7 +47,7 @@ def integrate_package(folder_name, data): global config_lock repo_url = data['git'] - keep_list = ["lib", "test", "LICENSE", "pubspec.yaml", "android", "ios"] + keep_list = ["lib", "LICENSE", "pubspec.yaml", "android", "ios"] if "keep" in data: keep_list += [item.rstrip('/') for item in data['keep']]