mirror of
https://github.com/rive-app/rive-flutter.git
synced 2025-07-15 06:30:53 +08:00
Bumping to version 4 with first cut of bones.
This commit is contained in:
example/assets
lib/src
Binary file not shown.
41
lib/src/generated/bones/bone_base.dart
Normal file
41
lib/src/generated/bones/bone_base.dart
Normal 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);
|
||||
}
|
66
lib/src/generated/bones/root_bone_base.dart
Normal file
66
lib/src/generated/bones/root_bone_base.dart
Normal 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);
|
||||
}
|
21
lib/src/generated/bones/skeletal_component_base.dart
Normal file
21
lib/src/generated/bones/skeletal_component_base.dart
Normal 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
|
||||
};
|
||||
}
|
@ -4,6 +4,7 @@
|
||||
import 'package:rive/src/generated/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/transform_component_base.dart';
|
||||
import 'package:rive/src/rive_core/node.dart';
|
||||
|
||||
abstract class DrawableBase extends Node {
|
||||
@ -14,6 +15,7 @@ abstract class DrawableBase extends Node {
|
||||
Set<int> get coreTypes => {
|
||||
DrawableBase.typeKey,
|
||||
NodeBase.typeKey,
|
||||
TransformComponentBase.typeKey,
|
||||
ContainerComponentBase.typeKey,
|
||||
ComponentBase.typeKey
|
||||
};
|
||||
|
@ -3,24 +3,31 @@
|
||||
|
||||
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';
|
||||
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;
|
||||
@override
|
||||
int get coreType => NodeBase.typeKey;
|
||||
@override
|
||||
Set<int> get coreTypes =>
|
||||
{NodeBase.typeKey, ContainerComponentBase.typeKey, ComponentBase.typeKey};
|
||||
Set<int> get coreTypes => {
|
||||
NodeBase.typeKey,
|
||||
TransformComponentBase.typeKey,
|
||||
ContainerComponentBase.typeKey,
|
||||
ComponentBase.typeKey
|
||||
};
|
||||
|
||||
/// --------------------------------------------------------------------------
|
||||
/// X field with key 13.
|
||||
double _x = 0;
|
||||
static const int xPropertyKey = 13;
|
||||
@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;
|
||||
@ -36,10 +43,12 @@ abstract class NodeBase extends ContainerComponent {
|
||||
/// Y field with key 14.
|
||||
double _y = 0;
|
||||
static const int yPropertyKey = 14;
|
||||
@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;
|
||||
@ -50,80 +59,4 @@ abstract class NodeBase extends ContainerComponent {
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
@ -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/artboard_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/drawable_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/straight_vertex_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/cubic_interpolator.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/artboard.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/shapes/cubic_asymmetric_vertex.dart';
|
||||
import 'package:rive/src/rive_core/shapes/cubic_detached_vertex.dart';
|
||||
@ -128,6 +133,10 @@ class RiveCoreContext {
|
||||
return Artboard();
|
||||
case BackboardBase.typeKey:
|
||||
return Backboard();
|
||||
case BoneBase.typeKey:
|
||||
return Bone();
|
||||
case RootBoneBase.typeKey:
|
||||
return RootBone();
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
@ -324,6 +333,26 @@ class RiveCoreContext {
|
||||
object.fillRule = value;
|
||||
}
|
||||
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:
|
||||
if (object is NodeBase && value is double) {
|
||||
object.x = value;
|
||||
@ -334,26 +363,6 @@ class RiveCoreContext {
|
||||
object.y = value;
|
||||
}
|
||||
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:
|
||||
if (object is DrawableBase && value is int) {
|
||||
object.drawOrder = value;
|
||||
@ -474,6 +483,21 @@ class RiveCoreContext {
|
||||
object.originY = value;
|
||||
}
|
||||
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 StrokeBase.thicknessPropertyKey:
|
||||
case GradientStopBase.positionPropertyKey:
|
||||
case TransformComponentBase.rotationPropertyKey:
|
||||
case TransformComponentBase.scaleXPropertyKey:
|
||||
case TransformComponentBase.scaleYPropertyKey:
|
||||
case TransformComponentBase.opacityPropertyKey:
|
||||
case NodeBase.xPropertyKey:
|
||||
case NodeBase.yPropertyKey:
|
||||
case NodeBase.rotationPropertyKey:
|
||||
case NodeBase.scaleXPropertyKey:
|
||||
case NodeBase.scaleYPropertyKey:
|
||||
case NodeBase.opacityPropertyKey:
|
||||
case PathVertexBase.xPropertyKey:
|
||||
case PathVertexBase.yPropertyKey:
|
||||
case StraightVertexBase.radiusPropertyKey:
|
||||
@ -546,6 +570,9 @@ class RiveCoreContext {
|
||||
case ArtboardBase.yPropertyKey:
|
||||
case ArtboardBase.originXPropertyKey:
|
||||
case ArtboardBase.originYPropertyKey:
|
||||
case BoneBase.lengthPropertyKey:
|
||||
case RootBoneBase.xPropertyKey:
|
||||
case RootBoneBase.yPropertyKey:
|
||||
return doubleType;
|
||||
case KeyFrameColorBase.valuePropertyKey:
|
||||
case SolidColorBase.colorValuePropertyKey:
|
||||
@ -641,18 +668,18 @@ class RiveCoreContext {
|
||||
return (object as StrokeBase).thickness;
|
||||
case GradientStopBase.positionPropertyKey:
|
||||
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:
|
||||
return (object as NodeBase).x;
|
||||
case NodeBase.yPropertyKey:
|
||||
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:
|
||||
return (object as PathVertexBase).x;
|
||||
case PathVertexBase.yPropertyKey:
|
||||
@ -695,6 +722,12 @@ class RiveCoreContext {
|
||||
return (object as ArtboardBase).originX;
|
||||
case ArtboardBase.originYPropertyKey:
|
||||
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;
|
||||
}
|
||||
@ -836,24 +869,24 @@ class RiveCoreContext {
|
||||
case GradientStopBase.positionPropertyKey:
|
||||
(object as GradientStopBase).position = value;
|
||||
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:
|
||||
(object as NodeBase).x = value;
|
||||
break;
|
||||
case NodeBase.yPropertyKey:
|
||||
(object as NodeBase).y = value;
|
||||
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:
|
||||
(object as PathVertexBase).x = value;
|
||||
break;
|
||||
@ -917,6 +950,15 @@ class RiveCoreContext {
|
||||
case ArtboardBase.originYPropertyKey:
|
||||
(object as ArtboardBase).originY = value;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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/shapes/parametric_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';
|
||||
|
||||
abstract class EllipseBase extends ParametricPath {
|
||||
@ -18,6 +19,7 @@ abstract class EllipseBase extends ParametricPath {
|
||||
ParametricPathBase.typeKey,
|
||||
PathBase.typeKey,
|
||||
NodeBase.typeKey,
|
||||
TransformComponentBase.typeKey,
|
||||
ContainerComponentBase.typeKey,
|
||||
ComponentBase.typeKey
|
||||
};
|
||||
|
@ -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/node_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';
|
||||
|
||||
abstract class ParametricPathBase extends Path {
|
||||
@ -17,6 +18,7 @@ abstract class ParametricPathBase extends Path {
|
||||
ParametricPathBase.typeKey,
|
||||
PathBase.typeKey,
|
||||
NodeBase.typeKey,
|
||||
TransformComponentBase.typeKey,
|
||||
ContainerComponentBase.typeKey,
|
||||
ComponentBase.typeKey
|
||||
};
|
||||
|
@ -4,6 +4,7 @@
|
||||
import 'package:rive/src/generated/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/transform_component_base.dart';
|
||||
import 'package:rive/src/rive_core/node.dart';
|
||||
|
||||
abstract class PathBase extends Node {
|
||||
@ -14,6 +15,7 @@ abstract class PathBase extends Node {
|
||||
Set<int> get coreTypes => {
|
||||
PathBase.typeKey,
|
||||
NodeBase.typeKey,
|
||||
TransformComponentBase.typeKey,
|
||||
ContainerComponentBase.typeKey,
|
||||
ComponentBase.typeKey
|
||||
};
|
||||
|
@ -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/node_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';
|
||||
|
||||
abstract class PointsPathBase extends Path {
|
||||
@ -16,6 +17,7 @@ abstract class PointsPathBase extends Path {
|
||||
PointsPathBase.typeKey,
|
||||
PathBase.typeKey,
|
||||
NodeBase.typeKey,
|
||||
TransformComponentBase.typeKey,
|
||||
ContainerComponentBase.typeKey,
|
||||
ComponentBase.typeKey
|
||||
};
|
||||
|
@ -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/shapes/parametric_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';
|
||||
|
||||
abstract class RectangleBase extends ParametricPath {
|
||||
@ -18,6 +19,7 @@ abstract class RectangleBase extends ParametricPath {
|
||||
ParametricPathBase.typeKey,
|
||||
PathBase.typeKey,
|
||||
NodeBase.typeKey,
|
||||
TransformComponentBase.typeKey,
|
||||
ContainerComponentBase.typeKey,
|
||||
ComponentBase.typeKey
|
||||
};
|
||||
|
@ -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/drawable_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';
|
||||
|
||||
abstract class ShapeBase extends Drawable {
|
||||
@ -16,6 +17,7 @@ abstract class ShapeBase extends Drawable {
|
||||
ShapeBase.typeKey,
|
||||
DrawableBase.typeKey,
|
||||
NodeBase.typeKey,
|
||||
TransformComponentBase.typeKey,
|
||||
ContainerComponentBase.typeKey,
|
||||
ComponentBase.typeKey
|
||||
};
|
||||
|
@ -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/shapes/parametric_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';
|
||||
|
||||
abstract class TriangleBase extends ParametricPath {
|
||||
@ -18,6 +19,7 @@ abstract class TriangleBase extends ParametricPath {
|
||||
ParametricPathBase.typeKey,
|
||||
PathBase.typeKey,
|
||||
NodeBase.typeKey,
|
||||
TransformComponentBase.typeKey,
|
||||
ContainerComponentBase.typeKey,
|
||||
ComponentBase.typeKey
|
||||
};
|
||||
|
95
lib/src/generated/transform_component_base.dart
Normal file
95
lib/src/generated/transform_component_base.dart
Normal 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);
|
||||
}
|
49
lib/src/rive_core/bones/bone.dart
Normal file
49
lib/src/rive_core/bones/bone.dart
Normal 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.');
|
||||
}
|
||||
}
|
14
lib/src/rive_core/bones/root_bone.dart
Normal file
14
lib/src/rive_core/bones/root_bone.dart
Normal 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();
|
||||
}
|
||||
}
|
4
lib/src/rive_core/bones/skeletal_component.dart
Normal file
4
lib/src/rive_core/bones/skeletal_component.dart
Normal 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 {}
|
@ -48,8 +48,13 @@ class AABB {
|
||||
var transformedPoint = transform == null
|
||||
? point
|
||||
: Vec2D.transformMat2D(Vec2D(), point, transform);
|
||||
var x = transformedPoint[0];
|
||||
var y = transformedPoint[1];
|
||||
expandToPoint(transformedPoint);
|
||||
return transformedPoint;
|
||||
}
|
||||
|
||||
void expandToPoint(Vec2D point) {
|
||||
var x = point[0];
|
||||
var y = point[1];
|
||||
if (x < _buffer[0]) {
|
||||
_buffer[0] = x;
|
||||
}
|
||||
@ -62,7 +67,6 @@ class AABB {
|
||||
if (y > _buffer[3]) {
|
||||
_buffer[3] = y;
|
||||
}
|
||||
return transformedPoint;
|
||||
}
|
||||
|
||||
AABB.fromMinMax(Vec2D min, Vec2D max) {
|
||||
|
@ -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/mat2d.dart';
|
||||
import 'package:rive/src/rive_core/math/vec2d.dart';
|
||||
import 'package:rive/src/generated/node_base.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
export 'package:rive/src/generated/node_base.dart';
|
||||
|
||||
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) {
|
||||
x = pos[0];
|
||||
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
|
||||
void xChanged(double from, double to) {
|
||||
markTransformDirty();
|
||||
@ -103,31 +19,5 @@ class Node extends NodeBase {
|
||||
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);
|
||||
}
|
||||
|
@ -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 = 3;
|
||||
static const int majorVersion = 4;
|
||||
static const int minorVersion = 0;
|
||||
static const String fingerprint = 'RIVE';
|
||||
final int ownerId;
|
||||
|
118
lib/src/rive_core/transform_component.dart
Normal file
118
lib/src/rive_core/transform_component.dart
Normal 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();
|
||||
}
|
||||
}
|
@ -6,8 +6,12 @@ var _utf8Decoder = const Utf8Decoder();
|
||||
class BinaryReader {
|
||||
final ByteData buffer;
|
||||
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});
|
||||
|
||||
@ -15,65 +19,65 @@ class BinaryReader {
|
||||
: buffer =
|
||||
ByteData.view(list.buffer, list.offsetInBytes, list.lengthInBytes);
|
||||
|
||||
bool get isEOF => _readIndex >= buffer.lengthInBytes;
|
||||
bool get isEOF => readIndex >= buffer.lengthInBytes;
|
||||
|
||||
double readFloat32() {
|
||||
double value = buffer.getFloat32(_readIndex, endian);
|
||||
_readIndex += 4;
|
||||
double value = buffer.getFloat32(readIndex, endian);
|
||||
readIndex += 4;
|
||||
return value;
|
||||
}
|
||||
|
||||
double readFloat64() {
|
||||
double value = buffer.getFloat64(_readIndex, endian);
|
||||
_readIndex += 8;
|
||||
double value = buffer.getFloat64(readIndex, endian);
|
||||
readIndex += 8;
|
||||
return value;
|
||||
}
|
||||
|
||||
int readInt8() {
|
||||
int value = buffer.getInt8(_readIndex);
|
||||
_readIndex += 1;
|
||||
int value = buffer.getInt8(readIndex);
|
||||
readIndex += 1;
|
||||
return value;
|
||||
}
|
||||
|
||||
int readUint8() {
|
||||
int value = buffer.getUint8(_readIndex);
|
||||
_readIndex += 1;
|
||||
int value = buffer.getUint8(readIndex);
|
||||
readIndex += 1;
|
||||
return value;
|
||||
}
|
||||
|
||||
int readInt16() {
|
||||
int value = buffer.getInt16(_readIndex, endian);
|
||||
_readIndex += 2;
|
||||
int value = buffer.getInt16(readIndex, endian);
|
||||
readIndex += 2;
|
||||
return value;
|
||||
}
|
||||
|
||||
int readUint16() {
|
||||
int value = buffer.getUint16(_readIndex, endian);
|
||||
_readIndex += 2;
|
||||
int value = buffer.getUint16(readIndex, endian);
|
||||
readIndex += 2;
|
||||
return value;
|
||||
}
|
||||
|
||||
int readInt32() {
|
||||
int value = buffer.getInt32(_readIndex, endian);
|
||||
_readIndex += 4;
|
||||
int value = buffer.getInt32(readIndex, endian);
|
||||
readIndex += 4;
|
||||
return value;
|
||||
}
|
||||
|
||||
int readUint32() {
|
||||
int value = buffer.getUint32(_readIndex, endian);
|
||||
_readIndex += 4;
|
||||
int value = buffer.getUint32(readIndex, endian);
|
||||
readIndex += 4;
|
||||
return value;
|
||||
}
|
||||
|
||||
int readInt64() {
|
||||
int value = buffer.getInt64(_readIndex, endian);
|
||||
_readIndex += 8;
|
||||
int value = buffer.getInt64(readIndex, endian);
|
||||
readIndex += 8;
|
||||
return value;
|
||||
}
|
||||
|
||||
int readUint64() {
|
||||
int value = buffer.getUint64(_readIndex, endian);
|
||||
_readIndex += 8;
|
||||
int value = buffer.getUint64(readIndex, endian);
|
||||
readIndex += 8;
|
||||
return value;
|
||||
}
|
||||
|
||||
@ -83,7 +87,7 @@ class BinaryReader {
|
||||
int result = 0;
|
||||
int shift = 0;
|
||||
while (true) {
|
||||
int byte = buffer.getUint8(_readIndex++) & 0xff;
|
||||
int byte = buffer.getUint8(readIndex++) & 0xff;
|
||||
result |= (byte & 0x7f) << shift;
|
||||
if ((byte & 0x80) == 0) break;
|
||||
shift += 7;
|
||||
@ -97,15 +101,15 @@ class BinaryReader {
|
||||
String readString({bool explicitLength = true}) {
|
||||
int length = explicitLength ? readVarUint() : buffer.lengthInBytes;
|
||||
String value = _utf8Decoder.convert(Uint8List.view(
|
||||
buffer.buffer, buffer.offsetInBytes + _readIndex, length));
|
||||
_readIndex += length;
|
||||
buffer.buffer, buffer.offsetInBytes + readIndex, length));
|
||||
readIndex += length;
|
||||
return value;
|
||||
}
|
||||
|
||||
Uint8List read(int length, [bool allocNew = false]) {
|
||||
var view = Uint8List.view(
|
||||
buffer.buffer, buffer.offsetInBytes + _readIndex, length);
|
||||
_readIndex += length;
|
||||
var view =
|
||||
Uint8List.view(buffer.buffer, buffer.offsetInBytes + readIndex, length);
|
||||
readIndex += length;
|
||||
return allocNew ? Uint8List.fromList(view) : view;
|
||||
}
|
||||
}
|
||||
|
@ -17,3 +17,12 @@ Set<T> tops<T extends Parentable<T>>(Iterable<T> parentables) {
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user