Bumping to version 4 with first cut of bones.

This commit is contained in:
Luigi Rosso
2020-08-12 18:07:02 -07:00
parent a401bd8abf
commit 37f0ac9ada
24 changed files with 573 additions and 267 deletions

Binary file not shown.

View File

@ -0,0 +1,41 @@
/// Core automatically generated lib/src/generated/bones/bone_base.dart.
/// Do not modify manually.
import 'package:rive/src/generated/bones/skeletal_component_base.dart';
import 'package:rive/src/generated/component_base.dart';
import 'package:rive/src/generated/container_component_base.dart';
import 'package:rive/src/generated/transform_component_base.dart';
import 'package:rive/src/rive_core/bones/skeletal_component.dart';
abstract class BoneBase extends SkeletalComponent {
static const int typeKey = 40;
@override
int get coreType => BoneBase.typeKey;
@override
Set<int> get coreTypes => {
BoneBase.typeKey,
SkeletalComponentBase.typeKey,
TransformComponentBase.typeKey,
ContainerComponentBase.typeKey,
ComponentBase.typeKey
};
/// --------------------------------------------------------------------------
/// Length field with key 89.
double _length = 0;
static const int lengthPropertyKey = 89;
double get length => _length;
/// Change the [_length] field value.
/// [lengthChanged] will be invoked only if the field's value has changed.
set length(double value) {
if (_length == value) {
return;
}
double from = _length;
_length = value;
lengthChanged(from, value);
}
void lengthChanged(double from, double to);
}

View File

@ -0,0 +1,66 @@
/// Core automatically generated lib/src/generated/bones/root_bone_base.dart.
/// Do not modify manually.
import 'package:rive/src/generated/bones/bone_base.dart';
import 'package:rive/src/generated/bones/skeletal_component_base.dart';
import 'package:rive/src/generated/component_base.dart';
import 'package:rive/src/generated/container_component_base.dart';
import 'package:rive/src/generated/transform_component_base.dart';
import 'package:rive/src/rive_core/bones/bone.dart';
abstract class RootBoneBase extends Bone {
static const int typeKey = 41;
@override
int get coreType => RootBoneBase.typeKey;
@override
Set<int> get coreTypes => {
RootBoneBase.typeKey,
BoneBase.typeKey,
SkeletalComponentBase.typeKey,
TransformComponentBase.typeKey,
ContainerComponentBase.typeKey,
ComponentBase.typeKey
};
/// --------------------------------------------------------------------------
/// X field with key 90.
double _x = 0;
static const int xPropertyKey = 90;
@override
double get x => _x;
/// Change the [_x] field value.
/// [xChanged] will be invoked only if the field's value has changed.
@override
set x(double value) {
if (_x == value) {
return;
}
double from = _x;
_x = value;
xChanged(from, value);
}
void xChanged(double from, double to);
/// --------------------------------------------------------------------------
/// Y field with key 91.
double _y = 0;
static const int yPropertyKey = 91;
@override
double get y => _y;
/// Change the [_y] field value.
/// [yChanged] will be invoked only if the field's value has changed.
@override
set y(double value) {
if (_y == value) {
return;
}
double from = _y;
_y = value;
yChanged(from, value);
}
void yChanged(double from, double to);
}

View File

@ -0,0 +1,21 @@
/// Core automatically generated
/// lib/src/generated/bones/skeletal_component_base.dart.
/// Do not modify manually.
import 'package:rive/src/generated/component_base.dart';
import 'package:rive/src/generated/container_component_base.dart';
import 'package:rive/src/generated/transform_component_base.dart';
import 'package:rive/src/rive_core/transform_component.dart';
abstract class SkeletalComponentBase extends TransformComponent {
static const int typeKey = 39;
@override
int get coreType => SkeletalComponentBase.typeKey;
@override
Set<int> get coreTypes => {
SkeletalComponentBase.typeKey,
TransformComponentBase.typeKey,
ContainerComponentBase.typeKey,
ComponentBase.typeKey
};
}

View File

@ -4,6 +4,7 @@
import 'package:rive/src/generated/component_base.dart'; import 'package:rive/src/generated/component_base.dart';
import 'package:rive/src/generated/container_component_base.dart'; import 'package:rive/src/generated/container_component_base.dart';
import 'package:rive/src/generated/node_base.dart'; import 'package:rive/src/generated/node_base.dart';
import 'package:rive/src/generated/transform_component_base.dart';
import 'package:rive/src/rive_core/node.dart'; import 'package:rive/src/rive_core/node.dart';
abstract class DrawableBase extends Node { abstract class DrawableBase extends Node {
@ -14,6 +15,7 @@ abstract class DrawableBase extends Node {
Set<int> get coreTypes => { Set<int> get coreTypes => {
DrawableBase.typeKey, DrawableBase.typeKey,
NodeBase.typeKey, NodeBase.typeKey,
TransformComponentBase.typeKey,
ContainerComponentBase.typeKey, ContainerComponentBase.typeKey,
ComponentBase.typeKey ComponentBase.typeKey
}; };

View File

@ -3,24 +3,31 @@
import 'package:rive/src/generated/component_base.dart'; import 'package:rive/src/generated/component_base.dart';
import 'package:rive/src/generated/container_component_base.dart'; import 'package:rive/src/generated/container_component_base.dart';
import 'package:rive/src/rive_core/container_component.dart'; import 'package:rive/src/generated/transform_component_base.dart';
import 'package:rive/src/rive_core/transform_component.dart';
abstract class NodeBase extends ContainerComponent { abstract class NodeBase extends TransformComponent {
static const int typeKey = 2; static const int typeKey = 2;
@override @override
int get coreType => NodeBase.typeKey; int get coreType => NodeBase.typeKey;
@override @override
Set<int> get coreTypes => Set<int> get coreTypes => {
{NodeBase.typeKey, ContainerComponentBase.typeKey, ComponentBase.typeKey}; NodeBase.typeKey,
TransformComponentBase.typeKey,
ContainerComponentBase.typeKey,
ComponentBase.typeKey
};
/// -------------------------------------------------------------------------- /// --------------------------------------------------------------------------
/// X field with key 13. /// X field with key 13.
double _x = 0; double _x = 0;
static const int xPropertyKey = 13; static const int xPropertyKey = 13;
@override
double get x => _x; double get x => _x;
/// Change the [_x] field value. /// Change the [_x] field value.
/// [xChanged] will be invoked only if the field's value has changed. /// [xChanged] will be invoked only if the field's value has changed.
@override
set x(double value) { set x(double value) {
if (_x == value) { if (_x == value) {
return; return;
@ -36,10 +43,12 @@ abstract class NodeBase extends ContainerComponent {
/// Y field with key 14. /// Y field with key 14.
double _y = 0; double _y = 0;
static const int yPropertyKey = 14; static const int yPropertyKey = 14;
@override
double get y => _y; double get y => _y;
/// Change the [_y] field value. /// Change the [_y] field value.
/// [yChanged] will be invoked only if the field's value has changed. /// [yChanged] will be invoked only if the field's value has changed.
@override
set y(double value) { set y(double value) {
if (_y == value) { if (_y == value) {
return; return;
@ -50,80 +59,4 @@ abstract class NodeBase extends ContainerComponent {
} }
void yChanged(double from, double to); void yChanged(double from, double to);
/// --------------------------------------------------------------------------
/// Rotation field with key 15.
double _rotation = 0;
static const int rotationPropertyKey = 15;
double get rotation => _rotation;
/// Change the [_rotation] field value.
/// [rotationChanged] will be invoked only if the field's value has changed.
set rotation(double value) {
if (_rotation == value) {
return;
}
double from = _rotation;
_rotation = value;
rotationChanged(from, value);
}
void rotationChanged(double from, double to);
/// --------------------------------------------------------------------------
/// ScaleX field with key 16.
double _scaleX = 1;
static const int scaleXPropertyKey = 16;
double get scaleX => _scaleX;
/// Change the [_scaleX] field value.
/// [scaleXChanged] will be invoked only if the field's value has changed.
set scaleX(double value) {
if (_scaleX == value) {
return;
}
double from = _scaleX;
_scaleX = value;
scaleXChanged(from, value);
}
void scaleXChanged(double from, double to);
/// --------------------------------------------------------------------------
/// ScaleY field with key 17.
double _scaleY = 1;
static const int scaleYPropertyKey = 17;
double get scaleY => _scaleY;
/// Change the [_scaleY] field value.
/// [scaleYChanged] will be invoked only if the field's value has changed.
set scaleY(double value) {
if (_scaleY == value) {
return;
}
double from = _scaleY;
_scaleY = value;
scaleYChanged(from, value);
}
void scaleYChanged(double from, double to);
/// --------------------------------------------------------------------------
/// Opacity field with key 18.
double _opacity = 1;
static const int opacityPropertyKey = 18;
double get opacity => _opacity;
/// Change the [_opacity] field value.
/// [opacityChanged] will be invoked only if the field's value has changed.
set opacity(double value) {
if (_opacity == value) {
return;
}
double from = _opacity;
_opacity = value;
opacityChanged(from, value);
}
void opacityChanged(double from, double to);
} }

View File

@ -17,6 +17,8 @@ import 'package:rive/src/generated/animation/keyframe_draw_order_value_base.dart
import 'package:rive/src/generated/animation/linear_animation_base.dart'; import 'package:rive/src/generated/animation/linear_animation_base.dart';
import 'package:rive/src/generated/artboard_base.dart'; import 'package:rive/src/generated/artboard_base.dart';
import 'package:rive/src/generated/backboard_base.dart'; import 'package:rive/src/generated/backboard_base.dart';
import 'package:rive/src/generated/bones/bone_base.dart';
import 'package:rive/src/generated/bones/root_bone_base.dart';
import 'package:rive/src/generated/component_base.dart'; import 'package:rive/src/generated/component_base.dart';
import 'package:rive/src/generated/drawable_base.dart'; import 'package:rive/src/generated/drawable_base.dart';
import 'package:rive/src/generated/node_base.dart'; import 'package:rive/src/generated/node_base.dart';
@ -39,6 +41,7 @@ import 'package:rive/src/generated/shapes/rectangle_base.dart';
import 'package:rive/src/generated/shapes/shape_base.dart'; import 'package:rive/src/generated/shapes/shape_base.dart';
import 'package:rive/src/generated/shapes/straight_vertex_base.dart'; import 'package:rive/src/generated/shapes/straight_vertex_base.dart';
import 'package:rive/src/generated/shapes/triangle_base.dart'; import 'package:rive/src/generated/shapes/triangle_base.dart';
import 'package:rive/src/generated/transform_component_base.dart';
import 'package:rive/src/rive_core/animation/animation.dart'; import 'package:rive/src/rive_core/animation/animation.dart';
import 'package:rive/src/rive_core/animation/cubic_interpolator.dart'; import 'package:rive/src/rive_core/animation/cubic_interpolator.dart';
import 'package:rive/src/rive_core/animation/keyed_object.dart'; import 'package:rive/src/rive_core/animation/keyed_object.dart';
@ -50,6 +53,8 @@ import 'package:rive/src/rive_core/animation/keyframe_draw_order_value.dart';
import 'package:rive/src/rive_core/animation/linear_animation.dart'; import 'package:rive/src/rive_core/animation/linear_animation.dart';
import 'package:rive/src/rive_core/artboard.dart'; import 'package:rive/src/rive_core/artboard.dart';
import 'package:rive/src/rive_core/backboard.dart'; import 'package:rive/src/rive_core/backboard.dart';
import 'package:rive/src/rive_core/bones/bone.dart';
import 'package:rive/src/rive_core/bones/root_bone.dart';
import 'package:rive/src/rive_core/node.dart'; import 'package:rive/src/rive_core/node.dart';
import 'package:rive/src/rive_core/shapes/cubic_asymmetric_vertex.dart'; import 'package:rive/src/rive_core/shapes/cubic_asymmetric_vertex.dart';
import 'package:rive/src/rive_core/shapes/cubic_detached_vertex.dart'; import 'package:rive/src/rive_core/shapes/cubic_detached_vertex.dart';
@ -128,6 +133,10 @@ class RiveCoreContext {
return Artboard(); return Artboard();
case BackboardBase.typeKey: case BackboardBase.typeKey:
return Backboard(); return Backboard();
case BoneBase.typeKey:
return Bone();
case RootBoneBase.typeKey:
return RootBone();
default: default:
return null; return null;
} }
@ -324,6 +333,26 @@ class RiveCoreContext {
object.fillRule = value; object.fillRule = value;
} }
break; break;
case TransformComponentBase.rotationPropertyKey:
if (object is TransformComponentBase && value is double) {
object.rotation = value;
}
break;
case TransformComponentBase.scaleXPropertyKey:
if (object is TransformComponentBase && value is double) {
object.scaleX = value;
}
break;
case TransformComponentBase.scaleYPropertyKey:
if (object is TransformComponentBase && value is double) {
object.scaleY = value;
}
break;
case TransformComponentBase.opacityPropertyKey:
if (object is TransformComponentBase && value is double) {
object.opacity = value;
}
break;
case NodeBase.xPropertyKey: case NodeBase.xPropertyKey:
if (object is NodeBase && value is double) { if (object is NodeBase && value is double) {
object.x = value; object.x = value;
@ -334,26 +363,6 @@ class RiveCoreContext {
object.y = value; object.y = value;
} }
break; break;
case NodeBase.rotationPropertyKey:
if (object is NodeBase && value is double) {
object.rotation = value;
}
break;
case NodeBase.scaleXPropertyKey:
if (object is NodeBase && value is double) {
object.scaleX = value;
}
break;
case NodeBase.scaleYPropertyKey:
if (object is NodeBase && value is double) {
object.scaleY = value;
}
break;
case NodeBase.opacityPropertyKey:
if (object is NodeBase && value is double) {
object.opacity = value;
}
break;
case DrawableBase.drawOrderPropertyKey: case DrawableBase.drawOrderPropertyKey:
if (object is DrawableBase && value is int) { if (object is DrawableBase && value is int) {
object.drawOrder = value; object.drawOrder = value;
@ -474,6 +483,21 @@ class RiveCoreContext {
object.originY = value; object.originY = value;
} }
break; break;
case BoneBase.lengthPropertyKey:
if (object is BoneBase && value is double) {
object.length = value;
}
break;
case RootBoneBase.xPropertyKey:
if (object is RootBoneBase && value is double) {
object.x = value;
}
break;
case RootBoneBase.yPropertyKey:
if (object is RootBoneBase && value is double) {
object.y = value;
}
break;
} }
} }
@ -519,12 +543,12 @@ class RiveCoreContext {
case LinearGradientBase.opacityPropertyKey: case LinearGradientBase.opacityPropertyKey:
case StrokeBase.thicknessPropertyKey: case StrokeBase.thicknessPropertyKey:
case GradientStopBase.positionPropertyKey: case GradientStopBase.positionPropertyKey:
case TransformComponentBase.rotationPropertyKey:
case TransformComponentBase.scaleXPropertyKey:
case TransformComponentBase.scaleYPropertyKey:
case TransformComponentBase.opacityPropertyKey:
case NodeBase.xPropertyKey: case NodeBase.xPropertyKey:
case NodeBase.yPropertyKey: case NodeBase.yPropertyKey:
case NodeBase.rotationPropertyKey:
case NodeBase.scaleXPropertyKey:
case NodeBase.scaleYPropertyKey:
case NodeBase.opacityPropertyKey:
case PathVertexBase.xPropertyKey: case PathVertexBase.xPropertyKey:
case PathVertexBase.yPropertyKey: case PathVertexBase.yPropertyKey:
case StraightVertexBase.radiusPropertyKey: case StraightVertexBase.radiusPropertyKey:
@ -546,6 +570,9 @@ class RiveCoreContext {
case ArtboardBase.yPropertyKey: case ArtboardBase.yPropertyKey:
case ArtboardBase.originXPropertyKey: case ArtboardBase.originXPropertyKey:
case ArtboardBase.originYPropertyKey: case ArtboardBase.originYPropertyKey:
case BoneBase.lengthPropertyKey:
case RootBoneBase.xPropertyKey:
case RootBoneBase.yPropertyKey:
return doubleType; return doubleType;
case KeyFrameColorBase.valuePropertyKey: case KeyFrameColorBase.valuePropertyKey:
case SolidColorBase.colorValuePropertyKey: case SolidColorBase.colorValuePropertyKey:
@ -641,18 +668,18 @@ class RiveCoreContext {
return (object as StrokeBase).thickness; return (object as StrokeBase).thickness;
case GradientStopBase.positionPropertyKey: case GradientStopBase.positionPropertyKey:
return (object as GradientStopBase).position; return (object as GradientStopBase).position;
case TransformComponentBase.rotationPropertyKey:
return (object as TransformComponentBase).rotation;
case TransformComponentBase.scaleXPropertyKey:
return (object as TransformComponentBase).scaleX;
case TransformComponentBase.scaleYPropertyKey:
return (object as TransformComponentBase).scaleY;
case TransformComponentBase.opacityPropertyKey:
return (object as TransformComponentBase).opacity;
case NodeBase.xPropertyKey: case NodeBase.xPropertyKey:
return (object as NodeBase).x; return (object as NodeBase).x;
case NodeBase.yPropertyKey: case NodeBase.yPropertyKey:
return (object as NodeBase).y; return (object as NodeBase).y;
case NodeBase.rotationPropertyKey:
return (object as NodeBase).rotation;
case NodeBase.scaleXPropertyKey:
return (object as NodeBase).scaleX;
case NodeBase.scaleYPropertyKey:
return (object as NodeBase).scaleY;
case NodeBase.opacityPropertyKey:
return (object as NodeBase).opacity;
case PathVertexBase.xPropertyKey: case PathVertexBase.xPropertyKey:
return (object as PathVertexBase).x; return (object as PathVertexBase).x;
case PathVertexBase.yPropertyKey: case PathVertexBase.yPropertyKey:
@ -695,6 +722,12 @@ class RiveCoreContext {
return (object as ArtboardBase).originX; return (object as ArtboardBase).originX;
case ArtboardBase.originYPropertyKey: case ArtboardBase.originYPropertyKey:
return (object as ArtboardBase).originY; return (object as ArtboardBase).originY;
case BoneBase.lengthPropertyKey:
return (object as BoneBase).length;
case RootBoneBase.xPropertyKey:
return (object as RootBoneBase).x;
case RootBoneBase.yPropertyKey:
return (object as RootBoneBase).y;
} }
return 0.0; return 0.0;
} }
@ -836,24 +869,24 @@ class RiveCoreContext {
case GradientStopBase.positionPropertyKey: case GradientStopBase.positionPropertyKey:
(object as GradientStopBase).position = value; (object as GradientStopBase).position = value;
break; break;
case TransformComponentBase.rotationPropertyKey:
(object as TransformComponentBase).rotation = value;
break;
case TransformComponentBase.scaleXPropertyKey:
(object as TransformComponentBase).scaleX = value;
break;
case TransformComponentBase.scaleYPropertyKey:
(object as TransformComponentBase).scaleY = value;
break;
case TransformComponentBase.opacityPropertyKey:
(object as TransformComponentBase).opacity = value;
break;
case NodeBase.xPropertyKey: case NodeBase.xPropertyKey:
(object as NodeBase).x = value; (object as NodeBase).x = value;
break; break;
case NodeBase.yPropertyKey: case NodeBase.yPropertyKey:
(object as NodeBase).y = value; (object as NodeBase).y = value;
break; break;
case NodeBase.rotationPropertyKey:
(object as NodeBase).rotation = value;
break;
case NodeBase.scaleXPropertyKey:
(object as NodeBase).scaleX = value;
break;
case NodeBase.scaleYPropertyKey:
(object as NodeBase).scaleY = value;
break;
case NodeBase.opacityPropertyKey:
(object as NodeBase).opacity = value;
break;
case PathVertexBase.xPropertyKey: case PathVertexBase.xPropertyKey:
(object as PathVertexBase).x = value; (object as PathVertexBase).x = value;
break; break;
@ -917,6 +950,15 @@ class RiveCoreContext {
case ArtboardBase.originYPropertyKey: case ArtboardBase.originYPropertyKey:
(object as ArtboardBase).originY = value; (object as ArtboardBase).originY = value;
break; break;
case BoneBase.lengthPropertyKey:
(object as BoneBase).length = value;
break;
case RootBoneBase.xPropertyKey:
(object as RootBoneBase).x = value;
break;
case RootBoneBase.yPropertyKey:
(object as RootBoneBase).y = value;
break;
} }
} }

View File

@ -6,6 +6,7 @@ import 'package:rive/src/generated/container_component_base.dart';
import 'package:rive/src/generated/node_base.dart'; import 'package:rive/src/generated/node_base.dart';
import 'package:rive/src/generated/shapes/parametric_path_base.dart'; import 'package:rive/src/generated/shapes/parametric_path_base.dart';
import 'package:rive/src/generated/shapes/path_base.dart'; import 'package:rive/src/generated/shapes/path_base.dart';
import 'package:rive/src/generated/transform_component_base.dart';
import 'package:rive/src/rive_core/shapes/parametric_path.dart'; import 'package:rive/src/rive_core/shapes/parametric_path.dart';
abstract class EllipseBase extends ParametricPath { abstract class EllipseBase extends ParametricPath {
@ -18,6 +19,7 @@ abstract class EllipseBase extends ParametricPath {
ParametricPathBase.typeKey, ParametricPathBase.typeKey,
PathBase.typeKey, PathBase.typeKey,
NodeBase.typeKey, NodeBase.typeKey,
TransformComponentBase.typeKey,
ContainerComponentBase.typeKey, ContainerComponentBase.typeKey,
ComponentBase.typeKey ComponentBase.typeKey
}; };

View File

@ -6,6 +6,7 @@ import 'package:rive/src/generated/component_base.dart';
import 'package:rive/src/generated/container_component_base.dart'; import 'package:rive/src/generated/container_component_base.dart';
import 'package:rive/src/generated/node_base.dart'; import 'package:rive/src/generated/node_base.dart';
import 'package:rive/src/generated/shapes/path_base.dart'; import 'package:rive/src/generated/shapes/path_base.dart';
import 'package:rive/src/generated/transform_component_base.dart';
import 'package:rive/src/rive_core/shapes/path.dart'; import 'package:rive/src/rive_core/shapes/path.dart';
abstract class ParametricPathBase extends Path { abstract class ParametricPathBase extends Path {
@ -17,6 +18,7 @@ abstract class ParametricPathBase extends Path {
ParametricPathBase.typeKey, ParametricPathBase.typeKey,
PathBase.typeKey, PathBase.typeKey,
NodeBase.typeKey, NodeBase.typeKey,
TransformComponentBase.typeKey,
ContainerComponentBase.typeKey, ContainerComponentBase.typeKey,
ComponentBase.typeKey ComponentBase.typeKey
}; };

View File

@ -4,6 +4,7 @@
import 'package:rive/src/generated/component_base.dart'; import 'package:rive/src/generated/component_base.dart';
import 'package:rive/src/generated/container_component_base.dart'; import 'package:rive/src/generated/container_component_base.dart';
import 'package:rive/src/generated/node_base.dart'; import 'package:rive/src/generated/node_base.dart';
import 'package:rive/src/generated/transform_component_base.dart';
import 'package:rive/src/rive_core/node.dart'; import 'package:rive/src/rive_core/node.dart';
abstract class PathBase extends Node { abstract class PathBase extends Node {
@ -14,6 +15,7 @@ abstract class PathBase extends Node {
Set<int> get coreTypes => { Set<int> get coreTypes => {
PathBase.typeKey, PathBase.typeKey,
NodeBase.typeKey, NodeBase.typeKey,
TransformComponentBase.typeKey,
ContainerComponentBase.typeKey, ContainerComponentBase.typeKey,
ComponentBase.typeKey ComponentBase.typeKey
}; };

View File

@ -5,6 +5,7 @@ import 'package:rive/src/generated/component_base.dart';
import 'package:rive/src/generated/container_component_base.dart'; import 'package:rive/src/generated/container_component_base.dart';
import 'package:rive/src/generated/node_base.dart'; import 'package:rive/src/generated/node_base.dart';
import 'package:rive/src/generated/shapes/path_base.dart'; import 'package:rive/src/generated/shapes/path_base.dart';
import 'package:rive/src/generated/transform_component_base.dart';
import 'package:rive/src/rive_core/shapes/path.dart'; import 'package:rive/src/rive_core/shapes/path.dart';
abstract class PointsPathBase extends Path { abstract class PointsPathBase extends Path {
@ -16,6 +17,7 @@ abstract class PointsPathBase extends Path {
PointsPathBase.typeKey, PointsPathBase.typeKey,
PathBase.typeKey, PathBase.typeKey,
NodeBase.typeKey, NodeBase.typeKey,
TransformComponentBase.typeKey,
ContainerComponentBase.typeKey, ContainerComponentBase.typeKey,
ComponentBase.typeKey ComponentBase.typeKey
}; };

View File

@ -6,6 +6,7 @@ import 'package:rive/src/generated/container_component_base.dart';
import 'package:rive/src/generated/node_base.dart'; import 'package:rive/src/generated/node_base.dart';
import 'package:rive/src/generated/shapes/parametric_path_base.dart'; import 'package:rive/src/generated/shapes/parametric_path_base.dart';
import 'package:rive/src/generated/shapes/path_base.dart'; import 'package:rive/src/generated/shapes/path_base.dart';
import 'package:rive/src/generated/transform_component_base.dart';
import 'package:rive/src/rive_core/shapes/parametric_path.dart'; import 'package:rive/src/rive_core/shapes/parametric_path.dart';
abstract class RectangleBase extends ParametricPath { abstract class RectangleBase extends ParametricPath {
@ -18,6 +19,7 @@ abstract class RectangleBase extends ParametricPath {
ParametricPathBase.typeKey, ParametricPathBase.typeKey,
PathBase.typeKey, PathBase.typeKey,
NodeBase.typeKey, NodeBase.typeKey,
TransformComponentBase.typeKey,
ContainerComponentBase.typeKey, ContainerComponentBase.typeKey,
ComponentBase.typeKey ComponentBase.typeKey
}; };

View File

@ -5,6 +5,7 @@ import 'package:rive/src/generated/component_base.dart';
import 'package:rive/src/generated/container_component_base.dart'; import 'package:rive/src/generated/container_component_base.dart';
import 'package:rive/src/generated/drawable_base.dart'; import 'package:rive/src/generated/drawable_base.dart';
import 'package:rive/src/generated/node_base.dart'; import 'package:rive/src/generated/node_base.dart';
import 'package:rive/src/generated/transform_component_base.dart';
import 'package:rive/src/rive_core/drawable.dart'; import 'package:rive/src/rive_core/drawable.dart';
abstract class ShapeBase extends Drawable { abstract class ShapeBase extends Drawable {
@ -16,6 +17,7 @@ abstract class ShapeBase extends Drawable {
ShapeBase.typeKey, ShapeBase.typeKey,
DrawableBase.typeKey, DrawableBase.typeKey,
NodeBase.typeKey, NodeBase.typeKey,
TransformComponentBase.typeKey,
ContainerComponentBase.typeKey, ContainerComponentBase.typeKey,
ComponentBase.typeKey ComponentBase.typeKey
}; };

View File

@ -6,6 +6,7 @@ import 'package:rive/src/generated/container_component_base.dart';
import 'package:rive/src/generated/node_base.dart'; import 'package:rive/src/generated/node_base.dart';
import 'package:rive/src/generated/shapes/parametric_path_base.dart'; import 'package:rive/src/generated/shapes/parametric_path_base.dart';
import 'package:rive/src/generated/shapes/path_base.dart'; import 'package:rive/src/generated/shapes/path_base.dart';
import 'package:rive/src/generated/transform_component_base.dart';
import 'package:rive/src/rive_core/shapes/parametric_path.dart'; import 'package:rive/src/rive_core/shapes/parametric_path.dart';
abstract class TriangleBase extends ParametricPath { abstract class TriangleBase extends ParametricPath {
@ -18,6 +19,7 @@ abstract class TriangleBase extends ParametricPath {
ParametricPathBase.typeKey, ParametricPathBase.typeKey,
PathBase.typeKey, PathBase.typeKey,
NodeBase.typeKey, NodeBase.typeKey,
TransformComponentBase.typeKey,
ContainerComponentBase.typeKey, ContainerComponentBase.typeKey,
ComponentBase.typeKey ComponentBase.typeKey
}; };

View File

@ -0,0 +1,95 @@
/// Core automatically generated
/// lib/src/generated/transform_component_base.dart.
/// Do not modify manually.
import 'package:rive/src/generated/component_base.dart';
import 'package:rive/src/generated/container_component_base.dart';
import 'package:rive/src/rive_core/container_component.dart';
abstract class TransformComponentBase extends ContainerComponent {
static const int typeKey = 38;
@override
int get coreType => TransformComponentBase.typeKey;
@override
Set<int> get coreTypes => {
TransformComponentBase.typeKey,
ContainerComponentBase.typeKey,
ComponentBase.typeKey
};
/// --------------------------------------------------------------------------
/// Rotation field with key 15.
double _rotation = 0;
static const int rotationPropertyKey = 15;
double get rotation => _rotation;
/// Change the [_rotation] field value.
/// [rotationChanged] will be invoked only if the field's value has changed.
set rotation(double value) {
if (_rotation == value) {
return;
}
double from = _rotation;
_rotation = value;
rotationChanged(from, value);
}
void rotationChanged(double from, double to);
/// --------------------------------------------------------------------------
/// ScaleX field with key 16.
double _scaleX = 1;
static const int scaleXPropertyKey = 16;
double get scaleX => _scaleX;
/// Change the [_scaleX] field value.
/// [scaleXChanged] will be invoked only if the field's value has changed.
set scaleX(double value) {
if (_scaleX == value) {
return;
}
double from = _scaleX;
_scaleX = value;
scaleXChanged(from, value);
}
void scaleXChanged(double from, double to);
/// --------------------------------------------------------------------------
/// ScaleY field with key 17.
double _scaleY = 1;
static const int scaleYPropertyKey = 17;
double get scaleY => _scaleY;
/// Change the [_scaleY] field value.
/// [scaleYChanged] will be invoked only if the field's value has changed.
set scaleY(double value) {
if (_scaleY == value) {
return;
}
double from = _scaleY;
_scaleY = value;
scaleYChanged(from, value);
}
void scaleYChanged(double from, double to);
/// --------------------------------------------------------------------------
/// Opacity field with key 18.
double _opacity = 1;
static const int opacityPropertyKey = 18;
double get opacity => _opacity;
/// Change the [_opacity] field value.
/// [opacityChanged] will be invoked only if the field's value has changed.
set opacity(double value) {
if (_opacity == value) {
return;
}
double from = _opacity;
_opacity = value;
opacityChanged(from, value);
}
void opacityChanged(double from, double to);
}

View File

@ -0,0 +1,49 @@
import 'package:rive/src/generated/bones/bone_base.dart';
export 'package:rive/src/generated/bones/bone_base.dart';
typedef bool BoneCallback(Bone bone);
class Bone extends BoneBase {
@override
void lengthChanged(double from, double to) {
for (final child in children) {
if (child.coreType == BoneBase.typeKey) {
(child as Bone).markTransformDirty();
}
}
}
Bone get firstChildBone {
for (final child in children) {
if (child.coreType == BoneBase.typeKey) {
return child as Bone;
}
}
return null;
}
bool forEachBone(BoneCallback callback) {
for (final child in children) {
if (child.coreType == BoneBase.typeKey) {
if (!callback(child as Bone)) {
return false;
}
}
}
return true;
}
@override
double get x => (parent as Bone).length;
@override
set x(double value) {
throw UnsupportedError('not expected to set x on a bone.');
}
@override
double get y => 0;
@override
set y(double value) {
throw UnsupportedError('not expected to set y on a bone.');
}
}

View File

@ -0,0 +1,14 @@
import 'package:rive/src/generated/bones/root_bone_base.dart';
export 'package:rive/src/generated/bones/root_bone_base.dart';
class RootBone extends RootBoneBase {
@override
void xChanged(double from, double to) {
markTransformDirty();
}
@override
void yChanged(double from, double to) {
markTransformDirty();
}
}

View File

@ -0,0 +1,4 @@
import 'package:rive/src/generated/bones/skeletal_component_base.dart';
export 'package:rive/src/generated/bones/skeletal_component_base.dart';
abstract class SkeletalComponent extends SkeletalComponentBase {}

View File

@ -48,8 +48,13 @@ class AABB {
var transformedPoint = transform == null var transformedPoint = transform == null
? point ? point
: Vec2D.transformMat2D(Vec2D(), point, transform); : Vec2D.transformMat2D(Vec2D(), point, transform);
var x = transformedPoint[0]; expandToPoint(transformedPoint);
var y = transformedPoint[1]; return transformedPoint;
}
void expandToPoint(Vec2D point) {
var x = point[0];
var y = point[1];
if (x < _buffer[0]) { if (x < _buffer[0]) {
_buffer[0] = x; _buffer[0] = x;
} }
@ -62,7 +67,6 @@ class AABB {
if (y > _buffer[3]) { if (y > _buffer[3]) {
_buffer[3] = y; _buffer[3] = y;
} }
return transformedPoint;
} }
AABB.fromMinMax(Vec2D min, Vec2D max) { AABB.fromMinMax(Vec2D min, Vec2D max) {

View File

@ -1,98 +1,14 @@
import 'package:flutter/foundation.dart';
import 'package:rive/src/rive_core/component_dirt.dart';
import 'package:rive/src/rive_core/container_component.dart';
import 'package:rive/src/rive_core/math/aabb.dart'; import 'package:rive/src/rive_core/math/aabb.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/math/vec2d.dart';
import 'package:rive/src/generated/node_base.dart'; import 'package:rive/src/generated/node_base.dart';
import 'package:meta/meta.dart';
export 'package:rive/src/generated/node_base.dart'; export 'package:rive/src/generated/node_base.dart';
class Node extends NodeBase { class Node extends NodeBase {
final Mat2D transform = Mat2D();
final Mat2D worldTransform = Mat2D();
double _renderOpacity = 0;
double get renderOpacity => _renderOpacity;
@override
void update(int dirt) {
if (dirt & ComponentDirt.transform != 0) {
updateTransform();
}
if (dirt & ComponentDirt.worldTransform != 0) {
updateWorldTransform();
}
}
Vec2D get translation => Vec2D.fromValues(x, y);
Vec2D get worldTranslation =>
Vec2D.fromValues(worldTransform[4], worldTransform[5]);
set translation(Vec2D pos) { set translation(Vec2D pos) {
x = pos[0]; x = pos[0];
y = pos[1]; y = pos[1];
} }
Vec2D get scale => Vec2D.fromValues(scaleX, scaleY);
set scale(Vec2D value) {
scaleX = value[0];
scaleY = value[1];
}
void updateTransform() {
if (rotation != 0) {
Mat2D.fromRotation(transform, rotation);
} else {
Mat2D.identity(transform);
}
transform[4] = x;
transform[5] = y;
Mat2D.scaleByValues(transform, scaleX, scaleY);
}
double get childOpacity => _renderOpacity;
@mustCallSuper
void updateWorldTransform() {
_renderOpacity = opacity;
if (parent is Node) {
var parentNode = parent as Node;
_renderOpacity *= parentNode.childOpacity;
Mat2D.multiply(worldTransform, parentNode.worldTransform, transform);
} else {
Mat2D.copy(worldTransform, transform);
}
}
void calculateWorldTransform() {
var parent = this.parent;
final chain = <Node>[this];
while (parent != null) {
if (parent is Node) {
chain.insert(0, parent);
}
parent = parent.parent;
}
for (final item in chain) {
item.updateTransform();
item.updateWorldTransform();
}
}
@override
void buildDependencies() {
super.buildDependencies();
parent?.addDependent(this);
}
void markTransformDirty() {
if (!addDirt(ComponentDirt.transform)) {
return;
}
markWorldTransformDirty();
}
void markWorldTransformDirty() {
addDirt(ComponentDirt.worldTransform, recurse: true);
}
@override @override
void xChanged(double from, double to) { void xChanged(double from, double to) {
markTransformDirty(); markTransformDirty();
@ -103,31 +19,5 @@ class Node extends NodeBase {
markTransformDirty(); markTransformDirty();
} }
@override
void rotationChanged(double from, double to) {
markTransformDirty();
}
@override
void scaleXChanged(double from, double to) {
markTransformDirty();
}
@override
void scaleYChanged(double from, double to) {
markTransformDirty();
}
@override
void opacityChanged(double from, double to) {
markTransformDirty();
}
@override
void parentChanged(ContainerComponent from, ContainerComponent to) {
super.parentChanged(from, to);
markWorldTransformDirty();
}
AABB get localBounds => AABB.fromValues(x, y, x, y); AABB get localBounds => AABB.fromValues(x, y, x, y);
} }

View File

@ -4,7 +4,7 @@ import 'package:rive/src/utilities/binary_buffer/binary_reader.dart';
import 'exceptions/rive_format_error_exception.dart'; import 'exceptions/rive_format_error_exception.dart';
class RuntimeHeader { class RuntimeHeader {
static const int majorVersion = 3; static const int majorVersion = 4;
static const int minorVersion = 0; static const int minorVersion = 0;
static const String fingerprint = 'RIVE'; static const String fingerprint = 'RIVE';
final int ownerId; final int ownerId;

View File

@ -0,0 +1,118 @@
import 'package:flutter/foundation.dart';
import 'package:rive/src/rive_core/component_dirt.dart';
import 'package:rive/src/rive_core/container_component.dart';
import 'package:rive/src/rive_core/math/mat2d.dart';
import 'package:rive/src/rive_core/math/vec2d.dart';
import 'package:rive/src/generated/transform_component_base.dart';
export 'package:rive/src/generated/transform_component_base.dart';
abstract class TransformComponent extends TransformComponentBase {
double _renderOpacity = 0;
double get renderOpacity => _renderOpacity;
final Mat2D worldTransform = Mat2D();
final Mat2D transform = Mat2D();
Vec2D get translation => Vec2D.fromValues(x, y);
Vec2D get worldTranslation =>
Vec2D.fromValues(worldTransform[4], worldTransform[5]);
double get x;
double get y;
set x(double value);
set y(double value);
@override
void update(int dirt) {
if (dirt & ComponentDirt.transform != 0) {
updateTransform();
}
if (dirt & ComponentDirt.worldTransform != 0) {
updateWorldTransform();
}
}
void updateTransform() {
if (rotation != 0) {
Mat2D.fromRotation(transform, rotation);
} else {
Mat2D.identity(transform);
}
transform[4] = x;
transform[5] = y;
Mat2D.scaleByValues(transform, scaleX, scaleY);
}
double get childOpacity => _renderOpacity;
Vec2D get scale => Vec2D.fromValues(scaleX, scaleY);
set scale(Vec2D value) {
scaleX = value[0];
scaleY = value[1];
}
@mustCallSuper
void updateWorldTransform() {
_renderOpacity = opacity;
if (parent is TransformComponent) {
var parentNode = parent as TransformComponent;
_renderOpacity *= parentNode.childOpacity;
Mat2D.multiply(worldTransform, parentNode.worldTransform, transform);
} else {
Mat2D.copy(worldTransform, transform);
}
}
void calculateWorldTransform() {
var parent = this.parent;
final chain = <TransformComponent>[this];
while (parent != null) {
if (parent is TransformComponent) {
chain.insert(0, parent);
}
parent = parent.parent;
}
for (final item in chain) {
item.updateTransform();
item.updateWorldTransform();
}
}
@override
void buildDependencies() {
super.buildDependencies();
parent?.addDependent(this);
}
void markTransformDirty() {
if (!addDirt(ComponentDirt.transform)) {
return;
}
markWorldTransformDirty();
}
void markWorldTransformDirty() {
addDirt(ComponentDirt.worldTransform, recurse: true);
}
@override
void rotationChanged(double from, double to) {
markTransformDirty();
}
@override
void scaleXChanged(double from, double to) {
markTransformDirty();
}
@override
void scaleYChanged(double from, double to) {
markTransformDirty();
}
@override
void opacityChanged(double from, double to) {
markTransformDirty();
}
@override
void parentChanged(ContainerComponent from, ContainerComponent to) {
super.parentChanged(from, to);
markWorldTransformDirty();
}
}

View File

@ -6,8 +6,12 @@ var _utf8Decoder = const Utf8Decoder();
class BinaryReader { class BinaryReader {
final ByteData buffer; final ByteData buffer;
final Endian endian; final Endian endian;
int _readIndex = 0;
int get position => _readIndex; /// TODO: remove setter for readIndex when we remove _readVarInt from
/// core_double_type.dart
int readIndex = 0;
int get position => readIndex;
BinaryReader(this.buffer, {this.endian = Endian.little}); BinaryReader(this.buffer, {this.endian = Endian.little});
@ -15,65 +19,65 @@ class BinaryReader {
: buffer = : buffer =
ByteData.view(list.buffer, list.offsetInBytes, list.lengthInBytes); ByteData.view(list.buffer, list.offsetInBytes, list.lengthInBytes);
bool get isEOF => _readIndex >= buffer.lengthInBytes; bool get isEOF => readIndex >= buffer.lengthInBytes;
double readFloat32() { double readFloat32() {
double value = buffer.getFloat32(_readIndex, endian); double value = buffer.getFloat32(readIndex, endian);
_readIndex += 4; readIndex += 4;
return value; return value;
} }
double readFloat64() { double readFloat64() {
double value = buffer.getFloat64(_readIndex, endian); double value = buffer.getFloat64(readIndex, endian);
_readIndex += 8; readIndex += 8;
return value; return value;
} }
int readInt8() { int readInt8() {
int value = buffer.getInt8(_readIndex); int value = buffer.getInt8(readIndex);
_readIndex += 1; readIndex += 1;
return value; return value;
} }
int readUint8() { int readUint8() {
int value = buffer.getUint8(_readIndex); int value = buffer.getUint8(readIndex);
_readIndex += 1; readIndex += 1;
return value; return value;
} }
int readInt16() { int readInt16() {
int value = buffer.getInt16(_readIndex, endian); int value = buffer.getInt16(readIndex, endian);
_readIndex += 2; readIndex += 2;
return value; return value;
} }
int readUint16() { int readUint16() {
int value = buffer.getUint16(_readIndex, endian); int value = buffer.getUint16(readIndex, endian);
_readIndex += 2; readIndex += 2;
return value; return value;
} }
int readInt32() { int readInt32() {
int value = buffer.getInt32(_readIndex, endian); int value = buffer.getInt32(readIndex, endian);
_readIndex += 4; readIndex += 4;
return value; return value;
} }
int readUint32() { int readUint32() {
int value = buffer.getUint32(_readIndex, endian); int value = buffer.getUint32(readIndex, endian);
_readIndex += 4; readIndex += 4;
return value; return value;
} }
int readInt64() { int readInt64() {
int value = buffer.getInt64(_readIndex, endian); int value = buffer.getInt64(readIndex, endian);
_readIndex += 8; readIndex += 8;
return value; return value;
} }
int readUint64() { int readUint64() {
int value = buffer.getUint64(_readIndex, endian); int value = buffer.getUint64(readIndex, endian);
_readIndex += 8; readIndex += 8;
return value; return value;
} }
@ -83,7 +87,7 @@ class BinaryReader {
int result = 0; int result = 0;
int shift = 0; int shift = 0;
while (true) { while (true) {
int byte = buffer.getUint8(_readIndex++) & 0xff; int byte = buffer.getUint8(readIndex++) & 0xff;
result |= (byte & 0x7f) << shift; result |= (byte & 0x7f) << shift;
if ((byte & 0x80) == 0) break; if ((byte & 0x80) == 0) break;
shift += 7; shift += 7;
@ -97,15 +101,15 @@ class BinaryReader {
String readString({bool explicitLength = true}) { String readString({bool explicitLength = true}) {
int length = explicitLength ? readVarUint() : buffer.lengthInBytes; int length = explicitLength ? readVarUint() : buffer.lengthInBytes;
String value = _utf8Decoder.convert(Uint8List.view( String value = _utf8Decoder.convert(Uint8List.view(
buffer.buffer, buffer.offsetInBytes + _readIndex, length)); buffer.buffer, buffer.offsetInBytes + readIndex, length));
_readIndex += length; readIndex += length;
return value; return value;
} }
Uint8List read(int length, [bool allocNew = false]) { Uint8List read(int length, [bool allocNew = false]) {
var view = Uint8List.view( var view =
buffer.buffer, buffer.offsetInBytes + _readIndex, length); Uint8List.view(buffer.buffer, buffer.offsetInBytes + readIndex, length);
_readIndex += length; readIndex += length;
return allocNew ? Uint8List.fromList(view) : view; return allocNew ? Uint8List.fromList(view) : view;
} }
} }

View File

@ -17,3 +17,12 @@ Set<T> tops<T extends Parentable<T>>(Iterable<T> parentables) {
} }
return tips; return tips;
} }
bool isChildOf<T extends Parentable<T>>(T child, Iterable<T> parents) {
for (var parent = child; parent != null; parent = parent.parent) {
if (parents.contains(parent)) {
return true;
}
}
return false;
}