First implementation based on android

This commit is contained in:
Xavier Hainaux
2020-01-31 19:33:37 +01:00
parent 975b167a8e
commit 711087fd25
602 changed files with 18858 additions and 143 deletions

View File

@ -0,0 +1,83 @@
import 'dart:ui';
import '../composition.dart';
import '../model/animatable/animatable_double_value.dart';
import '../model/animatable/animatable_path_value.dart';
import '../model/animatable/animatable_split_dimension_path_value.dart';
import '../model/animatable/animatable_value.dart';
import '../value/keyframe.dart';
import 'animatable_value_parser.dart';
import 'json_utils.dart';
import 'keyframes_parser.dart';
import 'moshi/json_reader.dart';
import 'path_keyframe_parser.dart';
class AnimatablePathValueParser {
static final _NAMES = JsonReaderOptions.of(['k', 'x', 'y']);
AnimatablePathValueParser._();
static AnimatablePathValue parse(
JsonReader reader, LottieComposition composition) {
var keyframes = <Keyframe<Offset>>[];
if (reader.peek() == Token.BEGIN_ARRAY) {
reader.beginArray();
while (reader.hasNext()) {
keyframes.add(PathKeyframeParser.parse(reader, composition));
}
reader.endArray();
KeyframesParser.setEndFrames(keyframes);
} else {
keyframes.add(Keyframe<Offset>.nonAnimated(
JsonUtils.jsonToPoint(reader, window.devicePixelRatio)));
}
return AnimatablePathValue.fromKeyframes(keyframes);
}
/// Returns either an {@link AnimatablePathValue} or an {@link AnimatableSplitDimensionPathValue}.
static AnimatableValue<Offset, Offset> parseSplitPath(
JsonReader reader, LottieComposition composition) {
AnimatablePathValue pathAnimation;
AnimatableDoubleValue xAnimation;
AnimatableDoubleValue yAnimation;
var hasExpressions = false;
reader.beginObject();
while (reader.peek() != Token.END_OBJECT) {
switch (reader.selectName(_NAMES)) {
case 0:
pathAnimation = AnimatablePathValueParser.parse(reader, composition);
break;
case 1:
if (reader.peek() == Token.STRING) {
hasExpressions = true;
reader.skipValue();
} else {
xAnimation = AnimatableValueParser.parseFloat(reader, composition);
}
break;
case 2:
if (reader.peek() == Token.STRING) {
hasExpressions = true;
reader.skipValue();
} else {
yAnimation = AnimatableValueParser.parseFloat(reader, composition);
}
break;
default:
reader.skipName();
reader.skipValue();
}
}
reader.endObject();
if (hasExpressions) {
composition.addWarning("Lottie doesn't support expressions.");
}
if (pathAnimation != null) {
return pathAnimation;
}
return AnimatableSplitDimensionPathValue(xAnimation, yAnimation);
}
}