mirror of
https://github.com/rive-app/rive-flutter.git
synced 2025-06-26 01:18:13 +08:00
Fixing mixing issue and bumping to 0.6.0+1.
This commit is contained in:
@ -1,3 +1,7 @@
|
||||
## [0.6.0+1] - 2020-09-30 11:55:07
|
||||
|
||||
- Fixing a mixing issue with double keyframes.
|
||||
|
||||
## [0.6.0] - 2020-09-28 16:22:43
|
||||
|
||||
- Adding a ToC to files indicating included core properties and their backing field types so that they may be skipped by runtimes that do not understand those properties. This will allow newer minor version files to be read by older minor version runtimes.
|
||||
|
@ -5,20 +5,22 @@ import 'package:rive/src/generated/animation/keyframe_color_base.dart';
|
||||
import 'package:rive/src/generated/rive_core_context.dart';
|
||||
export 'package:rive/src/generated/animation/keyframe_color_base.dart';
|
||||
|
||||
void _apply(Core<CoreContext> object, int propertyKey, double mix, int value) {
|
||||
if (mix == 1) {
|
||||
RiveCoreContext.setColor(object, propertyKey, value);
|
||||
} else {
|
||||
var mixedColor = Color.lerp(
|
||||
Color(RiveCoreContext.getColor(object, propertyKey)),
|
||||
Color(value),
|
||||
mix);
|
||||
RiveCoreContext.setColor(object, propertyKey, mixedColor.value);
|
||||
}
|
||||
}
|
||||
|
||||
class KeyFrameColor extends KeyFrameColorBase {
|
||||
@override
|
||||
void apply(Core<CoreContext> object, int propertyKey, double mix) {
|
||||
if (mix == 1) {
|
||||
RiveCoreContext.setColor(object, propertyKey, value);
|
||||
} else {
|
||||
var mixedColor = Color.lerp(
|
||||
Color(RiveCoreContext.getColor(object, propertyKey)),
|
||||
Color(value),
|
||||
mix);
|
||||
RiveCoreContext.setColor(object, propertyKey, mixedColor.value);
|
||||
}
|
||||
}
|
||||
|
||||
void apply(Core<CoreContext> object, int propertyKey, double mix) =>
|
||||
_apply(object, propertyKey, mix, value);
|
||||
@override
|
||||
void onAdded() {
|
||||
super.onAdded();
|
||||
@ -32,16 +34,8 @@ class KeyFrameColor extends KeyFrameColorBase {
|
||||
if (interpolator != null) {
|
||||
f = interpolator.transform(f);
|
||||
}
|
||||
var interpolatedValue = Color.lerp(Color(value), Color(nextFrame.value), f);
|
||||
if (mix == 1) {
|
||||
RiveCoreContext.setColor(object, propertyKey, interpolatedValue.value);
|
||||
} else {
|
||||
var mixedColor = Color.lerp(
|
||||
Color(RiveCoreContext.getColor(object, propertyKey)),
|
||||
interpolatedValue,
|
||||
mix);
|
||||
RiveCoreContext.setColor(object, propertyKey, mixedColor.value);
|
||||
}
|
||||
_apply(object, propertyKey, mix,
|
||||
Color.lerp(Color(value), Color(nextFrame.value), f).value);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -4,12 +4,21 @@ import 'package:rive/src/generated/animation/keyframe_double_base.dart';
|
||||
import 'package:rive/src/generated/rive_core_context.dart';
|
||||
export 'package:rive/src/generated/animation/keyframe_double_base.dart';
|
||||
|
||||
void _apply(
|
||||
Core<CoreContext> object, int propertyKey, double mix, double value) {
|
||||
if (mix == 1) {
|
||||
RiveCoreContext.setDouble(object, propertyKey, value);
|
||||
} else {
|
||||
var mixi = 1.0 - mix;
|
||||
RiveCoreContext.setDouble(object, propertyKey,
|
||||
RiveCoreContext.getDouble(object, propertyKey) * mixi + value * mix);
|
||||
}
|
||||
}
|
||||
|
||||
class KeyFrameDouble extends KeyFrameDoubleBase {
|
||||
@override
|
||||
void apply(Core<CoreContext> object, int propertyKey, double mix) {
|
||||
RiveCoreContext.setDouble(object, propertyKey, value * mix);
|
||||
}
|
||||
|
||||
void apply(Core<CoreContext> object, int propertyKey, double mix) =>
|
||||
_apply(object, propertyKey, mix, value);
|
||||
@override
|
||||
void onAdded() {
|
||||
super.onAdded();
|
||||
@ -23,17 +32,7 @@ class KeyFrameDouble extends KeyFrameDoubleBase {
|
||||
if (interpolator != null) {
|
||||
f = interpolator.transform(f);
|
||||
}
|
||||
var interpolatedValue = value + (nextFrame.value - value) * f;
|
||||
if (mix == 1) {
|
||||
RiveCoreContext.setDouble(object, propertyKey, interpolatedValue);
|
||||
} else {
|
||||
var mixi = 1.0 - mix;
|
||||
RiveCoreContext.setDouble(
|
||||
object,
|
||||
propertyKey,
|
||||
RiveCoreContext.getDouble(object, propertyKey) * mixi +
|
||||
interpolatedValue * mix);
|
||||
}
|
||||
_apply(object, propertyKey, mix, value + (nextFrame.value - value) * f);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -43,6 +43,7 @@ abstract class Component extends ComponentBase<RuntimeArtboard>
|
||||
_artboard?.addComponent(this);
|
||||
}
|
||||
|
||||
@mustCallSuper
|
||||
void visitAncestor(Component ancestor) {}
|
||||
bool resolveArtboard() {
|
||||
int sanity = maxTreeDepth;
|
||||
|
@ -44,6 +44,7 @@ class AABB {
|
||||
-double.maxFinite
|
||||
]);
|
||||
}
|
||||
double get area => width * height;
|
||||
bool get isEmpty {
|
||||
return _buffer[0] == double.maxFinite &&
|
||||
_buffer[1] == double.maxFinite &&
|
||||
@ -162,6 +163,12 @@ class AABB {
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool testOverlapPoint(AABB a, Vec2D b) {
|
||||
var x = b[0];
|
||||
var y = b[1];
|
||||
return x >= a[0] && x <= a[2] && y >= a[1] && y <= a[3];
|
||||
}
|
||||
|
||||
AABB translate(Vec2D vec) => AABB.fromValues(_buffer[0] + vec[0],
|
||||
_buffer[1] + vec[1], _buffer[2] + vec[0], _buffer[3] + vec[1]);
|
||||
@override
|
||||
|
@ -37,6 +37,7 @@ abstract class Path extends PathBase {
|
||||
|
||||
@override
|
||||
void visitAncestor(Component ancestor) {
|
||||
super.visitAncestor(ancestor);
|
||||
if (_shape == null && ancestor is Shape) {
|
||||
_changeShape(ancestor);
|
||||
}
|
||||
|
@ -80,6 +80,7 @@ class PathComposer extends PathComposerBase {
|
||||
|
||||
@override
|
||||
void visitAncestor(Component ancestor) {
|
||||
super.visitAncestor(ancestor);
|
||||
if (_shape == null && ancestor is Shape) {
|
||||
_changeShape(ancestor);
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
name: rive
|
||||
description: Rive 2 Flutter Runtime
|
||||
version: 0.6.0
|
||||
version: 0.6.0+1
|
||||
repository: https://github.com/rive-app/rive-flutter
|
||||
homepage: https://rive.app
|
||||
|
||||
|
Reference in New Issue
Block a user