mirror of
https://github.com/rive-app/rive-flutter.git
synced 2025-06-27 18:28:18 +08:00
Prepping for publish 0.6.6.
This commit is contained in:
@ -1,6 +1,8 @@
|
|||||||
## [0.6.6] - Not yet released
|
## [0.6.6] - 2021-01-18 16:40:10
|
||||||
|
|
||||||
- Adds getters for start/endTime and reset() in LinearAnimationInstance
|
- Adds getters for start/endTime and reset() in LinearAnimationInstance
|
||||||
|
- Fixes an issue with artboard background gradients when rendering with non-default origin values.
|
||||||
|
- Fixes an issue with trim paths across open paths.
|
||||||
|
|
||||||
## [0.6.5] - 2020-12-22 16:49:39
|
## [0.6.5] - 2020-12-22 16:49:39
|
||||||
|
|
||||||
|
@ -26,10 +26,6 @@
|
|||||||
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
|
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
|
||||||
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
|
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
|
||||||
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
|
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
|
||||||
33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; };
|
|
||||||
33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
|
||||||
D73912F022F37F9E000D13A0 /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; };
|
|
||||||
D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
@ -49,8 +45,6 @@
|
|||||||
dstPath = "";
|
dstPath = "";
|
||||||
dstSubfolderSpec = 10;
|
dstSubfolderSpec = 10;
|
||||||
files = (
|
files = (
|
||||||
D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */,
|
|
||||||
33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */,
|
|
||||||
);
|
);
|
||||||
name = "Bundle Framework";
|
name = "Bundle Framework";
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@ -69,13 +63,11 @@
|
|||||||
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = "<group>"; };
|
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = "<group>"; };
|
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = "<group>"; };
|
||||||
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = "<group>"; };
|
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = "<group>"; };
|
||||||
33D1A10322148B71006C7A3E /* FlutterMacOS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FlutterMacOS.framework; path = Flutter/ephemeral/FlutterMacOS.framework; sourceTree = SOURCE_ROOT; };
|
|
||||||
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; };
|
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; };
|
||||||
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
|
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
|
||||||
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
|
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
|
||||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
|
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
|
||||||
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
|
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
|
||||||
D73912EF22F37F9E000D13A0 /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/ephemeral/App.framework; sourceTree = SOURCE_ROOT; };
|
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@ -83,8 +75,6 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
D73912F022F37F9E000D13A0 /* App.framework in Frameworks */,
|
|
||||||
33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@ -138,8 +128,6 @@
|
|||||||
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
|
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
|
||||||
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
|
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
|
||||||
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
|
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
|
||||||
D73912EF22F37F9E000D13A0 /* App.framework */,
|
|
||||||
33D1A10322148B71006C7A3E /* FlutterMacOS.framework */,
|
|
||||||
);
|
);
|
||||||
path = Flutter;
|
path = Flutter;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -260,7 +248,7 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename\n";
|
shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n";
|
||||||
};
|
};
|
||||||
33CC111E2044C6BF0003C045 /* ShellScript */ = {
|
33CC111E2044C6BF0003C045 /* ShellScript */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
@ -93,10 +93,7 @@ class KeyedProperty extends KeyedPropertyBase<RuntimeArtboard>
|
|||||||
|
|
||||||
int get numFrames => _keyframes.length;
|
int get numFrames => _keyframes.length;
|
||||||
KeyFrame getFrameAt(int index) => _keyframes[index];
|
KeyFrame getFrameAt(int index) => _keyframes[index];
|
||||||
void apply(double seconds, double mix, Core object) {
|
int closestFrameIndex(double seconds) {
|
||||||
if (_keyframes.isEmpty) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
int mid = 0;
|
int mid = 0;
|
||||||
double closestSeconds = 0;
|
double closestSeconds = 0;
|
||||||
@ -115,6 +112,14 @@ class KeyedProperty extends KeyedPropertyBase<RuntimeArtboard>
|
|||||||
}
|
}
|
||||||
idx = start;
|
idx = start;
|
||||||
}
|
}
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
void apply(double seconds, double mix, Core object) {
|
||||||
|
if (_keyframes.isEmpty) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int idx = closestFrameIndex(seconds);
|
||||||
int pk = propertyKey;
|
int pk = propertyKey;
|
||||||
if (idx == 0) {
|
if (idx == 0) {
|
||||||
var first = _keyframes[0];
|
var first = _keyframes[0];
|
||||||
|
@ -3,16 +3,12 @@ import 'package:rive/src/rive_core/animation/loop.dart';
|
|||||||
|
|
||||||
class LinearAnimationInstance {
|
class LinearAnimationInstance {
|
||||||
final LinearAnimation animation;
|
final LinearAnimation animation;
|
||||||
double _time;
|
double _time = 0;
|
||||||
int _direction = 1;
|
int _direction = 1;
|
||||||
|
|
||||||
LinearAnimationInstance(this.animation)
|
LinearAnimationInstance(this.animation)
|
||||||
: assert(animation != null),
|
: _time =
|
||||||
_time =
|
|
||||||
(animation.enableWorkArea ? animation.workStart : 0).toDouble() /
|
(animation.enableWorkArea ? animation.workStart : 0).toDouble() /
|
||||||
animation.fps;
|
animation.fps;
|
||||||
|
|
||||||
/// Note that when time is set, the direction will be changed to 1
|
|
||||||
set time(double value) {
|
set time(double value) {
|
||||||
if (_time == value) {
|
if (_time == value) {
|
||||||
return;
|
return;
|
||||||
@ -21,30 +17,17 @@ class LinearAnimationInstance {
|
|||||||
_direction = 1;
|
_direction = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the current time position of the animation in seconds
|
|
||||||
double get time => _time;
|
double get time => _time;
|
||||||
|
|
||||||
/// Direction should only be +1 or -1
|
|
||||||
set direction(int value) => _direction = value == -1 ? -1 : 1;
|
set direction(int value) => _direction = value == -1 ? -1 : 1;
|
||||||
|
|
||||||
/// Returns the animation's play direction: 1 for forwards, -1 for backwards
|
|
||||||
int get direction => _direction;
|
int get direction => _direction;
|
||||||
|
|
||||||
/// Returns the end time of the animation in seconds
|
|
||||||
double get endTime =>
|
double get endTime =>
|
||||||
(animation.enableWorkArea ? animation.workEnd : animation.duration)
|
(animation.enableWorkArea ? animation.workEnd : animation.duration)
|
||||||
.toDouble() /
|
.toDouble() /
|
||||||
animation.fps;
|
animation.fps;
|
||||||
|
|
||||||
/// Returns the start time of the animation in seconds
|
|
||||||
double get startTime =>
|
double get startTime =>
|
||||||
(animation.enableWorkArea ? animation.workStart : 0).toDouble() /
|
(animation.enableWorkArea ? animation.workStart : 0).toDouble() /
|
||||||
animation.fps;
|
animation.fps;
|
||||||
|
|
||||||
/// Resets the animation to the starting frame
|
|
||||||
void reset() => _time = startTime;
|
void reset() => _time = startTime;
|
||||||
|
|
||||||
/// Advances the animation by the time provided
|
|
||||||
bool advance(double elapsedSeconds) {
|
bool advance(double elapsedSeconds) {
|
||||||
_time += elapsedSeconds * animation.speed * _direction;
|
_time += elapsedSeconds * animation.speed * _direction;
|
||||||
double frames = _time * animation.fps;
|
double frames = _time * animation.fps;
|
||||||
|
@ -118,7 +118,8 @@ class Artboard extends ArtboardBase with ShapePaintContainer {
|
|||||||
@override
|
@override
|
||||||
void update(int dirt) {
|
void update(int dirt) {
|
||||||
if (dirt & ComponentDirt.worldTransform != 0) {
|
if (dirt & ComponentDirt.worldTransform != 0) {
|
||||||
var rect = Rect.fromLTWH(0, 0, width, height);
|
var rect = Rect.fromLTWH(
|
||||||
|
width * (-originX ?? 0), height * (-originY ?? 0), width, height);
|
||||||
path.reset();
|
path.reset();
|
||||||
path.addRect(rect);
|
path.addRect(rect);
|
||||||
}
|
}
|
||||||
@ -163,12 +164,12 @@ class Artboard extends ArtboardBase with ShapePaintContainer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void draw(Canvas canvas) {
|
void draw(Canvas canvas) {
|
||||||
for (final fill in fills) {
|
|
||||||
fill.draw(canvas, path);
|
|
||||||
}
|
|
||||||
canvas.save();
|
canvas.save();
|
||||||
canvas.clipRect(Rect.fromLTWH(0, 0, width, height));
|
canvas.clipRect(Rect.fromLTWH(0, 0, width, height));
|
||||||
canvas.translate(width * (originX ?? 0), height * (originY ?? 0));
|
canvas.translate(width * (originX ?? 0), height * (originY ?? 0));
|
||||||
|
for (final fill in fills) {
|
||||||
|
fill.draw(canvas, path);
|
||||||
|
}
|
||||||
for (var drawable = _firstDrawable;
|
for (var drawable = _firstDrawable;
|
||||||
drawable != null;
|
drawable != null;
|
||||||
drawable = drawable.prev) {
|
drawable = drawable.prev) {
|
||||||
|
@ -26,7 +26,11 @@ _FirstExtractedPath _appendPathSegmentSequential(
|
|||||||
first = _FirstExtractedPath(extracted, metric, extractLength);
|
first = _FirstExtractedPath(extracted, metric, extractLength);
|
||||||
} else if (first.metric == metric) {
|
} else if (first.metric == metric) {
|
||||||
first.length += extractLength;
|
first.length += extractLength;
|
||||||
|
if (metric.isClosed) {
|
||||||
first.path.extendWithPath(extracted, Offset.zero);
|
first.path.extendWithPath(extracted, Offset.zero);
|
||||||
|
} else {
|
||||||
|
result.addPath(extracted, Offset.zero);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (metric.isClosed && extractLength == metric.length) {
|
if (metric.isClosed && extractLength == metric.length) {
|
||||||
extracted.close();
|
extracted.close();
|
||||||
|
@ -41,6 +41,8 @@ class Shape extends ShapeBase with ShapePaintContainer {
|
|||||||
void pathChanged(Path path) => _markComposerDirty();
|
void pathChanged(Path path) => _markComposerDirty();
|
||||||
void paintChanged() {
|
void paintChanged() {
|
||||||
addDirt(ComponentDirt.path);
|
addDirt(ComponentDirt.path);
|
||||||
|
_markBlendModeDirty();
|
||||||
|
_markRenderOpacityDirty();
|
||||||
for (final d in dependents) {
|
for (final d in dependents) {
|
||||||
d.addDirt(ComponentDirt.worldTransform);
|
d.addDirt(ComponentDirt.worldTransform);
|
||||||
}
|
}
|
||||||
@ -155,21 +157,14 @@ class Shape extends ShapeBase with ShapePaintContainer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _markBlendModeDirty() => addDirt(ComponentDirt.blendMode);
|
void _markBlendModeDirty() => addDirt(ComponentDirt.blendMode);
|
||||||
|
void _markRenderOpacityDirty() => addDirt(ComponentDirt.worldTransform);
|
||||||
@override
|
@override
|
||||||
void onPaintMutatorChanged(ShapePaintMutator mutator) {
|
void onPaintMutatorChanged(ShapePaintMutator mutator) {
|
||||||
paintChanged();
|
paintChanged();
|
||||||
_markBlendModeDirty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onStrokesChanged() {
|
void onStrokesChanged() => paintChanged();
|
||||||
paintChanged();
|
|
||||||
_markBlendModeDirty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onFillsChanged() {
|
void onFillsChanged() => paintChanged();
|
||||||
paintChanged();
|
|
||||||
_markBlendModeDirty();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
name: rive
|
name: rive
|
||||||
description: Rive 2 Flutter Runtime. This package provides runtime functionality for playing back and interacting with animations built with the Rive editor available at https://rive.app.
|
description: Rive 2 Flutter Runtime. This package provides runtime functionality for playing back and interacting with animations built with the Rive editor available at https://rive.app.
|
||||||
version: 0.6.5
|
version: 0.6.6
|
||||||
repository: https://github.com/rive-app/rive-flutter
|
repository: https://github.com/rive-app/rive-flutter
|
||||||
homepage: https://rive.app
|
homepage: https://rive.app
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user