mirror of
https://github.com/rive-app/rive-flutter.git
synced 2025-06-26 17:56:28 +08:00
Updating to latest version of Rive runtime format and prepping for pub.dev release.
This commit is contained in:
@ -1,3 +1,7 @@
|
||||
## [0.0.4] - 2020-07-28 18:35:44
|
||||
|
||||
- Fundamental changes to runtime format enabling smaller file sizes. Format bumps to version 3.0 as it breaks backwards compatibility.
|
||||
|
||||
## [0.0.3] - 2020-07-19 18:18:50
|
||||
|
||||
- Support shorter string encoding. Format bumps to version 2.0 as it breaks backwards compatibility.
|
||||
|
Binary file not shown.
@ -21,7 +21,7 @@ packages:
|
||||
name: characters
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
version: "1.1.0-nullsafety"
|
||||
charcode:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -42,7 +42,7 @@ packages:
|
||||
name: collection
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.14.13"
|
||||
version: "1.15.0-nullsafety"
|
||||
fake_async:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -80,7 +80,7 @@ packages:
|
||||
name: meta
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.8"
|
||||
version: "1.3.0-nullsafety"
|
||||
path:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -94,7 +94,7 @@ packages:
|
||||
path: ".."
|
||||
relative: true
|
||||
source: path
|
||||
version: "0.0.3"
|
||||
version: "0.0.4"
|
||||
sky_engine:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
@ -148,13 +148,13 @@ packages:
|
||||
name: typed_data
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
version: "1.3.0-nullsafety"
|
||||
vector_math:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vector_math
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.8"
|
||||
version: "2.1.0-nullsafety"
|
||||
sdks:
|
||||
dart: ">=2.9.0-14.0.dev <3.0.0"
|
||||
dart: ">=2.9.0-18.0 <2.9.0"
|
||||
|
@ -1,11 +1,7 @@
|
||||
import 'package:rive/src/core/field_types/core_field_type.dart';
|
||||
import 'package:rive/src/utilities/binary_buffer/binary_reader.dart';
|
||||
|
||||
|
||||
class CoreBoolType extends CoreFieldType<bool> {
|
||||
@override
|
||||
bool deserialize(BinaryReader reader) => reader.readInt8() == 1;
|
||||
|
||||
@override
|
||||
bool lerp(bool from, bool to, double f) => from;
|
||||
}
|
||||
|
7
lib/src/core/field_types/core_color_type.dart
Normal file
7
lib/src/core/field_types/core_color_type.dart
Normal file
@ -0,0 +1,7 @@
|
||||
import 'package:rive/src/core/field_types/core_field_type.dart';
|
||||
import 'package:rive/src/utilities/binary_buffer/binary_reader.dart';
|
||||
|
||||
class CoreColorType extends CoreFieldType<int> {
|
||||
@override
|
||||
int deserialize(BinaryReader reader) => reader.readUint32();
|
||||
}
|
@ -3,10 +3,5 @@ import 'package:rive/src/utilities/binary_buffer/binary_reader.dart';
|
||||
|
||||
class CoreDoubleType extends CoreFieldType<double> {
|
||||
@override
|
||||
double deserialize(BinaryReader reader) => reader.buffer.lengthInBytes == 4
|
||||
? reader.readFloat32()
|
||||
: reader.readFloat64();
|
||||
|
||||
@override
|
||||
double lerp(double from, double to, double f) => from + (to - from) * f;
|
||||
double deserialize(BinaryReader reader) => reader.readFloat32();
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
import 'package:rive/src/utilities/binary_buffer/binary_reader.dart';
|
||||
|
||||
// ignore: one_member_abstracts
|
||||
abstract class CoreFieldType<T> {
|
||||
T deserialize(BinaryReader reader);
|
||||
T lerp(T from, T to, double f);
|
||||
}
|
||||
|
@ -1,18 +0,0 @@
|
||||
|
||||
import 'package:rive/src/core/core.dart';
|
||||
import 'package:rive/src/core/field_types/core_field_type.dart';
|
||||
import 'package:rive/src/utilities/binary_buffer/binary_reader.dart';
|
||||
|
||||
|
||||
class CoreFractionalIndexType extends CoreFieldType<FractionalIndex> {
|
||||
@override
|
||||
FractionalIndex deserialize(BinaryReader reader) {
|
||||
var numerator = reader.readVarInt();
|
||||
var denominator = reader.readVarInt();
|
||||
return FractionalIndex(numerator, denominator);
|
||||
}
|
||||
|
||||
@override
|
||||
FractionalIndex lerp(FractionalIndex from, FractionalIndex to, double f) =>
|
||||
from;
|
||||
}
|
@ -1,11 +1,7 @@
|
||||
import 'package:rive/src/core/field_types/core_field_type.dart';
|
||||
import 'package:rive/src/utilities/binary_buffer/binary_reader.dart';
|
||||
|
||||
|
||||
class CoreIntType extends CoreFieldType<int> {
|
||||
@override
|
||||
int deserialize(BinaryReader reader) => reader.readVarInt();
|
||||
|
||||
@override
|
||||
int lerp(int from, int to, double f) => (from + (to - from) * f).round();
|
||||
}
|
||||
|
@ -4,8 +4,5 @@ import 'package:rive/src/utilities/binary_buffer/binary_reader.dart';
|
||||
class CoreStringType extends CoreFieldType<String> {
|
||||
@override
|
||||
String deserialize(BinaryReader reader) =>
|
||||
reader.readString(explicitLength: false);
|
||||
|
||||
@override
|
||||
String lerp(String from, String to, double f) => from;
|
||||
reader.readString(explicitLength: true);
|
||||
}
|
||||
|
7
lib/src/core/field_types/core_uint_type.dart
Normal file
7
lib/src/core/field_types/core_uint_type.dart
Normal file
@ -0,0 +1,7 @@
|
||||
import 'package:rive/src/core/field_types/core_field_type.dart';
|
||||
import 'package:rive/src/utilities/binary_buffer/binary_reader.dart';
|
||||
|
||||
class CoreUintType extends CoreFieldType<int> {
|
||||
@override
|
||||
int deserialize(BinaryReader reader) => reader.readVarUint();
|
||||
}
|
@ -1,9 +1,11 @@
|
||||
import 'package:rive/src/core/core.dart';
|
||||
import 'package:rive/src/core/field_types/core_bool_type.dart';
|
||||
import 'package:rive/src/core/field_types/core_color_type.dart';
|
||||
import 'package:rive/src/core/field_types/core_double_type.dart';
|
||||
import 'package:rive/src/core/field_types/core_field_type.dart';
|
||||
import 'package:rive/src/core/field_types/core_int_type.dart';
|
||||
import 'package:rive/src/core/field_types/core_string_type.dart';
|
||||
import 'package:rive/src/core/field_types/core_uint_type.dart';
|
||||
import 'package:rive/src/generated/animation/animation_base.dart';
|
||||
import 'package:rive/src/generated/animation/cubic_interpolator_base.dart';
|
||||
import 'package:rive/src/generated/animation/keyed_object_base.dart';
|
||||
@ -476,30 +478,32 @@ class RiveCoreContext {
|
||||
}
|
||||
}
|
||||
|
||||
static CoreFieldType uintType = CoreUintType();
|
||||
static CoreFieldType intType = CoreIntType();
|
||||
static CoreFieldType stringType = CoreStringType();
|
||||
static CoreFieldType doubleType = CoreDoubleType();
|
||||
static CoreFieldType colorType = CoreIntType();
|
||||
static CoreFieldType colorType = CoreColorType();
|
||||
static CoreFieldType boolType = CoreBoolType();
|
||||
static CoreFieldType coreType(int propertyKey) {
|
||||
switch (propertyKey) {
|
||||
case KeyedObjectBase.objectIdPropertyKey:
|
||||
case KeyFrameBase.interpolatorIdPropertyKey:
|
||||
case KeyFrameDrawOrderValueBase.drawableIdPropertyKey:
|
||||
case KeyFrameDrawOrderValueBase.valuePropertyKey:
|
||||
case ComponentBase.parentIdPropertyKey:
|
||||
case DrawableBase.drawOrderPropertyKey:
|
||||
return uintType;
|
||||
case KeyedPropertyBase.propertyKeyPropertyKey:
|
||||
case KeyFrameBase.framePropertyKey:
|
||||
case KeyFrameBase.interpolationTypePropertyKey:
|
||||
case KeyFrameBase.interpolatorIdPropertyKey:
|
||||
case LinearAnimationBase.fpsPropertyKey:
|
||||
case LinearAnimationBase.durationPropertyKey:
|
||||
case LinearAnimationBase.loopValuePropertyKey:
|
||||
case LinearAnimationBase.workStartPropertyKey:
|
||||
case LinearAnimationBase.workEndPropertyKey:
|
||||
case KeyFrameDrawOrderValueBase.drawableIdPropertyKey:
|
||||
case KeyFrameDrawOrderValueBase.valuePropertyKey:
|
||||
case ComponentBase.parentIdPropertyKey:
|
||||
case StrokeBase.capPropertyKey:
|
||||
case StrokeBase.joinPropertyKey:
|
||||
case FillBase.fillRulePropertyKey:
|
||||
case DrawableBase.drawOrderPropertyKey:
|
||||
case DrawableBase.blendModeValuePropertyKey:
|
||||
return intType;
|
||||
case AnimationBase.namePropertyKey:
|
||||
@ -560,18 +564,32 @@ class RiveCoreContext {
|
||||
}
|
||||
}
|
||||
|
||||
static int getInt(Core object, int propertyKey) {
|
||||
static int getUint(Core object, int propertyKey) {
|
||||
switch (propertyKey) {
|
||||
case KeyedObjectBase.objectIdPropertyKey:
|
||||
return (object as KeyedObjectBase).objectId;
|
||||
case KeyFrameBase.interpolatorIdPropertyKey:
|
||||
return (object as KeyFrameBase).interpolatorId;
|
||||
case KeyFrameDrawOrderValueBase.drawableIdPropertyKey:
|
||||
return (object as KeyFrameDrawOrderValueBase).drawableId;
|
||||
case KeyFrameDrawOrderValueBase.valuePropertyKey:
|
||||
return (object as KeyFrameDrawOrderValueBase).value;
|
||||
case ComponentBase.parentIdPropertyKey:
|
||||
return (object as ComponentBase).parentId;
|
||||
case DrawableBase.drawOrderPropertyKey:
|
||||
return (object as DrawableBase).drawOrder;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int getInt(Core object, int propertyKey) {
|
||||
switch (propertyKey) {
|
||||
case KeyedPropertyBase.propertyKeyPropertyKey:
|
||||
return (object as KeyedPropertyBase).propertyKey;
|
||||
case KeyFrameBase.framePropertyKey:
|
||||
return (object as KeyFrameBase).frame;
|
||||
case KeyFrameBase.interpolationTypePropertyKey:
|
||||
return (object as KeyFrameBase).interpolationType;
|
||||
case KeyFrameBase.interpolatorIdPropertyKey:
|
||||
return (object as KeyFrameBase).interpolatorId;
|
||||
case LinearAnimationBase.fpsPropertyKey:
|
||||
return (object as LinearAnimationBase).fps;
|
||||
case LinearAnimationBase.durationPropertyKey:
|
||||
@ -582,20 +600,12 @@ class RiveCoreContext {
|
||||
return (object as LinearAnimationBase).workStart;
|
||||
case LinearAnimationBase.workEndPropertyKey:
|
||||
return (object as LinearAnimationBase).workEnd;
|
||||
case KeyFrameDrawOrderValueBase.drawableIdPropertyKey:
|
||||
return (object as KeyFrameDrawOrderValueBase).drawableId;
|
||||
case KeyFrameDrawOrderValueBase.valuePropertyKey:
|
||||
return (object as KeyFrameDrawOrderValueBase).value;
|
||||
case ComponentBase.parentIdPropertyKey:
|
||||
return (object as ComponentBase).parentId;
|
||||
case StrokeBase.capPropertyKey:
|
||||
return (object as StrokeBase).cap;
|
||||
case StrokeBase.joinPropertyKey:
|
||||
return (object as StrokeBase).join;
|
||||
case FillBase.fillRulePropertyKey:
|
||||
return (object as FillBase).fillRule;
|
||||
case DrawableBase.drawOrderPropertyKey:
|
||||
return (object as DrawableBase).drawOrder;
|
||||
case DrawableBase.blendModeValuePropertyKey:
|
||||
return (object as DrawableBase).blendModeValue;
|
||||
}
|
||||
@ -724,11 +734,31 @@ class RiveCoreContext {
|
||||
return false;
|
||||
}
|
||||
|
||||
static void setInt(Core object, int propertyKey, int value) {
|
||||
static void setUint(Core object, int propertyKey, int value) {
|
||||
switch (propertyKey) {
|
||||
case KeyedObjectBase.objectIdPropertyKey:
|
||||
(object as KeyedObjectBase).objectId = value;
|
||||
break;
|
||||
case KeyFrameBase.interpolatorIdPropertyKey:
|
||||
(object as KeyFrameBase).interpolatorId = value;
|
||||
break;
|
||||
case KeyFrameDrawOrderValueBase.drawableIdPropertyKey:
|
||||
(object as KeyFrameDrawOrderValueBase).drawableId = value;
|
||||
break;
|
||||
case KeyFrameDrawOrderValueBase.valuePropertyKey:
|
||||
(object as KeyFrameDrawOrderValueBase).value = value;
|
||||
break;
|
||||
case ComponentBase.parentIdPropertyKey:
|
||||
(object as ComponentBase).parentId = value;
|
||||
break;
|
||||
case DrawableBase.drawOrderPropertyKey:
|
||||
(object as DrawableBase).drawOrder = value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void setInt(Core object, int propertyKey, int value) {
|
||||
switch (propertyKey) {
|
||||
case KeyedPropertyBase.propertyKeyPropertyKey:
|
||||
(object as KeyedPropertyBase).propertyKey = value;
|
||||
break;
|
||||
@ -738,9 +768,6 @@ class RiveCoreContext {
|
||||
case KeyFrameBase.interpolationTypePropertyKey:
|
||||
(object as KeyFrameBase).interpolationType = value;
|
||||
break;
|
||||
case KeyFrameBase.interpolatorIdPropertyKey:
|
||||
(object as KeyFrameBase).interpolatorId = value;
|
||||
break;
|
||||
case LinearAnimationBase.fpsPropertyKey:
|
||||
(object as LinearAnimationBase).fps = value;
|
||||
break;
|
||||
@ -756,15 +783,6 @@ class RiveCoreContext {
|
||||
case LinearAnimationBase.workEndPropertyKey:
|
||||
(object as LinearAnimationBase).workEnd = value;
|
||||
break;
|
||||
case KeyFrameDrawOrderValueBase.drawableIdPropertyKey:
|
||||
(object as KeyFrameDrawOrderValueBase).drawableId = value;
|
||||
break;
|
||||
case KeyFrameDrawOrderValueBase.valuePropertyKey:
|
||||
(object as KeyFrameDrawOrderValueBase).value = value;
|
||||
break;
|
||||
case ComponentBase.parentIdPropertyKey:
|
||||
(object as ComponentBase).parentId = value;
|
||||
break;
|
||||
case StrokeBase.capPropertyKey:
|
||||
(object as StrokeBase).cap = value;
|
||||
break;
|
||||
@ -774,9 +792,6 @@ class RiveCoreContext {
|
||||
case FillBase.fillRulePropertyKey:
|
||||
(object as FillBase).fillRule = value;
|
||||
break;
|
||||
case DrawableBase.drawOrderPropertyKey:
|
||||
(object as DrawableBase).drawOrder = value;
|
||||
break;
|
||||
case DrawableBase.blendModeValuePropertyKey:
|
||||
(object as DrawableBase).blendModeValue = value;
|
||||
break;
|
||||
|
@ -24,7 +24,7 @@ abstract class RectangleBase extends ParametricPath {
|
||||
|
||||
/// --------------------------------------------------------------------------
|
||||
/// CornerRadius field with key 31.
|
||||
double _cornerRadius;
|
||||
double _cornerRadius = 0;
|
||||
static const int cornerRadiusPropertyKey = 31;
|
||||
|
||||
/// Radius of the corners of this rectangle
|
||||
|
@ -1 +1 @@
|
||||
double circleConstant = 0.552284749831;
|
||||
const circleConstant = 0.552284749831;
|
||||
|
@ -48,6 +48,10 @@ class Mat2D {
|
||||
Mat2D.fromScaling(Vec2D scaling) {
|
||||
_buffer = Float32List.fromList([scaling[0], 0, 0, scaling[1], 0, 0]);
|
||||
}
|
||||
Mat2D.fromMat4(Float64List mat4) {
|
||||
_buffer = Float32List.fromList(
|
||||
[mat4[0], mat4[1], mat4[4], mat4[5], mat4[12], mat4[13]]);
|
||||
}
|
||||
Mat2D.clone(Mat2D copy) {
|
||||
_buffer = Float32List.fromList(copy.values);
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ import 'package:rive/src/utilities/binary_buffer/binary_reader.dart';
|
||||
import 'exceptions/rive_format_error_exception.dart';
|
||||
|
||||
class RuntimeHeader {
|
||||
static const int majorVersion = 2;
|
||||
static const int majorVersion = 3;
|
||||
static const int minorVersion = 0;
|
||||
static const String fingerprint = 'RIVE';
|
||||
final int ownerId;
|
||||
|
@ -1,10 +1,9 @@
|
||||
import 'package:rive/src/rive_core/math/circle_constant.dart';
|
||||
import 'package:rive/src/rive_core/shapes/cubic_detached_vertex.dart';
|
||||
import 'package:rive/src/rive_core/shapes/path_vertex.dart';
|
||||
import 'package:rive/src/generated/shapes/ellipse_base.dart';
|
||||
export 'package:rive/src/generated/shapes/ellipse_base.dart';
|
||||
|
||||
const double circleConstant = 0.55;
|
||||
|
||||
class Ellipse extends EllipseBase {
|
||||
@override
|
||||
List<PathVertex> get vertices => [
|
||||
|
@ -3,6 +3,7 @@ import 'dart:ui' as ui;
|
||||
import 'package:rive/src/rive_core/component.dart';
|
||||
import 'package:rive/src/rive_core/component_dirt.dart';
|
||||
import 'package:rive/src/rive_core/math/aabb.dart';
|
||||
import 'package:rive/src/rive_core/math/circle_constant.dart';
|
||||
import 'package:rive/src/rive_core/math/mat2d.dart';
|
||||
import 'package:rive/src/rive_core/math/vec2d.dart';
|
||||
import 'package:rive/src/rive_core/shapes/cubic_vertex.dart';
|
||||
@ -98,7 +99,7 @@ abstract class Path extends PathBase {
|
||||
}
|
||||
List<PathVertex> renderPoints = [];
|
||||
int pl = pts.length;
|
||||
const double arcConstant = 0.55;
|
||||
const arcConstant = circleConstant;
|
||||
const double iarcConstant = 1.0 - arcConstant;
|
||||
PathVertex previous = isClosed ? pts[pl - 1] : null;
|
||||
for (int i = 0; i < pl; i++) {
|
||||
|
@ -99,7 +99,7 @@ class RiveFile {
|
||||
int numValues = reader.readVarUint();
|
||||
for (int m = 0; m < numValues; m++) {
|
||||
var valueObject = KeyFrameDrawOrderValue();
|
||||
valueObject.drawableId = reader.readVarInt();
|
||||
valueObject.drawableId = reader.readVarUint();
|
||||
valueObject.value = m;
|
||||
keyframe.internalAddValue(valueObject);
|
||||
}
|
||||
@ -153,30 +153,15 @@ T readRuntimeObject<T extends Core<CoreContext>>(BinaryReader reader,
|
||||
// Terminator. https://media.giphy.com/media/7TtvTUMm9mp20/giphy.gif
|
||||
break;
|
||||
}
|
||||
int propertyLength = reader.readVarUint();
|
||||
Uint8List valueBytes = reader.read(propertyLength);
|
||||
|
||||
var fieldType = RiveCoreContext.coreType(propertyKey);
|
||||
if (fieldType == null) {
|
||||
// This is considered an acceptable failure. A runtime may not support
|
||||
// the same properties that were exported. The older object could still
|
||||
// function without them, however, so it's up to the implementation to
|
||||
// make sure that major versions are revved when breaking properties are
|
||||
// added. Note that we intentionally first read the entire value bytes
|
||||
// for the property so we can advance as expected even if we are
|
||||
// skipping this value.
|
||||
continue;
|
||||
throw UnsupportedError('Unsupported property key $propertyKey. '
|
||||
'A new runtime is likely necessary to play this file.');
|
||||
}
|
||||
|
||||
// We know what to expect, let's try to read the value. We instance a new
|
||||
// reader here so that we don't overflow the exact length we're allowed to
|
||||
// read.
|
||||
var valueReader = BinaryReader.fromList(valueBytes);
|
||||
|
||||
// This will attempt to set the object property, but failure here is
|
||||
// acceptable.
|
||||
RiveCoreContext.setObjectProperty(
|
||||
object, propertyKey, fieldType.deserialize(valueReader));
|
||||
object, propertyKey, fieldType.deserialize(reader));
|
||||
}
|
||||
return object as T;
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ class BinaryReader {
|
||||
final ByteData buffer;
|
||||
final Endian endian;
|
||||
int _readIndex = 0;
|
||||
int get position => _readIndex;
|
||||
|
||||
BinaryReader(this.buffer, {this.endian = Endian.little});
|
||||
|
||||
|
@ -73,7 +73,7 @@ packages:
|
||||
name: matcher
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.12.9"
|
||||
version: "0.12.8"
|
||||
meta:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -134,7 +134,7 @@ packages:
|
||||
name: test_api
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.2.18"
|
||||
version: "0.2.17"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1,6 +1,6 @@
|
||||
name: rive
|
||||
description: Rive 2 Flutter Runtime
|
||||
version: 0.0.3
|
||||
version: 0.0.4
|
||||
repository: https://github.com/rive-app/rive-flutter
|
||||
homepage: https://rive.app
|
||||
|
||||
|
Reference in New Issue
Block a user