mirror of
https://github.com/xvrh/lottie-flutter.git
synced 2025-08-06 16:39:36 +08:00
Compare commits
38 Commits
Author | SHA1 | Date | |
---|---|---|---|
5e71dabfa3 | |||
f892a14a7e | |||
84cfa16673 | |||
61756b6613 | |||
7e4d1d3813 | |||
56a69f56d0 | |||
d0deffa2ee | |||
a2e40ecd08 | |||
5a725a064e | |||
8302c4b7e6 | |||
029cee4f0a | |||
eeda2f4de4 | |||
ba039e9423 | |||
3c58936d36 | |||
d0fed17a70 | |||
1c113d961a | |||
17449658bb | |||
e258c610f5 | |||
945285175a | |||
cfb29485b0 | |||
31ab666099 | |||
8881e357c6 | |||
1c665c7756 | |||
cad1806f2e | |||
08e9678dc3 | |||
9f4a8d74d5 | |||
c7066ca444 | |||
faf7d74029 | |||
a2acfc7bb9 | |||
3c75400351 | |||
aef8ef7ee0 | |||
16874cb6fc | |||
9e9de6d5b6 | |||
f19e86d644 | |||
ab9b5833c3 | |||
fe0032a6c2 | |||
b0bc35196e | |||
0600c44384 |
9
.github/dependabot.yml
vendored
Normal file
9
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
# Dependabot configuration file.
|
||||
# See https://docs.github.com/en/code-security/dependabot/dependabot-version-updates
|
||||
version: 2
|
||||
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
11
.github/workflows/analyze-and-test.yaml
vendored
11
.github/workflows/analyze-and-test.yaml
vendored
@ -8,15 +8,12 @@ on:
|
||||
jobs:
|
||||
analyze_and_test:
|
||||
name: Flutter analyze
|
||||
strategy:
|
||||
matrix:
|
||||
flutter: ['stable']
|
||||
runs-on: macos-latest
|
||||
runs-on: macos-14
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: ${{ matrix.flutter }}
|
||||
channel: 'stable'
|
||||
- run: flutter doctor
|
||||
- run: flutter --version
|
||||
- run: flutter pub get
|
||||
@ -37,7 +34,7 @@ jobs:
|
||||
name: Check that the web version can compile
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: 'stable'
|
||||
|
22
.github/workflows/coverage.yaml
vendored
Normal file
22
.github/workflows/coverage.yaml
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
name: Coverage
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
coverage:
|
||||
name: Coverage
|
||||
runs-on: macos-14
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: 'stable'
|
||||
- run: flutter test --coverage
|
||||
|
||||
- name: Upload coverage reports to Codecov
|
||||
uses: codecov/codecov-action@v5.1.1
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
7
.github/workflows/publish-on-pub.yaml
vendored
7
.github/workflows/publish-on-pub.yaml
vendored
@ -7,7 +7,7 @@ jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: 'stable'
|
||||
@ -15,13 +15,14 @@ jobs:
|
||||
- run: flutter pub run tool/publish/check_version.dart ${GITHUB_REF}
|
||||
- name: Setup credentials
|
||||
run: |
|
||||
cat <<EOF > $PUB_CACHE/credentials.json
|
||||
mkdir -p $XDG_CONFIG_HOME/dart
|
||||
cat <<EOF > $XDG_CONFIG_HOME/dart/pub-credentials.json
|
||||
{
|
||||
"accessToken":"${{ secrets.OAUTH_ACCESS_TOKEN }}",
|
||||
"refreshToken":"${{ secrets.OAUTH_REFRESH_TOKEN }}",
|
||||
"tokenEndpoint":"https://accounts.google.com/o/oauth2/token",
|
||||
"scopes": [ "openid", "https://www.googleapis.com/auth/userinfo.email" ],
|
||||
"expiration": 1580681402856
|
||||
"expiration": 1691492965565
|
||||
}
|
||||
EOF
|
||||
- name: Publish package
|
||||
|
120
CHANGELOG.md
120
CHANGELOG.md
@ -1,3 +1,123 @@
|
||||
## 3.3.1
|
||||
- Update `package:archive` to `>=4.0.0` constraint
|
||||
|
||||
## 3.3.0
|
||||
- Requires Flutter 3.27 and fix lints.
|
||||
- Add conditional imports to prevent importing `dart:io` on Web targets
|
||||
|
||||
## 3.2.0
|
||||
- Apply Blend mode at layer level
|
||||
|
||||
## 3.1.3
|
||||
- Update `package:archive` dependency constraints
|
||||
|
||||
## 3.1.2
|
||||
- Fixes for some animations generated by lottiefiles.com
|
||||
|
||||
## 3.1.1
|
||||
- Fix rounding-off error on progress calculation
|
||||
- Allow missing end values for integer animations
|
||||
|
||||
## 3.1.0
|
||||
- Use `package:http` for `Lottie.network`. This allows to drop dependency on `dart:html` and be compatible with `wasm`.
|
||||
- Fix new lints
|
||||
|
||||
## 3.0.0
|
||||
- Add `renderCache` parameter.
|
||||
|
||||
```dart
|
||||
Lottie.asset('assets/complex_animation.json',
|
||||
renderCache: RenderCache.raster,
|
||||
)
|
||||
```
|
||||
|
||||
Opt-in to a special render mode where the frames of the animation are lazily rendered and kept in a cache.
|
||||
Subsequent runs of the animation are cheaper to render.
|
||||
|
||||
There are 2 kinds of caches:
|
||||
|
||||
**RenderCache.raster**: keep the frame rasterized in the cache (as [dart:ui.Image]).
|
||||
Subsequent runs of the animation are very cheap for both the CPU and GPU but it takes
|
||||
a lot of memory.
|
||||
**RenderCache.drawingCommands**: keep the frame as a list of graphical operations ([dart:ui.Picture]).
|
||||
Subsequent runs of the animation are cheaper for the CPU but not for the GPU.
|
||||
|
||||
- Allow to load Telegram Stickers (.tgs)
|
||||
|
||||
```dart
|
||||
Lottie.asset(
|
||||
'sticker.tgs',
|
||||
decoder: LottieComposition.decodeGZip,
|
||||
)
|
||||
```
|
||||
|
||||
- Expose a hook to customize how to decode zip archives. This is useful for dotlottie archives (.lottie) when we want
|
||||
to specify a specific .json file inside the archive
|
||||
|
||||
```dart
|
||||
Lottie.asset(
|
||||
'animation.lottie',
|
||||
decoder: customDecoder,
|
||||
);
|
||||
|
||||
Future<LottieComposition?> customDecoder(List<int> bytes) {
|
||||
return LottieComposition.decodeZip(bytes, filePicker: (files) {
|
||||
return files.firstWhere((f) => f.name == 'animations/cat.json');
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
- Add `backgroundLoading` parameter to `Lottie.asset|network|file|memory`.
|
||||
If `backgroundLoading` is true, the animation will be loaded in a background isolate.
|
||||
This is useful for large animations that can take a long time to parse and block the UI work.
|
||||
|
||||
- Remove the name property from `LottieComposition`
|
||||
|
||||
- `imageProviderFactory` is not used in .zip file by default anymore.
|
||||
To restore the old behaviour, use:
|
||||
```dart
|
||||
Future<LottieComposition?> decoder(List<int> bytes) {
|
||||
return LottieComposition.decodeZip(bytes, imageProviderFactory: imageProviderFactory);
|
||||
}
|
||||
|
||||
Lottie.asset('anim.json', decoder: decoder)
|
||||
```
|
||||
|
||||
- Disable gradient cache optimization when `ValueDelegate.gradientColor` is used
|
||||
- Use `DefaultAssetBundle.of` in `AssetLottie` before fallback to `rootBundle`
|
||||
- Add `BuildContext` optional parameter in `LottieProvider.load`
|
||||
- Fixed varying opacity stops across keyframes in the same gradient
|
||||
- Fixed rounded corners for non-closed curves
|
||||
- Implement auto-orient
|
||||
- Add support for layer blend mode
|
||||
- Require Flutter 3.16
|
||||
|
||||
## 3.0.0-alpha.4
|
||||
|
||||
*See the latest 3.0.0 release*
|
||||
|
||||
## 3.0.0-alpha.3
|
||||
|
||||
*See the latest 3.0.0 release*
|
||||
|
||||
## 3.0.0-alpha.2
|
||||
|
||||
*See the latest 3.0.0 release*
|
||||
|
||||
## 3.0.0-alpha.1
|
||||
|
||||
*See the latest 3.0.0 release*
|
||||
|
||||
## 2.7.0
|
||||
- Support loading Fonts from a zip file
|
||||
- Fix a bug in Text with strokes
|
||||
- Fix gradient interpolation for opacity stops beyond the last color stop
|
||||
- Add color value callback to solid layer
|
||||
|
||||
## 2.6.0
|
||||
- Accept `List<int>` instead of `Uint8List` in `LottieComposition.fromBytes`
|
||||
- Stroke line cap defaults to butt instead of square
|
||||
|
||||
## 2.5.0
|
||||
- Add layer-level opacity option to LottieOptions
|
||||
- Fix TextLayer opacity calculation
|
||||
|
2
FUNDING.yml
Normal file
2
FUNDING.yml
Normal file
@ -0,0 +1,2 @@
|
||||
github: xvrh
|
||||
custom: https://buymeacoffee.com/xvrh
|
68
README.md
68
README.md
@ -10,6 +10,8 @@ This repository is an unofficial conversion of the [Lottie-android](https://gith
|
||||
|
||||
It works on Android, iOS, macOS, linux, windows and web.
|
||||
|
||||
<a href="https://www.buymeacoffee.com/xvrh" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" height="60" width="217"></a>
|
||||
|
||||
## Usage
|
||||
|
||||
### Simple animation
|
||||
@ -245,6 +247,72 @@ class _Animation extends StatelessWidget {
|
||||
}
|
||||
````
|
||||
|
||||
### Frame rate
|
||||
By default, the animation is played at the frame rate exported by AfterEffect.
|
||||
This is the most power-friendly as generally the animation is exported at 10 or 30 FPS compared to the phone's 60 or 120 FPS.
|
||||
If the result is not good, you can change the frame rate
|
||||
|
||||
````dart
|
||||
Lottie.asset('anim.json',
|
||||
// Use the device frame rate (up to 120FPS)
|
||||
frameRate: FrameRate.max,
|
||||
// Use the exported frame rate (default)
|
||||
frameRate: FrameRate.composition,
|
||||
// Specific frame rate
|
||||
frameRate: FrameRate(10),
|
||||
)
|
||||
````
|
||||
|
||||
### Telegram Stickers (.tgs) and DotLottie (.lottie)
|
||||
TGS file can be loaded by providing a special decoder
|
||||
|
||||
````dart
|
||||
Widget build(BuildContext context) {
|
||||
return ListView(
|
||||
children: [
|
||||
Lottie.network(
|
||||
'https://telegram.org/file/464001484/1/bzi7gr7XRGU.10147/815df2ef527132dd23',
|
||||
decoder: LottieComposition.decodeGZip,
|
||||
),
|
||||
Lottie.asset(
|
||||
'assets/LightningBug_file.tgs',
|
||||
decoder: LottieComposition.decodeGZip,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
````
|
||||
|
||||
You can select the correct .json file from a dotlottie (.lottie) archive by providing a custom decoder
|
||||
|
||||
````dart
|
||||
class Example extends StatelessWidget {
|
||||
const Example({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Lottie.asset(
|
||||
'assets/cat.lottie',
|
||||
decoder: customDecoder,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future<LottieComposition?> customDecoder(List<int> bytes) {
|
||||
return LottieComposition.decodeZip(bytes, filePicker: (files) {
|
||||
return files.firstWhereOrNull(
|
||||
(f) => f.name.startsWith('animations/') && f.name.endsWith('.json'));
|
||||
});
|
||||
}
|
||||
````
|
||||
|
||||
## Performance or excessive CPU/GPU usage
|
||||
|
||||
Version `v3.0` introduced the `renderCache` parameter to help reduce an excessive energy consumption.
|
||||
|
||||
In this mode, the frames of the animation are rendered lazily in an offscreen cache. Subsequent runs of the animation
|
||||
are cheaper to render. It helps reduce the power usage of the application at the cost of an increased memory usage.
|
||||
|
||||
## Limitations
|
||||
This port supports the same [feature set as Lottie Android](https://airbnb.io/lottie/#/supported-features).
|
||||
|
||||
|
@ -10,6 +10,8 @@ This repository is an unofficial conversion of the [Lottie-android](https://gith
|
||||
|
||||
It works on Android, iOS, macOS, linux, windows and web.
|
||||
|
||||
<a href="https://www.buymeacoffee.com/xvrh" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" height="60" width="217"></a>
|
||||
|
||||
## Usage
|
||||
|
||||
### Simple animation
|
||||
@ -76,6 +78,42 @@ For each `ValueDelegate` we can either provide a static `value` or a `callback`
|
||||
import 'example/lib/examples/simple_dynamic_properties.dart#example';
|
||||
````
|
||||
|
||||
### Frame rate
|
||||
By default, the animation is played at the frame rate exported by AfterEffect.
|
||||
This is the most power-friendly as generally the animation is exported at 10 or 30 FPS compared to the phone's 60 or 120 FPS.
|
||||
If the result is not good, you can change the frame rate
|
||||
|
||||
````dart
|
||||
Lottie.asset('anim.json',
|
||||
// Use the device frame rate (up to 120FPS)
|
||||
frameRate: FrameRate.max,
|
||||
// Use the exported frame rate (default)
|
||||
frameRate: FrameRate.composition,
|
||||
// Specific frame rate
|
||||
frameRate: FrameRate(10),
|
||||
)
|
||||
````
|
||||
|
||||
### Telegram Stickers (.tgs) and DotLottie (.lottie)
|
||||
TGS file can be loaded by providing a special decoder
|
||||
|
||||
````dart
|
||||
import 'example/lib/examples/telegram_stickers.dart#example';
|
||||
````
|
||||
|
||||
You can select the correct .json file from a dotlottie (.lottie) archive by providing a custom decoder
|
||||
|
||||
````dart
|
||||
import 'example/lib/examples/dotlottie.dart#example';
|
||||
````
|
||||
|
||||
## Performance or excessive CPU/GPU usage
|
||||
|
||||
Version `v3.0` introduced the `renderCache` parameter to help reduce an excessive energy consumption.
|
||||
|
||||
In this mode, the frames of the animation are rendered lazily in an offscreen cache. Subsequent runs of the animation
|
||||
are cheaper to render. It helps reduce the power usage of the application at the cost of an increased memory usage.
|
||||
|
||||
## Limitations
|
||||
This port supports the same [feature set as Lottie Android](https://airbnb.io/lottie/#/supported-features).
|
||||
|
||||
|
@ -18,7 +18,6 @@ linter:
|
||||
avoid_js_rounded_ints: true
|
||||
avoid_positional_boolean_parameters: true
|
||||
avoid_redundant_argument_values: true
|
||||
avoid_returning_null_for_future: true
|
||||
avoid_setters_without_getters: true
|
||||
avoid_type_to_string: true
|
||||
avoid_unused_constructor_parameters: true
|
||||
|
1
example/.gitignore
vendored
1
example/.gitignore
vendored
@ -31,7 +31,6 @@
|
||||
/build/
|
||||
|
||||
# Web related
|
||||
lib/generated_plugin_registrant.dart
|
||||
|
||||
# Exceptions to above rules.
|
||||
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
|
||||
|
@ -1,3 +1,9 @@
|
||||
plugins {
|
||||
id "com.android.application"
|
||||
id "kotlin-android"
|
||||
id "dev.flutter.flutter-gradle-plugin"
|
||||
}
|
||||
|
||||
def localProperties = new Properties()
|
||||
def localPropertiesFile = rootProject.file('local.properties')
|
||||
if (localPropertiesFile.exists()) {
|
||||
@ -6,11 +12,6 @@ if (localPropertiesFile.exists()) {
|
||||
}
|
||||
}
|
||||
|
||||
def flutterRoot = localProperties.getProperty('flutter.sdk')
|
||||
if (flutterRoot == null) {
|
||||
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
|
||||
}
|
||||
|
||||
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
|
||||
if (flutterVersionCode == null) {
|
||||
flutterVersionCode = '1'
|
||||
@ -21,12 +22,10 @@ if (flutterVersionName == null) {
|
||||
flutterVersionName = '1.0'
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
||||
|
||||
android {
|
||||
namespace "com.github.xvrh.lottie.example"
|
||||
compileSdkVersion flutter.compileSdkVersion
|
||||
ndkVersion flutter.ndkVersion
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
@ -44,6 +43,8 @@ android {
|
||||
defaultConfig {
|
||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||
applicationId "com.github.xvrh.lottie.example"
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
||||
minSdkVersion flutter.minSdkVersion
|
||||
targetSdkVersion flutter.targetSdkVersion
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
@ -63,6 +64,4 @@ flutter {
|
||||
source '../..'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
}
|
||||
dependencies {}
|
||||
|
@ -1,6 +1,6 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.github.xvrh.lottie.example">
|
||||
<!-- Flutter needs it to communicate with the running application
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- The INTERNET permission is required for development. Specifically,
|
||||
the Flutter tool needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
|
@ -1,6 +1,5 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.github.xvrh.lottie.example">
|
||||
<application
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<application
|
||||
android:label="example"
|
||||
android:name="${applicationName}"
|
||||
android:icon="@mipmap/ic_launcher">
|
||||
|
@ -3,7 +3,7 @@
|
||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
|
||||
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||
<!-- Show a splash screen on the activity. Automatically removed when
|
||||
Flutter draws its first frame -->
|
||||
the Flutter engine draws its first frame -->
|
||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
||||
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||
<!-- Show a splash screen on the activity. Automatically removed when
|
||||
Flutter draws its first frame -->
|
||||
the Flutter engine draws its first frame -->
|
||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
|
@ -1,6 +1,6 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.github.xvrh.lottie.example">
|
||||
<!-- Flutter needs it to communicate with the running application
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- The INTERNET permission is required for development. Specifically,
|
||||
the Flutter tool needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
|
@ -1,12 +1,12 @@
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.6.10'
|
||||
ext.kotlin_version = '1.7.10'
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:4.1.0'
|
||||
classpath 'com.android.tools.build:gradle:7.3.0'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
@ -26,6 +26,6 @@ subprojects {
|
||||
project.evaluationDependsOn(':app')
|
||||
}
|
||||
|
||||
task clean(type: Delete) {
|
||||
tasks.register("clean", Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
#Fri Jun 23 08:50:38 CEST 2017
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
|
||||
|
@ -1,11 +1,20 @@
|
||||
include ':app'
|
||||
pluginManagement {
|
||||
def flutterSdkPath = {
|
||||
def properties = new Properties()
|
||||
file("local.properties").withInputStream { properties.load(it) }
|
||||
def flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
|
||||
return flutterSdkPath
|
||||
}
|
||||
settings.ext.flutterSdkPath = flutterSdkPath()
|
||||
|
||||
def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
|
||||
def properties = new Properties()
|
||||
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
|
||||
|
||||
assert localPropertiesFile.exists()
|
||||
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
|
||||
plugins {
|
||||
id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false
|
||||
}
|
||||
}
|
||||
|
||||
def flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
|
||||
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
|
||||
include ":app"
|
||||
|
||||
apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle"
|
||||
|
1
example/assets/Animation-1700642783167.json
Normal file
1
example/assets/Animation-1700642783167.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.12.1","fr":25,"ip":0,"op":50,"w":1080,"h":2330,"nm":"Testcomp","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Top Shape With Multiply","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[540,1165,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[608,608],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.996078012504,0.996078012504,0.996078012504,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.108819677316,0.687484142827,0.956862745098,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[4,-261],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":825,"st":0,"ct":1,"bm":1},{"ddd":0,"ind":2,"ty":4,"nm":"Shape With Outline","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-45,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.25,"y":1},"o":{"x":0.75,"y":0},"t":0,"s":[524,1208,0],"to":[0,39.333,0],"ti":[0,0,0]},{"i":{"x":0.25,"y":1},"o":{"x":0.75,"y":0},"t":25,"s":[524,1444,0],"to":[0,0,0],"ti":[0,39.333,0]},{"t":49,"s":[524,1208,0]}],"ix":2,"l":2},"a":{"a":0,"k":[-74,327,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":24,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.109803929048,0.686274509804,0.956862804936,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-74,327],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":825,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":1,"nm":"BKG","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[540,1165,0],"ix":2,"l":2},"a":{"a":0,"k":[540,1165,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"sw":1080,"sh":2330,"sc":"#ffffff","ip":0,"op":825,"st":0,"bm":0}],"markers":[],"props":{}}
|
441
example/assets/GradientColorInterpolation.json
Normal file
441
example/assets/GradientColorInterpolation.json
Normal file
@ -0,0 +1,441 @@
|
||||
{
|
||||
"v": "4.8.0",
|
||||
"meta": {
|
||||
"g": "LottieFiles AE 3.1.1",
|
||||
"a": "",
|
||||
"k": "",
|
||||
"d": "",
|
||||
"tc": ""
|
||||
},
|
||||
"fr": 30,
|
||||
"ip": 0,
|
||||
"op": 151,
|
||||
"w": 430,
|
||||
"h": 932,
|
||||
"nm": "Sticker Unpack",
|
||||
"ddd": 1,
|
||||
"assets": [
|
||||
{
|
||||
"id": "comp_0",
|
||||
"layers": [
|
||||
]
|
||||
}
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"ddd": 1,
|
||||
"ind": 1,
|
||||
"ty": 0,
|
||||
"nm": "Pc_Sticker Pack",
|
||||
"refId": "comp_0",
|
||||
"sr": 1,
|
||||
"ks": {
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 11
|
||||
},
|
||||
"rx": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"i": {
|
||||
"x": [
|
||||
0.421
|
||||
],
|
||||
"y": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"x": [
|
||||
0.55
|
||||
],
|
||||
"y": [
|
||||
0
|
||||
]
|
||||
},
|
||||
"t": 1,
|
||||
"s": [
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"i": {
|
||||
"x": [
|
||||
0.985
|
||||
],
|
||||
"y": [
|
||||
0.168
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"x": [
|
||||
0.857
|
||||
],
|
||||
"y": [
|
||||
0
|
||||
]
|
||||
},
|
||||
"t": 21,
|
||||
"s": [
|
||||
-1.9
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 41,
|
||||
"s": [
|
||||
24.3
|
||||
]
|
||||
}
|
||||
],
|
||||
"ix": 8
|
||||
},
|
||||
"ry": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"i": {
|
||||
"x": [
|
||||
0.421
|
||||
],
|
||||
"y": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"x": [
|
||||
0.55
|
||||
],
|
||||
"y": [
|
||||
0
|
||||
]
|
||||
},
|
||||
"t": 1,
|
||||
"s": [
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"i": {
|
||||
"x": [
|
||||
0.985
|
||||
],
|
||||
"y": [
|
||||
-0.28
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"x": [
|
||||
0.857
|
||||
],
|
||||
"y": [
|
||||
0
|
||||
]
|
||||
},
|
||||
"t": 21,
|
||||
"s": [
|
||||
3.7
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 41,
|
||||
"s": [
|
||||
16
|
||||
]
|
||||
}
|
||||
],
|
||||
"ix": 9
|
||||
},
|
||||
"rz": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 10
|
||||
},
|
||||
"or": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 7
|
||||
},
|
||||
"p": {
|
||||
"s": true,
|
||||
"x": {
|
||||
"a": 0,
|
||||
"k": 215,
|
||||
"ix": 3
|
||||
},
|
||||
"y": {
|
||||
"a": 0,
|
||||
"k": 466,
|
||||
"ix": 4
|
||||
},
|
||||
"z": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 5
|
||||
}
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
221,
|
||||
307.5,
|
||||
0
|
||||
],
|
||||
"ix": 1
|
||||
},
|
||||
"s": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"i": {
|
||||
"x": [
|
||||
0.421,
|
||||
0.421,
|
||||
0.667
|
||||
],
|
||||
"y": [
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"x": [
|
||||
0.55,
|
||||
0.55,
|
||||
0.333
|
||||
],
|
||||
"y": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"t": 0,
|
||||
"s": [
|
||||
64.6,
|
||||
64.6,
|
||||
100
|
||||
]
|
||||
},
|
||||
{
|
||||
"i": {
|
||||
"x": [
|
||||
0.985,
|
||||
0.985,
|
||||
0.667
|
||||
],
|
||||
"y": [
|
||||
0.192,
|
||||
0.192,
|
||||
1
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"x": [
|
||||
0.857,
|
||||
0.857,
|
||||
0.333
|
||||
],
|
||||
"y": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"t": 20,
|
||||
"s": [
|
||||
74.2,
|
||||
74.2,
|
||||
100
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 40,
|
||||
"s": [
|
||||
7,
|
||||
7,
|
||||
100
|
||||
]
|
||||
}
|
||||
],
|
||||
"ix": 6
|
||||
}
|
||||
},
|
||||
"ao": 0,
|
||||
"w": 442,
|
||||
"h": 615,
|
||||
"ip": 0,
|
||||
"op": 41,
|
||||
"st": 0,
|
||||
"bm": 0
|
||||
},
|
||||
{
|
||||
"ddd": 0,
|
||||
"ind": 14,
|
||||
"ty": 4,
|
||||
"nm": "Shape Layer 2",
|
||||
"parent": 1,
|
||||
"sr": 1,
|
||||
"ks": {
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 11
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 10
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
221,
|
||||
307.5,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 1
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
538.543,
|
||||
538.543,
|
||||
100
|
||||
],
|
||||
"ix": 6
|
||||
}
|
||||
},
|
||||
"ao": 0,
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"it": [
|
||||
{
|
||||
"ty": "rc",
|
||||
"d": 1,
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
294,
|
||||
403
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 3
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 4
|
||||
},
|
||||
"nm": "Rectangle Path 1",
|
||||
"mn": "ADBE Vector Shape - Rect",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "gf",
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 10
|
||||
},
|
||||
"r": 1,
|
||||
"bm": 0,
|
||||
"g": {
|
||||
"p": 3,
|
||||
"k": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0.373,
|
||||
0.024,
|
||||
0.898,
|
||||
0.359,
|
||||
0.186,
|
||||
0.012,
|
||||
0.449,
|
||||
0.998,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0.5,
|
||||
0.5,
|
||||
1,
|
||||
0
|
||||
],
|
||||
"ix": 9
|
||||
}
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 5
|
||||
},
|
||||
"e": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
149,
|
||||
0
|
||||
],
|
||||
"ix": 6
|
||||
},
|
||||
"t": 2,
|
||||
"h": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 7
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 8
|
||||
},
|
||||
"nm": "Gradient Fill 1",
|
||||
"mn": "ADBE Vector Graphic - G-Fill",
|
||||
"hd": false
|
||||
}
|
||||
],
|
||||
"nm": "Rectangle 1",
|
||||
"np": 3,
|
||||
"cix": 2,
|
||||
"bm": 0,
|
||||
"ix": 1,
|
||||
"mn": "ADBE Vector Group",
|
||||
"hd": false
|
||||
}
|
||||
],
|
||||
"ip": 0,
|
||||
"op": 42,
|
||||
"st": 0,
|
||||
"bm": 0
|
||||
}
|
||||
],
|
||||
"markers": []
|
||||
}
|
BIN
example/assets/LightningBug_file.tgs
Normal file
BIN
example/assets/LightningBug_file.tgs
Normal file
Binary file not shown.
1
example/assets/Tests/AutoOrient.json
Normal file
1
example/assets/Tests/AutoOrient.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.12.1","fr":29.9700012207031,"ip":0,"op":284.000011567557,"w":400,"h":400,"nm":"ao","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"shape","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.641,"y":0.641},"o":{"x":0.167,"y":0.167},"t":0,"s":[68.5,44.5,0],"to":[2.395,1.173,0],"ti":[-52,-114,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.438,"y":0.438},"t":83.533,"s":[304.5,148.5,0],"to":[-8,108,0],"ti":[-2.164,-1.328,0]},{"i":{"x":0.575,"y":0.575},"o":{"x":0.167,"y":0.167},"t":114,"s":[340.035,204.247,0],"to":[60.399,77.002,0],"ti":[118,-2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.407,"y":0.407},"t":189.251,"s":[240.5,270.5,0],"to":[-118,2,0],"ti":[52.68,50.729,0]},{"t":283.000011526826,"s":[14.5,222.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":1,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-172.23,-7.099],[-161.73,29.401],[-73.23,-21.099]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.125,22.142],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":284.000011567557,"st":0,"ct":1,"bm":0}],"markers":[],"props":{}}
|
898
example/assets/Tests/BounceEasings.json
Normal file
898
example/assets/Tests/BounceEasings.json
Normal file
@ -0,0 +1,898 @@
|
||||
{
|
||||
"v": "5.7.5",
|
||||
"fr": 100,
|
||||
"ip": 0,
|
||||
"op": 400,
|
||||
"w": 800,
|
||||
"h": 1000,
|
||||
"nm": "Comp 1",
|
||||
"ddd": 0,
|
||||
"assets": [],
|
||||
"layers": [
|
||||
{
|
||||
"ddd": 0,
|
||||
"ind": 0,
|
||||
"ty": 4,
|
||||
"nm": "Bounce out curve",
|
||||
"sr": 1,
|
||||
"ks": {
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
"ao": 0,
|
||||
"hd": false,
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"hd": false,
|
||||
"it": [
|
||||
{
|
||||
"ty": "rc",
|
||||
"hd": false,
|
||||
"d": 1,
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "fl",
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0.21176470588235294,
|
||||
0.9176470588235294,
|
||||
1
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"r": 1,
|
||||
"bm": 0,
|
||||
"nm": "Fill 1",
|
||||
"mn": "ADBE Vector Graphic - Fill",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tm",
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"e": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"m": 1,
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"hd": false,
|
||||
"p": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"t": 0,
|
||||
"s": [
|
||||
510,
|
||||
100
|
||||
],
|
||||
"i": {
|
||||
"x": [
|
||||
0.2
|
||||
],
|
||||
"y": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"x": [
|
||||
0.5
|
||||
],
|
||||
"y": [
|
||||
-0.5
|
||||
]
|
||||
},
|
||||
"ti": [
|
||||
-268.19047619047615,
|
||||
-294.42857142857247
|
||||
],
|
||||
"to": [
|
||||
-268.19047619047615,
|
||||
238.90476190476068
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 400,
|
||||
"s": [
|
||||
510,
|
||||
900
|
||||
],
|
||||
"i": {
|
||||
"x": [
|
||||
1
|
||||
],
|
||||
"y": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"x": [
|
||||
0
|
||||
],
|
||||
"y": [
|
||||
0
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ip": 0,
|
||||
"op": 401,
|
||||
"st": 0,
|
||||
"bm": 0
|
||||
},
|
||||
{
|
||||
"ddd": 0,
|
||||
"ind": 1,
|
||||
"ty": 4,
|
||||
"nm": "Bounce in curve",
|
||||
"sr": 1,
|
||||
"ks": {
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
"ao": 0,
|
||||
"hd": false,
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"hd": false,
|
||||
"it": [
|
||||
{
|
||||
"ty": "rc",
|
||||
"hd": false,
|
||||
"d": 1,
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "fl",
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
1,
|
||||
0.3411764705882353,
|
||||
0.21176470588235294
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"r": 1,
|
||||
"bm": 0,
|
||||
"nm": "Fill 1",
|
||||
"mn": "ADBE Vector Graphic - Fill",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tm",
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"e": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"m": 1,
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"hd": false,
|
||||
"p": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"t": 0,
|
||||
"s": [
|
||||
360,
|
||||
100
|
||||
],
|
||||
"i": {
|
||||
"x": [
|
||||
0.5
|
||||
],
|
||||
"y": [
|
||||
1.5
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"x": [
|
||||
0.8
|
||||
],
|
||||
"y": [
|
||||
0
|
||||
]
|
||||
},
|
||||
"ti": [
|
||||
-268.19047619047615,
|
||||
-294.42857142857247
|
||||
],
|
||||
"to": [
|
||||
-268.19047619047615,
|
||||
238.90476190476068
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 400,
|
||||
"s": [
|
||||
360,
|
||||
900
|
||||
],
|
||||
"i": {
|
||||
"x": [
|
||||
1
|
||||
],
|
||||
"y": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"x": [
|
||||
0
|
||||
],
|
||||
"y": [
|
||||
0
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ip": 0,
|
||||
"op": 401,
|
||||
"st": 0,
|
||||
"bm": 0
|
||||
},
|
||||
{
|
||||
"ddd": 0,
|
||||
"ind": 2,
|
||||
"ty": 4,
|
||||
"nm": "Bounce in",
|
||||
"sr": 1,
|
||||
"ks": {
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
"ao": 0,
|
||||
"hd": false,
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"hd": false,
|
||||
"it": [
|
||||
{
|
||||
"ty": "rc",
|
||||
"hd": false,
|
||||
"d": 1,
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "fl",
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
1,
|
||||
0.7254901960784313,
|
||||
0.5764705882352941
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"r": 1,
|
||||
"bm": 0,
|
||||
"nm": "Fill 1",
|
||||
"mn": "ADBE Vector Graphic - Fill",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tm",
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"e": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"m": 1,
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"hd": false,
|
||||
"p": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"t": 0,
|
||||
"s": [
|
||||
650,
|
||||
100
|
||||
],
|
||||
"i": {
|
||||
"x": [
|
||||
0.5
|
||||
],
|
||||
"y": [
|
||||
1.5
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"x": [
|
||||
0.8
|
||||
],
|
||||
"y": [
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 400,
|
||||
"s": [
|
||||
650,
|
||||
900
|
||||
],
|
||||
"i": {
|
||||
"x": [
|
||||
1
|
||||
],
|
||||
"y": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"x": [
|
||||
0
|
||||
],
|
||||
"y": [
|
||||
0
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ip": 0,
|
||||
"op": 401,
|
||||
"st": 0,
|
||||
"bm": 0
|
||||
},
|
||||
{
|
||||
"ddd": 0,
|
||||
"ind": 3,
|
||||
"ty": 4,
|
||||
"nm": "Bounce out",
|
||||
"sr": 1,
|
||||
"ks": {
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
"ao": 0,
|
||||
"hd": false,
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"hd": false,
|
||||
"it": [
|
||||
{
|
||||
"ty": "rc",
|
||||
"hd": false,
|
||||
"d": 1,
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "fl",
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
1,
|
||||
0.8392156862745098,
|
||||
0.25098039215686274
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"r": 1,
|
||||
"bm": 0,
|
||||
"nm": "Fill 1",
|
||||
"mn": "ADBE Vector Graphic - Fill",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tm",
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"e": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"m": 1,
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"hd": false,
|
||||
"p": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"t": 0,
|
||||
"s": [
|
||||
150,
|
||||
100
|
||||
],
|
||||
"i": {
|
||||
"x": [
|
||||
0.2
|
||||
],
|
||||
"y": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"x": [
|
||||
0.5
|
||||
],
|
||||
"y": [
|
||||
-0.5
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 400,
|
||||
"s": [
|
||||
150,
|
||||
900
|
||||
],
|
||||
"i": {
|
||||
"x": [
|
||||
1
|
||||
],
|
||||
"y": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"x": [
|
||||
0
|
||||
],
|
||||
"y": [
|
||||
0
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ip": 0,
|
||||
"op": 401,
|
||||
"st": 0,
|
||||
"bm": 0
|
||||
}
|
||||
],
|
||||
"markers": []
|
||||
}
|
5855
example/assets/Tests/DefaultLineJoinCap.json
Normal file
5855
example/assets/Tests/DefaultLineJoinCap.json
Normal file
File diff suppressed because it is too large
Load Diff
522
example/assets/Tests/GradientColorKeyframeAnimation.json
Normal file
522
example/assets/Tests/GradientColorKeyframeAnimation.json
Normal file
@ -0,0 +1,522 @@
|
||||
{
|
||||
"v": "4.8.0",
|
||||
"meta": {
|
||||
"g": "LottieFiles AE 3.5.2",
|
||||
"a": "",
|
||||
"k": "",
|
||||
"d": "",
|
||||
"tc": "#000000"
|
||||
},
|
||||
"fr": 24,
|
||||
"ip": 0,
|
||||
"op": 6912,
|
||||
"w": 312,
|
||||
"h": 312,
|
||||
"nm": "Master_1-4a- GREEN",
|
||||
"ddd": 0,
|
||||
"assets": [],
|
||||
"layers": [
|
||||
{
|
||||
"ddd": 0,
|
||||
"ind": 30,
|
||||
"ty": 4,
|
||||
"nm": "Background_Layers",
|
||||
"sr": 1,
|
||||
"ks": {
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 11
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 10
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
158,
|
||||
154,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 1
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
50,
|
||||
50,
|
||||
100
|
||||
],
|
||||
"ix": 6
|
||||
}
|
||||
},
|
||||
"ao": 0,
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"it": [
|
||||
{
|
||||
"ind": 0,
|
||||
"ty": "sh",
|
||||
"ix": 1,
|
||||
"ks": {
|
||||
"a": 0,
|
||||
"k": {
|
||||
"i": [
|
||||
[
|
||||
149.841,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
-149.841
|
||||
],
|
||||
[
|
||||
-149.841,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
149.841
|
||||
]
|
||||
],
|
||||
"o": [
|
||||
[
|
||||
-149.841,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
149.841
|
||||
],
|
||||
[
|
||||
149.841,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
-149.841
|
||||
]
|
||||
],
|
||||
"v": [
|
||||
[
|
||||
0,
|
||||
-271.311
|
||||
],
|
||||
[
|
||||
-271.311,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
271.311
|
||||
],
|
||||
[
|
||||
271.311,
|
||||
0
|
||||
]
|
||||
],
|
||||
"c": true
|
||||
},
|
||||
"ix": 2
|
||||
},
|
||||
"nm": "Path 1",
|
||||
"mn": "ADBE Vector Shape - Group",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "st",
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"ix": 3
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 4
|
||||
},
|
||||
"w": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 5
|
||||
},
|
||||
"lc": 1,
|
||||
"lj": 1,
|
||||
"ml": 4,
|
||||
"bm": 0,
|
||||
"nm": "Stroke 1",
|
||||
"mn": "ADBE Vector Graphic - Stroke",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "gf",
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 60,
|
||||
"ix": 10
|
||||
},
|
||||
"r": 1,
|
||||
"bm": 0,
|
||||
"g": {
|
||||
"p": 3,
|
||||
"k": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"i": {
|
||||
"x": 0.833,
|
||||
"y": 0.833
|
||||
},
|
||||
"o": {
|
||||
"x": 0.167,
|
||||
"y": 0.167
|
||||
},
|
||||
"t": 898.499,
|
||||
"s": [
|
||||
0.799,
|
||||
0.988,
|
||||
0.875,
|
||||
0.435,
|
||||
0.9,
|
||||
0.994,
|
||||
0.937,
|
||||
0.718,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0.072,
|
||||
1,
|
||||
0.536,
|
||||
0.5,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"i": {
|
||||
"x": 0.833,
|
||||
"y": 0.833
|
||||
},
|
||||
"o": {
|
||||
"x": 0.167,
|
||||
"y": 0.167
|
||||
},
|
||||
"t": 1112.312,
|
||||
"s": [
|
||||
0.799,
|
||||
0.988,
|
||||
0.875,
|
||||
0.435,
|
||||
0.9,
|
||||
0.994,
|
||||
0.937,
|
||||
0.718,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0.072,
|
||||
1,
|
||||
0.536,
|
||||
0.5,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"i": {
|
||||
"x": 0.833,
|
||||
"y": 0.833
|
||||
},
|
||||
"o": {
|
||||
"x": 0.167,
|
||||
"y": 0.167
|
||||
},
|
||||
"t": 1330.13,
|
||||
"s": [
|
||||
0.799,
|
||||
0.828,
|
||||
0.855,
|
||||
0.554,
|
||||
0.9,
|
||||
0.914,
|
||||
0.928,
|
||||
0.777,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0.072,
|
||||
1,
|
||||
0.536,
|
||||
0.5,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"i": {
|
||||
"x": 0.833,
|
||||
"y": 0.833
|
||||
},
|
||||
"o": {
|
||||
"x": 0.167,
|
||||
"y": 0.167
|
||||
},
|
||||
"t": 1420.621,
|
||||
"s": [
|
||||
0.799,
|
||||
0.761,
|
||||
0.847,
|
||||
0.604,
|
||||
0.9,
|
||||
0.88,
|
||||
0.924,
|
||||
0.802,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0.072,
|
||||
1,
|
||||
0.536,
|
||||
0.5,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"i": {
|
||||
"x": 0.833,
|
||||
"y": 0.833
|
||||
},
|
||||
"o": {
|
||||
"x": 0.167,
|
||||
"y": 0.167
|
||||
},
|
||||
"t": 4054.455,
|
||||
"s": [
|
||||
0.799,
|
||||
0.761,
|
||||
0.847,
|
||||
0.604,
|
||||
0.9,
|
||||
0.88,
|
||||
0.924,
|
||||
0.802,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0.072,
|
||||
1,
|
||||
0.536,
|
||||
0.5,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"i": {
|
||||
"x": 0.833,
|
||||
"y": 0.833
|
||||
},
|
||||
"o": {
|
||||
"x": 0.167,
|
||||
"y": 0.167
|
||||
},
|
||||
"t": 4311.512,
|
||||
"s": [
|
||||
0.799,
|
||||
0.675,
|
||||
0.859,
|
||||
0.894,
|
||||
0.9,
|
||||
0.837,
|
||||
0.929,
|
||||
0.947,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0.072,
|
||||
1,
|
||||
0.536,
|
||||
0.5,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"i": {
|
||||
"x": 0.833,
|
||||
"y": 0.833
|
||||
},
|
||||
"o": {
|
||||
"x": 0.167,
|
||||
"y": 0.167
|
||||
},
|
||||
"t": 6439.239,
|
||||
"s": [
|
||||
0.799,
|
||||
0.675,
|
||||
0.859,
|
||||
0.894,
|
||||
0.9,
|
||||
0.837,
|
||||
0.929,
|
||||
0.947,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0.072,
|
||||
1,
|
||||
0.536,
|
||||
0.5,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 6672.2724609375,
|
||||
"s": [
|
||||
0.799,
|
||||
0.71,
|
||||
0.098,
|
||||
0.392,
|
||||
0.9,
|
||||
0.855,
|
||||
0.549,
|
||||
0.696,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0.072,
|
||||
1,
|
||||
0.536,
|
||||
0.5,
|
||||
1,
|
||||
0
|
||||
]
|
||||
}
|
||||
],
|
||||
"ix": 9
|
||||
}
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0.798,
|
||||
1.032
|
||||
],
|
||||
"ix": 5
|
||||
},
|
||||
"e": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
244.484,
|
||||
0
|
||||
],
|
||||
"ix": 6
|
||||
},
|
||||
"t": 2,
|
||||
"h": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 7
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 8
|
||||
},
|
||||
"nm": "Gradient Fill 1",
|
||||
"mn": "ADBE Vector Graphic - G-Fill",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
-4.865,
|
||||
2.221
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 1
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
108.71,
|
||||
108.71
|
||||
],
|
||||
"ix": 3
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 6
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 7
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 4
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 5
|
||||
},
|
||||
"nm": "Transformieren"
|
||||
}
|
||||
],
|
||||
"nm": "Ellipse 1",
|
||||
"np": 3,
|
||||
"cix": 2,
|
||||
"bm": 0,
|
||||
"ix": 1,
|
||||
"mn": "ADBE Vector Group",
|
||||
"hd": false
|
||||
}
|
||||
],
|
||||
"ip": -8.80880880880881,
|
||||
"op": 7462.66266266266,
|
||||
"st": -8.80880880880881,
|
||||
"bm": 0
|
||||
}
|
||||
],
|
||||
"markers": []
|
||||
}
|
264
example/assets/Tests/GradientWithVaryingOpacityStops.json
Normal file
264
example/assets/Tests/GradientWithVaryingOpacityStops.json
Normal file
@ -0,0 +1,264 @@
|
||||
{
|
||||
"v": "5.12.1",
|
||||
"fr": 60,
|
||||
"ip": 0,
|
||||
"op": 240,
|
||||
"w": 430,
|
||||
"h": 795,
|
||||
"nm": "gradient",
|
||||
"ddd": 0,
|
||||
"assets": [
|
||||
{
|
||||
"id": "comp_0",
|
||||
"nm": "gradient",
|
||||
"fr": 60,
|
||||
"layers": [
|
||||
{
|
||||
"ddd": 0,
|
||||
"ind": 1,
|
||||
"ty": 4,
|
||||
"nm": "1",
|
||||
"sr": 1,
|
||||
"ks": {
|
||||
"o": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"i": { "x": [0.833], "y": [0.833] },
|
||||
"o": { "x": [0.167], "y": [0.167] },
|
||||
"t": 0,
|
||||
"s": [100]
|
||||
},
|
||||
{
|
||||
"i": { "x": [0.833], "y": [0.833] },
|
||||
"o": { "x": [0.167], "y": [0.167] },
|
||||
"t": 30,
|
||||
"s": [75]
|
||||
},
|
||||
{ "t": 59, "s": [100] }
|
||||
],
|
||||
"ix": 11
|
||||
},
|
||||
"r": { "a": 0, "k": 0, "ix": 10 },
|
||||
"p": { "a": 0, "k": [51.5, 58, 0], "ix": 2, "l": 2 },
|
||||
"a": { "a": 0, "k": [-4.5, -130.5, 0], "ix": 1, "l": 2 },
|
||||
"s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 }
|
||||
},
|
||||
"ao": 0,
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"it": [
|
||||
{
|
||||
"d": 1,
|
||||
"ty": "el",
|
||||
"s": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"i": { "x": [0.833, 0.833], "y": [0.833, 0.833] },
|
||||
"o": { "x": [0.167, 0.167], "y": [0.167, 0.167] },
|
||||
"t": 0,
|
||||
"s": [50, 50]
|
||||
},
|
||||
{
|
||||
"i": { "x": [0.833, 0.833], "y": [0.833, 0.833] },
|
||||
"o": { "x": [0.167, 0.167], "y": [0.167, 0.167] },
|
||||
"t": 28,
|
||||
"s": [46, 46]
|
||||
},
|
||||
{
|
||||
"i": { "x": [0.833, 0.833], "y": [0.833, 0.833] },
|
||||
"o": { "x": [0.167, 0.167], "y": [0.167, 0.167] },
|
||||
"t": 59,
|
||||
"s": [50, 50]
|
||||
},
|
||||
{
|
||||
"i": { "x": [0.833, 0.833], "y": [0.833, 0.833] },
|
||||
"o": { "x": [0.167, 0.167], "y": [0.167, 0.167] },
|
||||
"t": 120,
|
||||
"s": [73.252, 73.252]
|
||||
},
|
||||
{ "t": 239, "s": [86.252, 86.252] }
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"p": { "a": 0, "k": [0, 0], "ix": 3 },
|
||||
"nm": "1",
|
||||
"mn": "ADBE Vector Shape - Ellipse",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "gf",
|
||||
"o": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"i": { "x": [0.833], "y": [0.833] },
|
||||
"o": { "x": [0.167], "y": [0.167] },
|
||||
"t": 0,
|
||||
"s": [0]
|
||||
},
|
||||
{
|
||||
"i": { "x": [0.833], "y": [0.833] },
|
||||
"o": { "x": [0.167], "y": [0.167] },
|
||||
"t": 15,
|
||||
"s": [83]
|
||||
},
|
||||
{
|
||||
"i": { "x": [0.833], "y": [0.833] },
|
||||
"o": { "x": [0.167], "y": [0.167] },
|
||||
"t": 44,
|
||||
"s": [100]
|
||||
},
|
||||
{ "t": 59, "s": [0] }
|
||||
],
|
||||
"ix": 10
|
||||
},
|
||||
"r": 1,
|
||||
"bm": 0,
|
||||
"g": {
|
||||
"p": 3,
|
||||
"k": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"i": { "x": 0.833, "y": 0.833 },
|
||||
"o": { "x": 0.167, "y": 0.167 },
|
||||
"t": 0,
|
||||
"s": [
|
||||
0, 1, 1, 1, 0.5, 1, 1, 1, 1, 1, 1, 1, 0, 0.1, 0.5,
|
||||
0.3, 1, 0.5
|
||||
]
|
||||
},
|
||||
{
|
||||
"i": { "x": 0.833, "y": 0.833 },
|
||||
"o": { "x": 0.167, "y": 0.167 },
|
||||
"t": 15,
|
||||
"s": [
|
||||
0, 0.992, 0.995, 1, 0.5, 0.996, 0.998, 1, 1, 1, 1,
|
||||
1, 0, 0.2, 0.5, 0.45, 1, 0.7
|
||||
]
|
||||
},
|
||||
{
|
||||
"i": { "x": 0.833, "y": 0.833 },
|
||||
"o": { "x": 0.167, "y": 0.167 },
|
||||
"t": 31,
|
||||
"s": [
|
||||
0, 1, 1, 1, 0.5, 1, 1, 1, 1, 1, 1, 1, 0, 0.1, 0.5,
|
||||
0.35, 1, 0.6
|
||||
]
|
||||
},
|
||||
{
|
||||
"i": { "x": 0.833, "y": 0.833 },
|
||||
"o": { "x": 0.167, "y": 0.167 },
|
||||
"t": 59,
|
||||
"s": [
|
||||
0, 1, 1, 1, 0.5, 1, 1, 1, 1, 1, 1, 1, 0, 0.2, 0.5,
|
||||
0.45, 1, 0.7
|
||||
]
|
||||
},
|
||||
{
|
||||
"i": { "x": 0.833, "y": 0.833 },
|
||||
"o": { "x": 0.167, "y": 0.167 },
|
||||
"t": 160,
|
||||
"s": [
|
||||
0, 0.302, 0.391, 0.586, 0.529, 0.17, 0.239, 0.393,
|
||||
1, 0.039, 0.086, 0.2, 0, 1, 0.5, 1, 1, 1
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 239,
|
||||
"s": [
|
||||
0, 0.053, 0.362, 0.77, 0.5, 0.046, 0.224, 0.485, 1,
|
||||
0.039, 0.086, 0.2, 0, 1, 0.5, 1, 1, 1
|
||||
]
|
||||
}
|
||||
],
|
||||
"ix": 9
|
||||
}
|
||||
},
|
||||
"s": { "a": 0, "k": [0, 0], "ix": 5 },
|
||||
"e": { "a": 0, "k": [29.461, 0.027], "ix": 6 },
|
||||
"t": 2,
|
||||
"h": { "a": 0, "k": 0, "ix": 7 },
|
||||
"a": { "a": 0, "k": 0, "ix": 8 },
|
||||
"nm": "1",
|
||||
"mn": "ADBE Vector Graphic - G-Fill",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"p": { "a": 0, "k": [-3.372, -136.224], "ix": 2 },
|
||||
"a": { "a": 0, "k": [0, 0], "ix": 1 },
|
||||
"s": { "a": 0, "k": [110.999, 110.999], "ix": 3 },
|
||||
"r": { "a": 0, "k": 0, "ix": 6 },
|
||||
"o": { "a": 0, "k": 100, "ix": 7 },
|
||||
"sk": { "a": 0, "k": 0, "ix": 4 },
|
||||
"sa": { "a": 0, "k": 0, "ix": 5 },
|
||||
"nm": "Transform"
|
||||
}
|
||||
],
|
||||
"nm": "Ellipse 1",
|
||||
"np": 3,
|
||||
"cix": 2,
|
||||
"bm": 0,
|
||||
"ix": 1,
|
||||
"mn": "ADBE Vector Group",
|
||||
"hd": false
|
||||
}
|
||||
],
|
||||
"ip": 0,
|
||||
"op": 60,
|
||||
"st": 0,
|
||||
"ct": 1,
|
||||
"bm": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"ddd": 0,
|
||||
"ind": 36,
|
||||
"ty": 0,
|
||||
"nm": "",
|
||||
"refId": "comp_0",
|
||||
"sr": 1,
|
||||
"ks": {
|
||||
"o": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"i": { "x": [0.833], "y": [0.833] },
|
||||
"o": { "x": [0.167], "y": [0.167] },
|
||||
"t": 11,
|
||||
"s": [0]
|
||||
},
|
||||
{
|
||||
"i": { "x": [0.833], "y": [0.833] },
|
||||
"o": { "x": [0.167], "y": [0.167] },
|
||||
"t": 130,
|
||||
"s": [100]
|
||||
},
|
||||
{ "t": 213, "s": [0] }
|
||||
],
|
||||
"ix": 11
|
||||
},
|
||||
"r": { "a": 0, "k": 0, "ix": 10 },
|
||||
"p": { "a": 0, "k": [168, 285.5, 0], "ix": 2, "l": 2 },
|
||||
"a": { "a": 0, "k": [50, 51, 0], "ix": 1, "l": 2 },
|
||||
"s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 }
|
||||
},
|
||||
"ao": 0,
|
||||
"w": 100,
|
||||
"h": 102,
|
||||
"ip": 0,
|
||||
"op": 60,
|
||||
"st": 0,
|
||||
"bm": 0
|
||||
}
|
||||
],
|
||||
"markers": [],
|
||||
"props": {}
|
||||
}
|
@ -0,0 +1,678 @@
|
||||
{
|
||||
"v": "5.7.5",
|
||||
"fr": 100,
|
||||
"ip": 0,
|
||||
"op": 300,
|
||||
"w": 100,
|
||||
"h": 100,
|
||||
"nm": "Comp 1",
|
||||
"ddd": 0,
|
||||
"assets": [],
|
||||
"layers": [
|
||||
{
|
||||
"ddd": 0,
|
||||
"ind": 0,
|
||||
"ty": 4,
|
||||
"nm": "Linear gradient",
|
||||
"sr": 1,
|
||||
"ks": {
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
"ao": 0,
|
||||
"hd": false,
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"hd": false,
|
||||
"it": [
|
||||
{
|
||||
"ty": "sh",
|
||||
"hd": false,
|
||||
"d": 1,
|
||||
"ks": {
|
||||
"a": 0,
|
||||
"k": {
|
||||
"c": false,
|
||||
"v": [
|
||||
[
|
||||
-17.99999846997801,
|
||||
-9
|
||||
],
|
||||
[
|
||||
17.99999846997801,
|
||||
-9
|
||||
],
|
||||
[
|
||||
17.99999846997801,
|
||||
9
|
||||
],
|
||||
[
|
||||
-17.99999846997801,
|
||||
9
|
||||
],
|
||||
[
|
||||
-17.99999846997801,
|
||||
-9
|
||||
]
|
||||
],
|
||||
"i": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
],
|
||||
"o": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "gf",
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"r": 1,
|
||||
"bm": 0,
|
||||
"g": {
|
||||
"p": 5,
|
||||
"k": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0.6126387150748301,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0.8114341216791559,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
0.9555392466605757,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0.9977200010227434,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0.6126387150748301,
|
||||
1,
|
||||
0.8114341216791559,
|
||||
0,
|
||||
0.9555392466605757,
|
||||
0.3146550641021125,
|
||||
0.9977200010227434,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
-17.99999809265137,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"e": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
9.028081893920898,
|
||||
4.32133674621582E-7
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"t": 1,
|
||||
"nm": "Gradient Fill 1",
|
||||
"mn": "ADBE Vector Graphic - G-Fill",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tm",
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"e": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"m": 1,
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"hd": false,
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
49.99999618530273,
|
||||
72.5
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
250,
|
||||
250
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ip": 0,
|
||||
"op": 301,
|
||||
"st": 0,
|
||||
"bm": 0
|
||||
},
|
||||
{
|
||||
"ddd": 0,
|
||||
"ind": 1,
|
||||
"ty": 4,
|
||||
"nm": "Radial gradient",
|
||||
"sr": 1,
|
||||
"ks": {
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
"ao": 0,
|
||||
"hd": false,
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"hd": false,
|
||||
"it": [
|
||||
{
|
||||
"ty": "rc",
|
||||
"hd": false,
|
||||
"d": 1,
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
36,
|
||||
16
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "gf",
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"r": 1,
|
||||
"bm": 0,
|
||||
"g": {
|
||||
"p": 5,
|
||||
"k": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0.5371484055543164,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0.8215441678174731,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
0.9571973765957152,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0.5371484055543164,
|
||||
1,
|
||||
0.8215441678174731,
|
||||
0,
|
||||
0.9571973765957152,
|
||||
0.3292524136178862,
|
||||
1,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
-18,
|
||||
-7.999999523162842
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"e": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
9.53293228149414,
|
||||
-7.999999523162842
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"t": 2,
|
||||
"nm": "Gradient Fill 1",
|
||||
"mn": "ADBE Vector Graphic - G-Fill",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tm",
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"e": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"m": 1,
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"hd": false,
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
50,
|
||||
24.99999618530273
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
250,
|
||||
250
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ip": 0,
|
||||
"op": 301,
|
||||
"st": 0,
|
||||
"bm": 0
|
||||
},
|
||||
{
|
||||
"ddd": 0,
|
||||
"ind": 2,
|
||||
"ty": 4,
|
||||
"nm": "Background",
|
||||
"sr": 1,
|
||||
"ks": {
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
"ao": 0,
|
||||
"hd": false,
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"hd": false,
|
||||
"it": [
|
||||
{
|
||||
"ty": "rc",
|
||||
"hd": false,
|
||||
"d": 1,
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
39.999999658311,
|
||||
40.00000046690118
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "fl",
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
1,
|
||||
0.25098039215686274,
|
||||
0.25098039215686274
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"r": 1,
|
||||
"bm": 0,
|
||||
"nm": "Fill 1",
|
||||
"mn": "ADBE Vector Graphic - Fill",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tm",
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"e": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"m": 1,
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"hd": false,
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
50,
|
||||
50
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
250,
|
||||
250
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 2
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ip": 0,
|
||||
"op": 301,
|
||||
"st": 0,
|
||||
"bm": 0
|
||||
}
|
||||
],
|
||||
"markers": []
|
||||
}
|
222
example/assets/Tests/LargeSquare.json
Normal file
222
example/assets/Tests/LargeSquare.json
Normal file
@ -0,0 +1,222 @@
|
||||
{
|
||||
"v": "5.9.1",
|
||||
"fr": 25,
|
||||
"ip": 0,
|
||||
"op": 75,
|
||||
"w": 1200,
|
||||
"h": 1200,
|
||||
"nm": "square",
|
||||
"ddd": 0,
|
||||
"assets": [],
|
||||
"layers": [
|
||||
{
|
||||
"ddd": 0,
|
||||
"ind": 15,
|
||||
"ty": 4,
|
||||
"nm": "Fond Silhouettes",
|
||||
"sr": 1,
|
||||
"ks": {
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 11
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 10
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
600,
|
||||
600,
|
||||
0
|
||||
],
|
||||
"ix": 2,
|
||||
"l": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
600,
|
||||
600,
|
||||
0
|
||||
],
|
||||
"ix": 1,
|
||||
"l": 2
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 6,
|
||||
"l": 2
|
||||
}
|
||||
},
|
||||
"ao": 0,
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"it": [
|
||||
{
|
||||
"ind": 0,
|
||||
"ty": "sh",
|
||||
"ix": 1,
|
||||
"ks": {
|
||||
"a": 0,
|
||||
"k": {
|
||||
"i": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
],
|
||||
"o": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
],
|
||||
"v": [
|
||||
[
|
||||
-600,
|
||||
600
|
||||
],
|
||||
[
|
||||
600,
|
||||
600
|
||||
],
|
||||
[
|
||||
600,
|
||||
-600
|
||||
],
|
||||
[
|
||||
-600,
|
||||
-600
|
||||
]
|
||||
],
|
||||
"c": true
|
||||
},
|
||||
"ix": 2
|
||||
},
|
||||
"nm": "Tracé 1",
|
||||
"mn": "ADBE Vector Shape - Group",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "fl",
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0.561497886508,
|
||||
0.699996708889,
|
||||
0.56712066052,
|
||||
1
|
||||
],
|
||||
"ix": 4
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 5
|
||||
},
|
||||
"r": 1,
|
||||
"bm": 0,
|
||||
"nm": "Fond 1",
|
||||
"mn": "ADBE Vector Graphic - Fill",
|
||||
"hd": false
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
600,
|
||||
600
|
||||
],
|
||||
"ix": 2
|
||||
},
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"ix": 1
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"ix": 3
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 6
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100,
|
||||
"ix": 7
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 4
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0,
|
||||
"ix": 5
|
||||
},
|
||||
"nm": "Transformer "
|
||||
}
|
||||
],
|
||||
"nm": "Groupe 1",
|
||||
"np": 2,
|
||||
"cix": 2,
|
||||
"bm": 0,
|
||||
"ix": 1,
|
||||
"mn": "ADBE Vector Group",
|
||||
"hd": false
|
||||
}
|
||||
],
|
||||
"ip": 0,
|
||||
"op": 76,
|
||||
"st": 0,
|
||||
"bm": 0
|
||||
}
|
||||
],
|
||||
"markers": []
|
||||
}
|
1
example/assets/Tests/LayerBlend_0.json
Normal file
1
example/assets/Tests/LayerBlend_0.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":0},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_1.json
Normal file
1
example/assets/Tests/LayerBlend_1.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":1},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_10.json
Normal file
1
example/assets/Tests/LayerBlend_10.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":10},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_11.json
Normal file
1
example/assets/Tests/LayerBlend_11.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":11},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_12.json
Normal file
1
example/assets/Tests/LayerBlend_12.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":12},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_13.json
Normal file
1
example/assets/Tests/LayerBlend_13.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":13},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_14.json
Normal file
1
example/assets/Tests/LayerBlend_14.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":14},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_15.json
Normal file
1
example/assets/Tests/LayerBlend_15.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":15},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_16.json
Normal file
1
example/assets/Tests/LayerBlend_16.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":16},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_17.json
Normal file
1
example/assets/Tests/LayerBlend_17.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":17},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_2.json
Normal file
1
example/assets/Tests/LayerBlend_2.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":2},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_3.json
Normal file
1
example/assets/Tests/LayerBlend_3.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":3},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_4.json
Normal file
1
example/assets/Tests/LayerBlend_4.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":4},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_5.json
Normal file
1
example/assets/Tests/LayerBlend_5.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":5},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_6.json
Normal file
1
example/assets/Tests/LayerBlend_6.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":6},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_7.json
Normal file
1
example/assets/Tests/LayerBlend_7.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":7},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_8.json
Normal file
1
example/assets/Tests/LayerBlend_8.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":8},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
1
example/assets/Tests/LayerBlend_9.json
Normal file
1
example/assets/Tests/LayerBlend_9.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.7.1","ip":0,"op":180,"nm":"Animation","mn":"{429ff333-f31c-4124-91c5-5e861412a004}","fr":60,"w":512,"h":512,"assets":[],"layers":[{"ddd":0,"ty":4,"ind":1,"st":0,"ip":0,"op":180,"nm":"Layer","mn":"{625eab7e-4758-4d4b-b37c-d89115b1442b}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":77}},"shapes":[{"ty":"gr","nm":"Ellipse","mn":"{dd57d763-ff3b-420f-a94d-eb5503e7faa7}","it":[{"ty":"el","nm":"Ellipse","mn":"{fa5c495c-00d1-4253-b30c-cc8cb1b855b2}","p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[195.15223880597017,180.53731343283584]}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{89437b5f-dca9-42d4-aff9-c57ce08c8c1e}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{352559ca-ebe9-4b11-acdd-09e155612598}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.3411764705882353,0.01568627450980392]},"r":1},{"ty":"tr","a":{"a":0,"k":[400.1910447761194,240.71641791044777]},"p":{"a":0,"k":[400.1910447761194,240.71641791044777]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"PolyStar","mn":"{b6000853-a4d3-4b13-acdd-2e4f1a192760}","it":[{"ty":"sr","nm":"PolyStar","mn":"{d647a149-8105-4e08-b395-c8de40669fb0}","p":{"a":0,"k":[110.90149253731343,216.644776119403]},"or":{"a":0,"k":121.5619125366211},"ir":{"a":0,"k":60.78095626831055},"r":{"a":0,"k":143.04905700683594},"pt":{"a":0,"k":5},"sy":1,"os":{"a":0,"k":0},"is":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{67a87e2b-afff-4f55-9004-4cc274cefe07}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{39b8d13c-45cf-4ad7-972a-ef5169f1ffbf}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"r":1},{"ty":"tr","a":{"a":0,"k":[110.90149253731343,216.644776119403]},"p":{"a":0,"k":[159.9044776119403,247.59402985074627]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"bm":9},{"ddd":0,"ty":4,"ind":0,"st":0,"ip":0,"op":180,"nm":"Layer 1","mn":"{d74c9dcc-e7af-45c3-9eab-554c7b93f6b6}","ks":{"a":{"a":0,"k":[256,256]},"p":{"a":0,"k":[256,256]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Rectangle 1","mn":"{b22ddad1-738b-471a-86eb-1f072fa45799}","it":[{"ty":"rc","nm":"Rectangle 1","mn":"{0c09bd21-59ab-4f1e-bd3d-547613eb3e2a}","p":{"a":0,"k":[241.57611940298506,357.6358208955224]},"s":{"a":0,"k":[383.4268656716418,211.4865671641791]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{8cd4fca9-3480-49fa-947f-04bc40ed74f5}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{050089d8-44c4-4312-8e23-3c89df7615aa}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.7686274509803922,0.8509803921568627,0.9607843137254902]},"r":1},{"ty":"tr","a":{"a":0,"k":[241.57611940298506,357.6358208955224]},"p":{"a":0,"k":[226.1014925373134,131.53432835820894]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Rectangle","mn":"{700bfca8-0e45-42e9-8559-15ac0ebe93b2}","it":[{"ty":"rc","nm":"Rectangle","mn":"{0e3ac2ac-22c8-4310-8208-f5d5ba9cd6d9}","p":{"a":0,"k":[277.68358208955226,148.2985074626866]},"s":{"a":0,"k":[335.2835820895522,162.48358208955224]},"r":{"a":0,"k":0}},{"ty":"st","hd":true,"nm":"Stroke","mn":"{af0c691f-7815-414e-a988-ac2eb6e32128}","o":{"a":0,"k":100},"c":{"a":0,"k":[1,0.9803921568627451,0.2823529411764706]},"lc":2,"lj":2,"ml":0,"w":{"a":0,"k":30}},{"ty":"fl","nm":"Fill","mn":"{059d8c4e-de02-4fa7-99fe-c069b73218be}","o":{"a":0,"k":100},"c":{"a":0,"k":[0.19607843137254902,0.3137254901960784,0.6901960784313725]},"r":1},{"ty":"tr","a":{"a":0,"k":[277.68358208955226,148.2985074626866]},"p":{"a":0,"k":[277.68358208955226,366.6626865671642]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}}]}]}],"meta":{"g":"Glaxnimate 0.4.6-32-gb62899be"}}
|
14068
example/assets/Tests/MissingEndValue.json
Normal file
14068
example/assets/Tests/MissingEndValue.json
Normal file
File diff suppressed because it is too large
Load Diff
1
example/assets/Tests/NullEndShape.json
Normal file
1
example/assets/Tests/NullEndShape.json
Normal file
File diff suppressed because one or more lines are too long
1
example/assets/Tests/RoundedNonClosed.json
Normal file
1
example/assets/Tests/RoundedNonClosed.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.12.1","fr":60,"ip":0,"op":301,"w":850,"h":850,"nm":"Learn-icon-circle","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Path 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[327,475.038,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[-1800,1800,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-14.672,-13.86],[1.815,-3.469],[5.3,11.535]],"o":[[0,0],[7.167,6.77],[-5.891,11.262],[-2.639,-5.743]],"v":[[-23.844,-20.05],[12.222,-18.383],[14.169,9.792],[-21.578,9.407]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"rd","nm":"Round Corners 1","r":{"a":0,"k":358.2,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false}],"ip":0,"op":3600,"st":0,"ct":1,"bm":0}],"markers":[],"props":{}}
|
1
example/assets/Tests/kona_splash_animation.json
Normal file
1
example/assets/Tests/kona_splash_animation.json
Normal file
File diff suppressed because one or more lines are too long
1094
example/assets/blub.json
Normal file
1094
example/assets/blub.json
Normal file
File diff suppressed because it is too large
Load Diff
BIN
example/assets/cat.lottie
Normal file
BIN
example/assets/cat.lottie
Normal file
Binary file not shown.
1
example/assets/pass_loading.json
Normal file
1
example/assets/pass_loading.json
Normal file
@ -0,0 +1 @@
|
||||
{"v":"5.12.1","fr":60,"ip":0,"op":120,"w":853,"h":480,"nm":"Comp 1","ddd":0,"assets":[],"fonts":{"list":[{"fName":"Pretendard-Bold","fFamily":"Pretendard","fStyle":"Bold","ascent":70.7131249997765}]},"layers":[{"ddd":0,"ind":1,"ty":5,"nm":"PASS","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[426,235.889,0],"ix":2,"l":2},"a":{"a":0,"k":[6.157,-60.098,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"t":{"d":{"k":[{"s":{"s":170,"f":"Pretendard-Bold","t":"PASS","ca":0,"j":2,"tr":49,"lh":317,"ls":0,"fc":[1,1,1],"sc":[0.941,0.941,0.941],"sw":0.00999999977648,"of":true},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[{"nm":"Animator 1","s":{"t":0,"xe":{"a":0,"k":0,"ix":7},"ne":{"a":0,"k":0,"ix":8},"a":{"a":0,"k":100,"ix":4},"b":1,"rn":0,"sh":1,"sm":{"a":0,"k":100,"ix":6},"s":{"a":1,"k":[{"i":{"x":[0.205],"y":[1]},"o":{"x":[0.77],"y":[0]},"t":10,"s":[0]},{"t":47,"s":[100]}],"ix":1},"r":1},"a":{"p":{"a":0,"k":[0,88,0],"ix":2},"o":{"a":0,"k":0,"ix":9},"t":{"a":0,"k":-66,"ix":89}}},{"nm":"Animator 2","s":{"t":0,"xe":{"a":0,"k":0,"ix":7},"ne":{"a":0,"k":0,"ix":8},"a":{"a":0,"k":100,"ix":4},"b":1,"rn":0,"sh":1,"sm":{"a":0,"k":100,"ix":6},"r":1},"a":{"t":{"a":1,"k":[{"i":{"x":[0.092],"y":[1]},"o":{"x":[0.887],"y":[0]},"t":46,"s":[-7]},{"t":90,"s":[4]}],"ix":89}}}]},"ip":10,"op":130,"st":10,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":1,"nm":"Dark Turquoise Solid 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[426.5,240,0],"ix":2,"l":2},"a":{"a":0,"k":[75,50,0],"ix":1,"l":2},"s":{"a":0,"k":[568.667,480,100],"ix":6,"l":2}},"ao":0,"sw":150,"sh":100,"sc":"#003626","ip":0,"op":120,"st":0,"bm":0}],"markers":[],"props":{},"chars":[{"ch":"P","size":170,"style":"Bold","w":62.3,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,14.16],[16.113,0],[0,0]],"o":[[0,0],[0,0],[0,0],[16.309,0],[0,-13.965],[0,0],[0,0]],"v":[[5.957,0],[20.605,0],[20.605,-23.047],[33.301,-23.047],[58.984,-46.875],[33.691,-70.703],[5.957,-70.703]],"c":true},"ix":2},"nm":"P","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,-7.031],[8.691,0]],"o":[[0,0],[0,0],[8.691,0],[0,7.129],[0,0]],"v":[[20.605,-34.863],[20.605,-58.691],[30.957,-58.691],[43.848,-46.875],[30.957,-34.863]],"c":true},"ix":2},"nm":"P","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"P","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Pretendard"},{"ch":"A","size":170,"style":"Bold","w":71.78,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[17.773,0],[23.145,-16.309],[48.73,-16.309],[54.004,0],[69.727,0],[45.312,-70.703],[26.465,-70.703],[1.953,0]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[26.855,-27.734],[35.645,-54.785],[36.133,-54.785],[45.02,-27.734]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"A","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Pretendard"},{"ch":"S","size":170,"style":"Bold","w":62.99,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.586,-5.566],[0,0],[15.625,0],[0,-12.891],[-11.914,-2.93],[0,0],[0,-4.785],[7.715,0],[0.488,7.129],[0,0],[-17.09,0],[0,12.988],[12.109,2.734],[0,0],[-0.098,5.078],[-7.422,0]],"o":[[0,0],[-0.195,-12.5],[-15.43,0],[0,10.352],[0,0],[7.715,1.953],[0,5.273],[-7.812,0],[0,0],[0.391,15.137],[17.188,0],[0,-11.816],[0,0],[-6.055,-1.367],[0.098,-4.688],[7.129,0]],"v":[[44.336,-50.488],[58.398,-50.488],[32.227,-71.68],[5.469,-50.293],[24.707,-31.055],[32.422,-29.199],[44.531,-20.215],[31.836,-11.328],[17.871,-22.07],[3.613,-22.07],[32.031,0.977],[59.375,-20.215],[38.184,-40.918],[31.836,-42.48],[20.508,-51.27],[32.129,-59.375]],"c":true},"ix":2},"nm":"S","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"S","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Pretendard"}]}
|
BIN
example/assets/vegan_font.zip
Normal file
BIN
example/assets/vegan_font.zip
Normal file
Binary file not shown.
@ -21,6 +21,6 @@
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>MinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<string>12.0</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
@ -1,5 +1,5 @@
|
||||
# Uncomment this line to define a global platform for your project
|
||||
# platform :ios, '9.0'
|
||||
platform :ios, '12.0'
|
||||
|
||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
||||
@ -10,78 +10,32 @@ project 'Runner', {
|
||||
'Release' => :release,
|
||||
}
|
||||
|
||||
def parse_KV_file(file, separator='=')
|
||||
file_abs_path = File.expand_path(file)
|
||||
if !File.exists? file_abs_path
|
||||
return [];
|
||||
def flutter_root
|
||||
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
|
||||
unless File.exist?(generated_xcode_build_settings_path)
|
||||
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
|
||||
end
|
||||
generated_key_values = {}
|
||||
skip_line_start_symbols = ["#", "/"]
|
||||
File.foreach(file_abs_path) do |line|
|
||||
next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
|
||||
plugin = line.split(pattern=separator)
|
||||
if plugin.length == 2
|
||||
podname = plugin[0].strip()
|
||||
path = plugin[1].strip()
|
||||
podpath = File.expand_path("#{path}", file_abs_path)
|
||||
generated_key_values[podname] = podpath
|
||||
else
|
||||
puts "Invalid plugin specification: #{line}"
|
||||
end
|
||||
|
||||
File.foreach(generated_xcode_build_settings_path) do |line|
|
||||
matches = line.match(/FLUTTER_ROOT\=(.*)/)
|
||||
return matches[1].strip if matches
|
||||
end
|
||||
generated_key_values
|
||||
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
|
||||
end
|
||||
|
||||
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
|
||||
|
||||
flutter_ios_podfile_setup
|
||||
|
||||
target 'Runner' do
|
||||
use_frameworks!
|
||||
use_modular_headers!
|
||||
|
||||
# Flutter Pod
|
||||
|
||||
copied_flutter_dir = File.join(__dir__, 'Flutter')
|
||||
copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
|
||||
copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
|
||||
unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
|
||||
# Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
|
||||
# That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
|
||||
# CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.
|
||||
|
||||
generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
|
||||
unless File.exist?(generated_xcode_build_settings_path)
|
||||
raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
|
||||
end
|
||||
generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
|
||||
cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];
|
||||
|
||||
unless File.exist?(copied_framework_path)
|
||||
FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
|
||||
end
|
||||
unless File.exist?(copied_podspec_path)
|
||||
FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
|
||||
end
|
||||
end
|
||||
|
||||
# Keep pod path relative so it can be checked into Podfile.lock.
|
||||
pod 'Flutter', :path => 'Flutter'
|
||||
|
||||
# Plugin Pods
|
||||
|
||||
# Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
|
||||
# referring to absolute paths on developers' machines.
|
||||
system('rm -rf .symlinks')
|
||||
system('mkdir -p .symlinks/plugins')
|
||||
plugin_pods = parse_KV_file('../.flutter-plugins')
|
||||
plugin_pods.each do |name, path|
|
||||
symlink = File.join('.symlinks', 'plugins', name)
|
||||
File.symlink(path, symlink)
|
||||
pod name, :path => File.join(symlink, 'ios')
|
||||
end
|
||||
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
|
||||
end
|
||||
|
||||
post_install do |installer|
|
||||
installer.pods_project.targets.each do |target|
|
||||
target.build_configurations.each do |config|
|
||||
config.build_settings['ENABLE_BITCODE'] = 'NO'
|
||||
end
|
||||
flutter_additional_ios_build_settings(target)
|
||||
end
|
||||
end
|
||||
|
@ -1,28 +1,23 @@
|
||||
PODS:
|
||||
- Flutter (1.0.0)
|
||||
- path_provider (0.0.1):
|
||||
- Flutter
|
||||
- path_provider_macos (0.0.1):
|
||||
- path_provider_foundation (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
|
||||
DEPENDENCIES:
|
||||
- Flutter (from `Flutter`)
|
||||
- path_provider (from `.symlinks/plugins/path_provider/ios`)
|
||||
- path_provider_macos (from `.symlinks/plugins/path_provider_macos/ios`)
|
||||
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
Flutter:
|
||||
:path: Flutter
|
||||
path_provider:
|
||||
:path: ".symlinks/plugins/path_provider/ios"
|
||||
path_provider_macos:
|
||||
:path: ".symlinks/plugins/path_provider_macos/ios"
|
||||
path_provider_foundation:
|
||||
:path: ".symlinks/plugins/path_provider_foundation/darwin"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
|
||||
path_provider: fb74bd0465e96b594bb3b5088ee4a4e7bb1f2a9d
|
||||
path_provider_macos: f760a3c5b04357c380e2fddb6f9db6f3015897e0
|
||||
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
|
||||
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
|
||||
|
||||
PODFILE CHECKSUM: c34e2287a9ccaa606aeceab922830efb9a6ff69a
|
||||
PODFILE CHECKSUM: 4e8f8b2be68aeea4c0d5beb6ff1e79fface1d048
|
||||
|
||||
COCOAPODS: 1.9.1
|
||||
COCOAPODS: 1.15.2
|
||||
|
@ -3,7 +3,7 @@
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objectVersion = 54;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
@ -68,7 +68,6 @@
|
||||
31ACBCF01D379565237D9814 /* Pods-Runner.release.xcconfig */,
|
||||
5A699D4B67473B61D811D350 /* Pods-Runner.profile.xcconfig */,
|
||||
);
|
||||
name = Pods;
|
||||
path = Pods;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
@ -164,12 +163,11 @@
|
||||
97C146E61CF9000F007C117D /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 1020;
|
||||
LastUpgradeCheck = 1510;
|
||||
ORGANIZATIONNAME = "";
|
||||
TargetAttributes = {
|
||||
97C146ED1CF9000F007C117D = {
|
||||
CreatedOnToolsVersion = 7.3.1;
|
||||
DevelopmentTeam = FFDVVDAQL4;
|
||||
LastSwiftMigration = 1100;
|
||||
};
|
||||
};
|
||||
@ -209,10 +207,12 @@
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
alwaysOutOfDate = 1;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
|
||||
);
|
||||
name = "Thin Binary";
|
||||
outputPaths = (
|
||||
@ -245,6 +245,7 @@
|
||||
};
|
||||
9740EEB61CF901F6004384FC /* Run Script */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
alwaysOutOfDate = 1;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
@ -264,13 +265,11 @@
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
|
||||
"${PODS_ROOT}/../Flutter/Flutter.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/path_provider/path_provider.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/path_provider_foundation/path_provider_foundation.framework",
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_foundation.framework",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
@ -313,7 +312,6 @@
|
||||
/* Begin XCBuildConfiguration section */
|
||||
249021D3217E4FDB00AE95B9 /* Profile */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
@ -353,7 +351,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
@ -368,21 +366,27 @@
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
DEVELOPMENT_TEAM = FFDVVDAQL4;
|
||||
DEVELOPMENT_TEAM = PS45A9TPZ7;
|
||||
ENABLE_BITCODE = NO;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
);
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.github.xvrh.lottie.sample;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
@ -391,7 +395,6 @@
|
||||
};
|
||||
97C147031CF9000F007C117D /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
@ -437,7 +440,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
@ -447,7 +450,6 @@
|
||||
};
|
||||
97C147041CF9000F007C117D /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
@ -487,7 +489,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
@ -503,21 +505,27 @@
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
DEVELOPMENT_TEAM = FFDVVDAQL4;
|
||||
DEVELOPMENT_TEAM = PS45A9TPZ7;
|
||||
ENABLE_BITCODE = NO;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
);
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.github.xvrh.lottie.sample;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
@ -531,21 +539,27 @@
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
DEVELOPMENT_TEAM = FFDVVDAQL4;
|
||||
DEVELOPMENT_TEAM = PS45A9TPZ7;
|
||||
ENABLE_BITCODE = NO;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
);
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.github.xvrh.lottie.sample;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
|
@ -2,6 +2,6 @@
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:Runner.xcodeproj">
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1020"
|
||||
LastUpgradeVersion = "1510"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
@ -2,6 +2,8 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
@ -22,6 +24,8 @@
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
|
39
example/lib/examples/dotlottie.dart
Normal file
39
example/lib/examples/dotlottie.dart
Normal file
@ -0,0 +1,39 @@
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:lottie/lottie.dart';
|
||||
|
||||
void main() => runApp(const App());
|
||||
|
||||
class App extends StatelessWidget {
|
||||
const App({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const MaterialApp(
|
||||
home: Scaffold(
|
||||
body: Example(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//---- example
|
||||
class Example extends StatelessWidget {
|
||||
const Example({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Lottie.asset(
|
||||
'assets/cat.lottie',
|
||||
decoder: customDecoder,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future<LottieComposition?> customDecoder(List<int> bytes) {
|
||||
return LottieComposition.decodeZip(bytes, filePicker: (files) {
|
||||
return files.firstWhereOrNull(
|
||||
(f) => f.name.startsWith('animations/') && f.name.endsWith('.json'));
|
||||
});
|
||||
}
|
||||
//----
|
@ -3,7 +3,7 @@ import 'package:flutter/material.dart' hide Image;
|
||||
import 'package:flutter/material.dart' as material;
|
||||
import 'package:lottie/lottie.dart';
|
||||
|
||||
/// This example shows how to cache the animation as a List<Image>.
|
||||
/// This example shows how to cache the animation as a `List<Image>`.
|
||||
/// After the initial cache of each frame, drawing the animation is almost free
|
||||
/// in term of CPU usage.
|
||||
/// The animation will run at a specific framerate (not FrameRate.max) and specific size
|
||||
|
155
example/lib/examples/render_cache.dart
Normal file
155
example/lib/examples/render_cache.dart
Normal file
@ -0,0 +1,155 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:lottie/lottie.dart';
|
||||
|
||||
void main() {
|
||||
runApp(const App());
|
||||
}
|
||||
|
||||
class App extends StatelessWidget {
|
||||
const App({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
showPerformanceOverlay: true,
|
||||
color: Colors.white,
|
||||
home: Column(
|
||||
children: [
|
||||
Container(
|
||||
height: 170,
|
||||
color: Colors.white,
|
||||
),
|
||||
Expanded(
|
||||
child: Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Render cache'),
|
||||
),
|
||||
drawer: const Drawer(
|
||||
child: Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: RenderCacheDebugPanel(),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
body: _Example(),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _Example extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListView(
|
||||
children: [
|
||||
_Row(
|
||||
builder: (cache) {
|
||||
return Lottie.asset('assets/Mobilo/Z.json',
|
||||
renderCache: cache, height: 100);
|
||||
},
|
||||
),
|
||||
for (var fit in [BoxFit.cover, BoxFit.fill, BoxFit.contain])
|
||||
_Row(
|
||||
builder: (cache) {
|
||||
return Lottie.asset(
|
||||
'assets/lottiefiles/bb8.json',
|
||||
renderCache: cache,
|
||||
fit: fit,
|
||||
height: 60,
|
||||
);
|
||||
},
|
||||
),
|
||||
_Row(
|
||||
builder: (cache) {
|
||||
return Lottie.asset(
|
||||
'assets/lottiefiles/a_mountain.json',
|
||||
renderCache: cache,
|
||||
height: 40,
|
||||
);
|
||||
},
|
||||
),
|
||||
for (var align in [
|
||||
Alignment.bottomCenter,
|
||||
Alignment.center,
|
||||
Alignment.topRight
|
||||
])
|
||||
_Row(
|
||||
builder: (cache) {
|
||||
return Lottie.asset('assets/lottiefiles/bomb.json',
|
||||
renderCache: cache, height: 40, alignment: align);
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _Row extends StatelessWidget {
|
||||
final Widget Function(RenderCache? cache) builder;
|
||||
|
||||
const _Row({required this.builder});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
margin: const EdgeInsets.symmetric(vertical: 10),
|
||||
decoration: BoxDecoration(border: Border.all(color: Colors.green)),
|
||||
child: Row(
|
||||
children: [
|
||||
for (var cache in [
|
||||
null,
|
||||
RenderCache.raster,
|
||||
RenderCache.drawingCommands
|
||||
])
|
||||
Expanded(child: builder(cache))
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class RenderCacheDebugPanel extends StatefulWidget {
|
||||
const RenderCacheDebugPanel({super.key});
|
||||
|
||||
@override
|
||||
State<RenderCacheDebugPanel> createState() => _RenderCacheDebugPanelState();
|
||||
}
|
||||
|
||||
class _RenderCacheDebugPanelState extends State<RenderCacheDebugPanel> {
|
||||
late Timer _refreshTimer;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
_refreshTimer = Timer.periodic(const Duration(milliseconds: 500), (timer) {
|
||||
setState(() {
|
||||
// refresh
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListView(
|
||||
children: [
|
||||
Text('Images: ${RenderCache.raster.store.imageCount}'),
|
||||
Text(
|
||||
'Memory: ${(RenderCache.raster.store.totalMemory / 1000000).toStringAsFixed(1)}MB'),
|
||||
const Divider(),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_refreshTimer.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
39
example/lib/examples/telegram_stickers.dart
Normal file
39
example/lib/examples/telegram_stickers.dart
Normal file
@ -0,0 +1,39 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:lottie/lottie.dart';
|
||||
|
||||
void main() => runApp(const App());
|
||||
|
||||
class App extends StatelessWidget {
|
||||
const App({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const MaterialApp(
|
||||
home: Scaffold(
|
||||
body: Example(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class Example extends StatelessWidget {
|
||||
const Example({super.key});
|
||||
|
||||
@override
|
||||
//--- example
|
||||
Widget build(BuildContext context) {
|
||||
return ListView(
|
||||
children: [
|
||||
Lottie.network(
|
||||
'https://telegram.org/file/464001484/1/bzi7gr7XRGU.10147/815df2ef527132dd23',
|
||||
decoder: LottieComposition.decodeGZip,
|
||||
),
|
||||
Lottie.asset(
|
||||
'assets/LightningBug_file.tgs',
|
||||
decoder: LottieComposition.decodeGZip,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
//---
|
||||
}
|
@ -19,7 +19,7 @@ class App extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
//showPerformanceOverlay: true,
|
||||
showPerformanceOverlay: true,
|
||||
home: Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Lottie Flutter'),
|
||||
@ -42,6 +42,8 @@ class App extends StatelessWidget {
|
||||
child: Lottie.asset(
|
||||
assetName,
|
||||
fit: BoxFit.contain,
|
||||
renderCache: RenderCache.drawingCommands,
|
||||
backgroundLoading: false,
|
||||
onWarning: (w) => _logger.info('$assetName - $w'),
|
||||
frameBuilder: (context, child, composition) {
|
||||
return AnimatedOpacity(
|
||||
@ -76,7 +78,7 @@ class _Item extends StatelessWidget {
|
||||
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: Colors.black.withOpacity(0.1),
|
||||
color: Colors.black.withValues(alpha: 0.1),
|
||||
offset: const Offset(2, 2),
|
||||
blurRadius: 5)
|
||||
]),
|
||||
|
@ -18,6 +18,7 @@ class App extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
showPerformanceOverlay: true,
|
||||
home: Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text(''),
|
||||
@ -136,6 +137,7 @@ class __LottieState extends State<_Lottie> with TickerProviderStateMixin {
|
||||
decoration: BoxDecoration(border: Border.all(color: Colors.red)),
|
||||
child: Lottie(
|
||||
composition: widget.composition,
|
||||
renderCache: RenderCache.raster,
|
||||
controller: _controller,
|
||||
width: widget.width,
|
||||
height: widget.height,
|
||||
|
@ -16,8 +16,8 @@ EXTERNAL SOURCES:
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
|
||||
path_provider_foundation: eaf5b3e458fc0e5fbb9940fb09980e853fe058b8
|
||||
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
||||
|
||||
PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7
|
||||
|
||||
COCOAPODS: 1.12.1
|
||||
COCOAPODS: 1.15.2
|
||||
|
@ -203,7 +203,7 @@
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 0920;
|
||||
LastUpgradeCheck = 1300;
|
||||
LastUpgradeCheck = 1510;
|
||||
ORGANIZATIONNAME = "The Flutter Authors";
|
||||
TargetAttributes = {
|
||||
33CC10EC2044A3C60003C045 = {
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1300"
|
||||
LastUpgradeVersion = "1510"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
@ -2,19 +2,7 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
<key>com.apple.security.assets.pictures.read-write</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.downloads.read-write</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.user-selected.read-write</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.server</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
@ -1,18 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
<key>com.apple.security.assets.pictures.read-write</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.downloads.read-write</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.user-selected.read-write</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.server</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict/>
|
||||
</plist>
|
||||
|
@ -5,10 +5,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: archive
|
||||
sha256: "0c8368c9b3f0abbc193b9d6133649a614204b528982bebc7026372d61677ce3a"
|
||||
sha256: "6199c74e3db4fbfbd04f66d739e72fe11c8a8957d5f219f1f4482dbde6420b5a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.3.7"
|
||||
version: "4.0.2"
|
||||
async:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -42,29 +42,29 @@ packages:
|
||||
source: hosted
|
||||
version: "1.1.1"
|
||||
collection:
|
||||
dependency: transitive
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: collection
|
||||
sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c"
|
||||
sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.17.1"
|
||||
version: "1.19.0"
|
||||
convert:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: convert
|
||||
sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
|
||||
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.1"
|
||||
version: "3.1.2"
|
||||
crypto:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: crypto
|
||||
sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
|
||||
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.3"
|
||||
version: "3.0.6"
|
||||
fake_async:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -77,10 +77,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: ffi
|
||||
sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99
|
||||
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.2"
|
||||
version: "2.1.3"
|
||||
flutter:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
@ -90,219 +90,251 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_colorpicker
|
||||
sha256: "458a6ed8ea480eb16ff892aedb4b7092b2804affd7e046591fb03127e8d8ef8b"
|
||||
sha256: "969de5f6f9e2a570ac660fb7b501551451ea2a1ab9e2097e89475f60e07816ea"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.3"
|
||||
version: "1.1.0"
|
||||
flutter_lints:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: flutter_lints
|
||||
sha256: "2118df84ef0c3ca93f96123a616ae8540879991b8b57af2f81b76a7ada49b2a4"
|
||||
sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.2"
|
||||
version: "5.0.0"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
golden_toolkit:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: golden_toolkit
|
||||
sha256: "8f74adab33154fe7b731395782797021f97d2edc52f7bfb85ff4f1b5c4a215f0"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.15.0"
|
||||
http:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: http
|
||||
sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525"
|
||||
sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
version: "1.2.2"
|
||||
http_parser:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http_parser
|
||||
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
|
||||
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.2"
|
||||
js:
|
||||
version: "4.1.2"
|
||||
leak_tracker:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: js
|
||||
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
|
||||
name: leak_tracker
|
||||
sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.6.7"
|
||||
version: "10.0.7"
|
||||
leak_tracker_flutter_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker_flutter_testing
|
||||
sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.8"
|
||||
leak_tracker_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker_testing
|
||||
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
lints:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: lints
|
||||
sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
|
||||
sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
version: "5.1.1"
|
||||
logging:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: logging
|
||||
sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
|
||||
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
version: "1.3.0"
|
||||
lottie:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
path: ".."
|
||||
relative: true
|
||||
source: path
|
||||
version: "2.5.0"
|
||||
version: "3.3.1"
|
||||
matcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb"
|
||||
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.12.15"
|
||||
version: "0.12.16+1"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: material_color_utilities
|
||||
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
|
||||
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.0"
|
||||
version: "0.11.1"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
|
||||
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.9.1"
|
||||
version: "1.15.0"
|
||||
mime:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: mime
|
||||
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
path:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: path
|
||||
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
|
||||
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.8.3"
|
||||
version: "1.9.0"
|
||||
path_provider:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: path_provider
|
||||
sha256: "3087813781ab814e4157b172f1a11c46be20179fcc9bea043e0fba36bc0acaa2"
|
||||
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.15"
|
||||
version: "2.1.5"
|
||||
path_provider_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_android
|
||||
sha256: "2cec049d282c7f13c594b4a73976b0b4f2d7a1838a6dd5aaf7bd9719196bee86"
|
||||
sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.27"
|
||||
version: "2.2.15"
|
||||
path_provider_foundation:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_foundation
|
||||
sha256: "916731ccbdce44d545414dd9961f26ba5fbaa74bcbb55237d8e65a623a8c7297"
|
||||
sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.4"
|
||||
version: "2.4.1"
|
||||
path_provider_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_linux
|
||||
sha256: ffbb8cc9ed2c9ec0e4b7a541e56fd79b138e8f47d2fb86815f15358a349b3b57
|
||||
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.11"
|
||||
version: "2.2.1"
|
||||
path_provider_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_platform_interface
|
||||
sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec"
|
||||
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.6"
|
||||
version: "2.1.2"
|
||||
path_provider_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_windows
|
||||
sha256: "1cb68ba4cd3a795033de62ba1b7b4564dace301f952de6bfb3cd91b202b6ee96"
|
||||
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.7"
|
||||
version: "2.3.0"
|
||||
platform:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: platform
|
||||
sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76"
|
||||
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.0"
|
||||
version: "3.1.6"
|
||||
plugin_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: plugin_platform_interface
|
||||
sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc"
|
||||
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.4"
|
||||
pointycastle:
|
||||
version: "2.1.8"
|
||||
posix:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pointycastle
|
||||
sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c"
|
||||
name: posix
|
||||
sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.7.3"
|
||||
version: "6.0.1"
|
||||
shelf:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: shelf
|
||||
sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.4.2"
|
||||
shelf_static:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: shelf_static
|
||||
sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.3"
|
||||
sky_engine:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.99"
|
||||
version: "0.0.0"
|
||||
source_span:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_span
|
||||
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
|
||||
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.9.1"
|
||||
version: "1.10.0"
|
||||
stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stack_trace
|
||||
sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
|
||||
sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.11.0"
|
||||
version: "1.12.0"
|
||||
stream_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_channel
|
||||
sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
|
||||
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
version: "2.1.2"
|
||||
string_scanner:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: string_scanner
|
||||
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
|
||||
sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
version: "1.3.0"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -315,18 +347,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb
|
||||
sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.1"
|
||||
version: "0.7.3"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: typed_data
|
||||
sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
|
||||
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.2"
|
||||
version: "1.4.0"
|
||||
vector_math:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -335,22 +367,30 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.4"
|
||||
win32:
|
||||
vm_service:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: win32
|
||||
sha256: dfdf0136e0aa7a1b474ea133e67cb0154a0acd2599c4f3ada3b49d38d38793ee
|
||||
name: vm_service
|
||||
sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.0.5"
|
||||
version: "14.3.0"
|
||||
web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web
|
||||
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
xdg_directories:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: xdg_directories
|
||||
sha256: e0b1147eec179d3911f1f19b59206448f78195ca1d20514134e10641b7d7fbff
|
||||
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.1"
|
||||
version: "1.1.0"
|
||||
sdks:
|
||||
dart: ">=3.0.0 <4.0.0"
|
||||
flutter: ">=3.10.0"
|
||||
dart: ">=3.6.0 <4.0.0"
|
||||
flutter: ">=3.27.0"
|
||||
|
@ -2,10 +2,13 @@ name: lottie_example
|
||||
description: A sample app for the Lottie player
|
||||
publish_to: none
|
||||
|
||||
version: 2.7.0+1
|
||||
|
||||
environment:
|
||||
sdk: "^3.0.0"
|
||||
sdk: "^3.6.0"
|
||||
|
||||
dependencies:
|
||||
collection:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
flutter_colorpicker:
|
||||
@ -20,7 +23,8 @@ dev_dependencies:
|
||||
flutter_lints:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
golden_toolkit:
|
||||
shelf:
|
||||
shelf_static:
|
||||
|
||||
# For information on the generic Dart part of this file, see the
|
||||
# following page: https://dart.dev/tools/pub/pubspec
|
||||
|
9
example/tool/web_server.dart
Normal file
9
example/tool/web_server.dart
Normal file
@ -0,0 +1,9 @@
|
||||
import 'dart:io';
|
||||
import 'package:shelf/shelf_io.dart';
|
||||
import 'package:shelf_static/shelf_static.dart';
|
||||
|
||||
void main() async {
|
||||
var server = await serve(
|
||||
createStaticHandler('build/web'), InternetAddress.loopbackIPv4, 0);
|
||||
print('Listen on http://${server.address.host}:${server.port}/index.html');
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
export 'src/composition.dart' show LottieComposition;
|
||||
export 'src/composition.dart' show LottieComposition, LottieDecoder;
|
||||
export 'src/frame_rate.dart' show FrameRate;
|
||||
export 'src/lottie.dart' show Lottie;
|
||||
export 'src/lottie_builder.dart' show LottieBuilder;
|
||||
@ -14,5 +14,6 @@ export 'src/providers/lottie_provider.dart' show LottieCache, LottieProvider;
|
||||
export 'src/providers/memory_provider.dart' show MemoryLottie;
|
||||
export 'src/providers/network_provider.dart' show NetworkLottie;
|
||||
export 'src/raw_lottie.dart' show RawLottie;
|
||||
export 'src/render_cache.dart' show RenderCache;
|
||||
export 'src/value/drop_shadow.dart' show DropShadow;
|
||||
export 'src/value_delegate.dart' show ValueDelegate;
|
||||
|
@ -14,7 +14,6 @@ import '../../model/layer/base_layer.dart';
|
||||
import '../../utils.dart';
|
||||
import '../../utils/dash_path.dart';
|
||||
import '../../utils/misc.dart';
|
||||
import '../../utils/path_factory.dart';
|
||||
import '../../utils/utils.dart';
|
||||
import '../../value/drop_shadow.dart';
|
||||
import '../../value/lottie_value_callback.dart';
|
||||
@ -29,8 +28,8 @@ import 'trim_path_content.dart';
|
||||
|
||||
abstract class BaseStrokeContent
|
||||
implements KeyPathElementContent, DrawingContent {
|
||||
final Path _path = PathFactory.create();
|
||||
final Path _trimPathPath = PathFactory.create();
|
||||
final Path _path = Path();
|
||||
final Path _trimPathPath = Path();
|
||||
final LottieDrawable lottieDrawable;
|
||||
final BaseLayer layer;
|
||||
final List<_PathGroup> _pathGroups = <_PathGroup>[];
|
||||
@ -81,7 +80,7 @@ abstract class BaseStrokeContent
|
||||
_dashPatternAnimations[i].addUpdateListener(onUpdateListener);
|
||||
}
|
||||
if (_dashPatternOffsetAnimation != null) {
|
||||
_dashPatternOffsetAnimation!.addUpdateListener(onUpdateListener);
|
||||
_dashPatternOffsetAnimation.addUpdateListener(onUpdateListener);
|
||||
}
|
||||
var blurEffect = layer.blurEffect;
|
||||
if (blurEffect != null) {
|
||||
@ -135,8 +134,7 @@ abstract class BaseStrokeContent
|
||||
}
|
||||
|
||||
@override
|
||||
void draw(Canvas canvas, Size size, Matrix4 parentMatrix,
|
||||
{required int parentAlpha}) {
|
||||
void draw(Canvas canvas, Matrix4 parentMatrix, {required int parentAlpha}) {
|
||||
L.beginSection('StrokeContent#draw');
|
||||
if (parentMatrix.hasZeroScaleAxis) {
|
||||
L.endSection('StrokeContent#draw');
|
||||
@ -321,7 +319,7 @@ abstract class BaseStrokeContent
|
||||
|
||||
var offset = _dashPatternOffsetAnimation == null
|
||||
? 0.0
|
||||
: _dashPatternOffsetAnimation!.value * scale;
|
||||
: _dashPatternOffsetAnimation.value * scale;
|
||||
var newPath = dashPath(path, intervals: _dashPatternValues, phase: offset);
|
||||
L.endSection('StrokeContent#applyDashPattern');
|
||||
|
||||
|
@ -8,7 +8,6 @@ import '../../model/key_path.dart';
|
||||
import '../../model/key_path_element.dart';
|
||||
import '../../model/layer/base_layer.dart';
|
||||
import '../../utils.dart';
|
||||
import '../../utils/path_factory.dart';
|
||||
import '../../value/lottie_value_callback.dart';
|
||||
import '../keyframe/transform_keyframe_animation.dart';
|
||||
import 'content.dart';
|
||||
@ -42,7 +41,7 @@ class ContentGroup implements DrawingContent, PathContent, KeyPathElement {
|
||||
}
|
||||
|
||||
final Matrix4 _matrix = Matrix4.identity();
|
||||
final Path _path = PathFactory.create();
|
||||
final Path _path = Path();
|
||||
|
||||
@override
|
||||
final String? name;
|
||||
@ -144,8 +143,7 @@ class ContentGroup implements DrawingContent, PathContent, KeyPathElement {
|
||||
}
|
||||
|
||||
@override
|
||||
void draw(Canvas canvas, Size size, Matrix4 parentMatrix,
|
||||
{required int parentAlpha}) {
|
||||
void draw(Canvas canvas, Matrix4 parentMatrix, {required int parentAlpha}) {
|
||||
if (_hidden) {
|
||||
return;
|
||||
}
|
||||
@ -176,7 +174,7 @@ class ContentGroup implements DrawingContent, PathContent, KeyPathElement {
|
||||
for (var i = _contents.length - 1; i >= 0; i--) {
|
||||
Object content = _contents[i];
|
||||
if (content is DrawingContent) {
|
||||
content.draw(canvas, size, _matrix, parentAlpha: childAlpha);
|
||||
content.draw(canvas, _matrix, parentAlpha: childAlpha);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,6 @@ import 'package:vector_math/vector_math_64.dart';
|
||||
import 'content.dart';
|
||||
|
||||
abstract class DrawingContent extends Content {
|
||||
void draw(Canvas canvas, Size canvasSize, Matrix4 parentMatrix,
|
||||
{required int parentAlpha});
|
||||
void draw(Canvas canvas, Matrix4 parentMatrix, {required int parentAlpha});
|
||||
Rect getBounds(Matrix4 parentMatrix, {required bool applyParents});
|
||||
}
|
||||
|
@ -7,7 +7,6 @@ import '../../model/key_path.dart';
|
||||
import '../../model/layer/base_layer.dart';
|
||||
import '../../utils.dart';
|
||||
import '../../utils/misc.dart';
|
||||
import '../../utils/path_factory.dart';
|
||||
import '../../value/lottie_value_callback.dart';
|
||||
import '../keyframe/base_keyframe_animation.dart';
|
||||
import 'compound_trim_path_content.dart';
|
||||
@ -19,7 +18,7 @@ import 'trim_path_content.dart';
|
||||
class EllipseContent implements PathContent, KeyPathElementContent {
|
||||
static const _ellipseControlPointPercentage = 0.55228;
|
||||
|
||||
final Path _path = PathFactory.create();
|
||||
final Path _path = Path();
|
||||
|
||||
@override
|
||||
final String? name;
|
||||
|
@ -9,7 +9,6 @@ import '../../model/key_path.dart';
|
||||
import '../../model/layer/base_layer.dart';
|
||||
import '../../utils.dart';
|
||||
import '../../utils/misc.dart';
|
||||
import '../../utils/path_factory.dart';
|
||||
import '../../value/drop_shadow.dart';
|
||||
import '../../value/lottie_value_callback.dart';
|
||||
import '../keyframe/base_keyframe_animation.dart';
|
||||
@ -21,8 +20,7 @@ import 'key_path_element_content.dart';
|
||||
import 'path_content.dart';
|
||||
|
||||
class FillContent implements DrawingContent, KeyPathElementContent {
|
||||
final Path _path = PathFactory.create();
|
||||
final Paint _paint = Paint();
|
||||
final Path _path = Path();
|
||||
final BaseLayer layer;
|
||||
@override
|
||||
final String? name;
|
||||
@ -80,32 +78,32 @@ class FillContent implements DrawingContent, KeyPathElementContent {
|
||||
}
|
||||
|
||||
@override
|
||||
void draw(Canvas canvas, Size size, Matrix4 parentMatrix,
|
||||
{required int parentAlpha}) {
|
||||
void draw(Canvas canvas, Matrix4 parentMatrix, {required int parentAlpha}) {
|
||||
if (_hidden) {
|
||||
return;
|
||||
}
|
||||
L.beginSection('FillContent#draw');
|
||||
_paint.color = _colorAnimation.value;
|
||||
|
||||
var paint = Paint()..color = _colorAnimation.value;
|
||||
var alpha =
|
||||
((parentAlpha / 255.0 * _opacityAnimation.value / 100.0) * 255).round();
|
||||
_paint.setAlpha(alpha.clamp(0, 255));
|
||||
paint.setAlpha(alpha.clamp(0, 255));
|
||||
if (lottieDrawable.antiAliasingSuggested) {
|
||||
_paint.isAntiAlias = true;
|
||||
paint.isAntiAlias = true;
|
||||
}
|
||||
|
||||
if (_colorFilterAnimation != null) {
|
||||
_paint.colorFilter = _colorFilterAnimation!.value;
|
||||
paint.colorFilter = _colorFilterAnimation!.value;
|
||||
}
|
||||
|
||||
var blurAnimation = _blurAnimation;
|
||||
if (blurAnimation != null) {
|
||||
var blurRadius = blurAnimation.value;
|
||||
if (blurRadius == 0) {
|
||||
_paint.maskFilter = null;
|
||||
paint.maskFilter = null;
|
||||
} else if (blurRadius != _blurMaskFilterRadius) {
|
||||
var blur = layer.getBlurMaskFilter(blurRadius);
|
||||
_paint.maskFilter = blur;
|
||||
paint.maskFilter = blur;
|
||||
}
|
||||
_blurMaskFilterRadius = blurRadius;
|
||||
}
|
||||
@ -121,7 +119,7 @@ class FillContent implements DrawingContent, KeyPathElementContent {
|
||||
if (dropShadow != null) {
|
||||
dropShadow.draw(canvas, _path);
|
||||
}
|
||||
canvas.drawPath(_path, _paint);
|
||||
canvas.drawPath(_path, paint);
|
||||
canvas.restore();
|
||||
|
||||
L.endSection('FillContent#draw');
|
||||
|
@ -11,7 +11,6 @@ import '../../model/key_path.dart';
|
||||
import '../../model/layer/base_layer.dart';
|
||||
import '../../utils.dart';
|
||||
import '../../utils/misc.dart';
|
||||
import '../../utils/path_factory.dart';
|
||||
import '../../value/drop_shadow.dart';
|
||||
import '../../value/lottie_value_callback.dart';
|
||||
import '../keyframe/base_keyframe_animation.dart';
|
||||
@ -29,7 +28,7 @@ class GradientFillContent implements DrawingContent, KeyPathElementContent {
|
||||
final GradientFill _fill;
|
||||
final _linearGradientCache = <int, Gradient>{};
|
||||
final _radialGradientCache = <int, Gradient>{};
|
||||
final _path = PathFactory.create();
|
||||
final _path = Path();
|
||||
final _paint = Paint();
|
||||
final _paths = <PathContent>[];
|
||||
final BaseKeyframeAnimation<GradientColor, GradientColor> _colorAnimation;
|
||||
@ -97,8 +96,7 @@ class GradientFillContent implements DrawingContent, KeyPathElementContent {
|
||||
}
|
||||
|
||||
@override
|
||||
void draw(Canvas canvas, Size size, Matrix4 parentMatrix,
|
||||
{required int parentAlpha}) {
|
||||
void draw(Canvas canvas, Matrix4 parentMatrix, {required int parentAlpha}) {
|
||||
if (_fill.hidden) {
|
||||
return;
|
||||
}
|
||||
@ -167,7 +165,7 @@ class GradientFillContent implements DrawingContent, KeyPathElementContent {
|
||||
Gradient _getLinearGradient() {
|
||||
var gradientHash = _getGradientHash();
|
||||
var gradient = _linearGradientCache[gradientHash];
|
||||
if (gradient != null) {
|
||||
if (gradient != null && _colorCallbackAnimation == null) {
|
||||
return gradient;
|
||||
}
|
||||
var startPoint = _startPointAnimation.value;
|
||||
@ -176,7 +174,9 @@ class GradientFillContent implements DrawingContent, KeyPathElementContent {
|
||||
var colors = _applyDynamicColorsIfNeeded(gradientColor.colors);
|
||||
var positions = gradientColor.positions;
|
||||
gradient = Gradient.linear(startPoint, endPoint, colors, positions);
|
||||
_linearGradientCache[gradientHash] = gradient;
|
||||
if (gradientHash != null) {
|
||||
_linearGradientCache[gradientHash] = gradient;
|
||||
}
|
||||
return gradient;
|
||||
}
|
||||
|
||||
@ -200,11 +200,16 @@ class GradientFillContent implements DrawingContent, KeyPathElementContent {
|
||||
radius = 0.001;
|
||||
}
|
||||
gradient = Gradient.radial(startPoint, radius, colors, positions);
|
||||
_radialGradientCache[gradientHash] = gradient;
|
||||
if (gradientHash != null) {
|
||||
_radialGradientCache[gradientHash] = gradient;
|
||||
}
|
||||
return gradient;
|
||||
}
|
||||
|
||||
int _getGradientHash() {
|
||||
int? _getGradientHash() {
|
||||
// Don't cache gradient if ValueDelegate.gradient is used
|
||||
if (_colorCallbackAnimation != null) return null;
|
||||
|
||||
var startPointProgress =
|
||||
(_startPointAnimation.progress * _cacheSteps).round();
|
||||
var endPointProgress = (_endPointAnimation.progress * _cacheSteps).round();
|
||||
|
@ -61,8 +61,7 @@ class GradientStrokeContent extends BaseStrokeContent {
|
||||
}
|
||||
|
||||
@override
|
||||
void draw(Canvas canvas, Size size, Matrix4 parentMatrix,
|
||||
{required int parentAlpha}) {
|
||||
void draw(Canvas canvas, Matrix4 parentMatrix, {required int parentAlpha}) {
|
||||
if (_hidden) {
|
||||
return;
|
||||
}
|
||||
@ -76,7 +75,7 @@ class GradientStrokeContent extends BaseStrokeContent {
|
||||
|
||||
paint.shader = gradient;
|
||||
|
||||
super.draw(canvas, size, parentMatrix, parentAlpha: parentAlpha);
|
||||
super.draw(canvas, parentMatrix, parentAlpha: parentAlpha);
|
||||
}
|
||||
|
||||
Gradient _getLinearGradient(Matrix4 parentMatrix) {
|
||||
@ -93,7 +92,9 @@ class GradientStrokeContent extends BaseStrokeContent {
|
||||
|
||||
gradient = Gradient.linear(startPoint, endPoint, colors, positions,
|
||||
TileMode.clamp, parentMatrix.storage);
|
||||
_linearGradientCache[gradientHash] = gradient;
|
||||
if (gradientHash != null) {
|
||||
_linearGradientCache[gradientHash] = gradient;
|
||||
}
|
||||
return gradient;
|
||||
}
|
||||
|
||||
@ -115,14 +116,19 @@ class GradientStrokeContent extends BaseStrokeContent {
|
||||
var radius = hypot(x1 - x0, y1 - y0).toDouble();
|
||||
gradient = Gradient.radial(startPoint, radius, colors, positions,
|
||||
TileMode.clamp, parentMatrix.storage);
|
||||
_radialGradientCache[gradientHash] = gradient;
|
||||
if (gradientHash != null) {
|
||||
_radialGradientCache[gradientHash] = gradient;
|
||||
}
|
||||
return gradient;
|
||||
}
|
||||
|
||||
//TODO(xha): cache the shader based on the input parameters and not the animation
|
||||
// progress.
|
||||
// At first, log when there is too many cache miss.
|
||||
int _getGradientHash(Matrix4 parentMatrix) {
|
||||
int? _getGradientHash(Matrix4 parentMatrix) {
|
||||
// Don't cache gradient if ValueDelegate.gradient is used
|
||||
if (_colorCallbackAnimation != null) return null;
|
||||
|
||||
var startPointProgress =
|
||||
(_startPointAnimation.progress * _cacheSteps).round();
|
||||
var endPointProgress = (_endPointAnimation.progress * _cacheSteps).round();
|
||||
|
@ -1,16 +1,15 @@
|
||||
import 'dart:ui';
|
||||
import '../../model/content/merge_paths.dart';
|
||||
import '../../utils.dart';
|
||||
import '../../utils/path_factory.dart';
|
||||
import 'content.dart';
|
||||
import 'content_group.dart';
|
||||
import 'greedy_content.dart';
|
||||
import 'path_content.dart';
|
||||
|
||||
class MergePathsContent implements PathContent, GreedyContent {
|
||||
final Path _firstPath = PathFactory.create();
|
||||
final Path _remainderPath = PathFactory.create();
|
||||
final Path _path = PathFactory.create();
|
||||
final Path _firstPath = Path();
|
||||
final Path _remainderPath = Path();
|
||||
final Path _path = Path();
|
||||
|
||||
final List<PathContent> _pathContents = <PathContent>[];
|
||||
final MergePaths _mergePaths;
|
||||
|
@ -8,7 +8,6 @@ import '../../model/content/shape_trim_path.dart';
|
||||
import '../../model/key_path.dart';
|
||||
import '../../model/layer/base_layer.dart';
|
||||
import '../../utils/misc.dart';
|
||||
import '../../utils/path_factory.dart';
|
||||
import '../../value/lottie_value_callback.dart';
|
||||
import '../keyframe/base_keyframe_animation.dart';
|
||||
import 'compound_trim_path_content.dart';
|
||||
@ -24,7 +23,7 @@ class PolystarContent implements PathContent, KeyPathElementContent {
|
||||
/// work otherwise.
|
||||
static const _polystarMagicNumber = .47829;
|
||||
static const _polygonMagicNumber = .25;
|
||||
final _path = PathFactory.create();
|
||||
final _path = Path();
|
||||
|
||||
final LottieDrawable lottieDrawable;
|
||||
final PolystarShape _polystarShape;
|
||||
@ -147,7 +146,7 @@ class PolystarContent implements PathContent, KeyPathElementContent {
|
||||
|
||||
var innerRoundedness = 0.0;
|
||||
if (_innerRoundednessAnimation != null) {
|
||||
innerRoundedness = _innerRoundednessAnimation!.value / 100.0;
|
||||
innerRoundedness = _innerRoundednessAnimation.value / 100.0;
|
||||
}
|
||||
var outerRoundedness = _outerRoundednessAnimation.value / 100.0;
|
||||
|
||||
@ -305,14 +304,14 @@ class PolystarContent implements PathContent, KeyPathElementContent {
|
||||
.setValueCallback(callback as LottieValueCallback<Offset>?);
|
||||
} else if (property == LottieProperty.polystarInnerRadius &&
|
||||
_innerRadiusAnimation != null) {
|
||||
_innerRadiusAnimation!
|
||||
_innerRadiusAnimation
|
||||
.setValueCallback(callback as LottieValueCallback<double>?);
|
||||
} else if (property == LottieProperty.polystarOuterRadius) {
|
||||
_outerRadiusAnimation
|
||||
.setValueCallback(callback as LottieValueCallback<double>?);
|
||||
} else if (property == LottieProperty.polystarInnerRoundedness &&
|
||||
_innerRoundednessAnimation != null) {
|
||||
_innerRoundednessAnimation!
|
||||
_innerRoundednessAnimation
|
||||
.setValueCallback(callback as LottieValueCallback<double>?);
|
||||
} else if (property == LottieProperty.polystarOuterRoundedness) {
|
||||
_outerRoundednessAnimation
|
||||
|
@ -8,7 +8,6 @@ import '../../model/content/shape_trim_path.dart';
|
||||
import '../../model/key_path.dart';
|
||||
import '../../model/layer/base_layer.dart';
|
||||
import '../../utils/misc.dart';
|
||||
import '../../utils/path_factory.dart';
|
||||
import '../../value/lottie_value_callback.dart';
|
||||
import '../keyframe/base_keyframe_animation.dart';
|
||||
import 'compound_trim_path_content.dart';
|
||||
@ -19,7 +18,7 @@ import 'rounded_corners_content.dart';
|
||||
import 'trim_path_content.dart';
|
||||
|
||||
class RectangleContent implements KeyPathElementContent, PathContent {
|
||||
final _path = PathFactory.create();
|
||||
final _path = Path();
|
||||
|
||||
@override
|
||||
final String? name;
|
||||
|
@ -7,7 +7,6 @@ import '../../model/key_path.dart';
|
||||
import '../../model/layer/base_layer.dart';
|
||||
import '../../utils.dart';
|
||||
import '../../utils/misc.dart';
|
||||
import '../../utils/path_factory.dart';
|
||||
import '../../value/lottie_value_callback.dart';
|
||||
import '../keyframe/base_keyframe_animation.dart';
|
||||
import '../keyframe/transform_keyframe_animation.dart';
|
||||
@ -25,7 +24,7 @@ class RepeaterContent
|
||||
GreedyContent,
|
||||
KeyPathElementContent {
|
||||
final Matrix4 _matrix = Matrix4.identity();
|
||||
final _path = PathFactory.create();
|
||||
final _path = Path();
|
||||
|
||||
final LottieDrawable lottieDrawable;
|
||||
final BaseLayer layer;
|
||||
@ -105,8 +104,7 @@ class RepeaterContent
|
||||
}
|
||||
|
||||
@override
|
||||
void draw(Canvas canvas, Size size, Matrix4 parentMatrix,
|
||||
{required int parentAlpha}) {
|
||||
void draw(Canvas canvas, Matrix4 parentMatrix, {required int parentAlpha}) {
|
||||
var copies = _copies.value;
|
||||
var offset = _offset.value;
|
||||
var startOpacity = _transform.startOpacity!.value / 100.0;
|
||||
@ -116,7 +114,7 @@ class RepeaterContent
|
||||
_matrix.preConcat(_transform.getMatrixForRepeater(i + offset));
|
||||
var newAlpha =
|
||||
parentAlpha * lerpDouble(startOpacity, endOpacity, i / copies)!;
|
||||
_contentGroup!.draw(canvas, size, _matrix, parentAlpha: newAlpha.round());
|
||||
_contentGroup!.draw(canvas, _matrix, parentAlpha: newAlpha.round());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -107,7 +107,7 @@ class RoundedCornersContent implements ShapeModifierContent {
|
||||
|
||||
// We can't round the corner of the end of a non-closed curve.
|
||||
var isEndOfCurve = !startingShapeData.isClosed &&
|
||||
(i == 0 && i == startingCurves.length - 1);
|
||||
(i == 0 || i == startingCurves.length - 1);
|
||||
if (inPoint == vertex && outPoint == vertex && !isEndOfCurve) {
|
||||
// This vertex is a point. Round its corners
|
||||
var dxToPreviousVertex = vertex.dx - previousVertex.dx;
|
||||
@ -200,7 +200,7 @@ class RoundedCornersContent implements ShapeModifierContent {
|
||||
var outPoint = startingCurve.controlPoint1;
|
||||
|
||||
var isEndOfCurve = !startingShapeData.isClosed &&
|
||||
(i == 0 && i == startingCurves.length - 1);
|
||||
(i == 0 || i == startingCurves.length - 1);
|
||||
if (inPoint == vertex && outPoint == vertex && !isEndOfCurve) {
|
||||
vertices += 2;
|
||||
} else {
|
||||
|
@ -4,7 +4,6 @@ import '../../model/content/shape_path.dart';
|
||||
import '../../model/content/shape_trim_path.dart';
|
||||
import '../../model/layer/base_layer.dart';
|
||||
import '../../utils.dart';
|
||||
import '../../utils/path_factory.dart';
|
||||
import '../keyframe/shape_keyframe_animation.dart';
|
||||
import 'compound_trim_path_content.dart';
|
||||
import 'content.dart';
|
||||
@ -13,7 +12,7 @@ import 'shape_modifier_content.dart';
|
||||
import 'trim_path_content.dart';
|
||||
|
||||
class ShapeContent implements PathContent {
|
||||
final _path = PathFactory.create();
|
||||
final _path = Path();
|
||||
|
||||
final ShapePath _shape;
|
||||
|
||||
|
@ -34,16 +34,16 @@ class StrokeContent extends BaseStrokeContent {
|
||||
}
|
||||
|
||||
@override
|
||||
void draw(Canvas canvas, Size size, Matrix4 parentMatrix,
|
||||
{required int parentAlpha}) {
|
||||
void draw(Canvas canvas, Matrix4 parentMatrix, {required int parentAlpha}) {
|
||||
if (_hidden) {
|
||||
return;
|
||||
}
|
||||
paint.color = _colorAnimation.value.withAlpha(paint.color.alpha);
|
||||
paint.color =
|
||||
_colorAnimation.value.withAlpha((paint.color.a * 255).toInt());
|
||||
if (_colorFilterAnimation != null) {
|
||||
paint.colorFilter = _colorFilterAnimation!.value;
|
||||
}
|
||||
super.draw(canvas, size, parentMatrix, parentAlpha: parentAlpha);
|
||||
super.draw(canvas, parentMatrix, parentAlpha: parentAlpha);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -3,8 +3,8 @@ import '../../l.dart';
|
||||
import '../../value/keyframe.dart';
|
||||
import '../../value/lottie_value_callback.dart';
|
||||
|
||||
/// @param <K> Keyframe type
|
||||
/// @param <A> Animation type
|
||||
/// @param K Keyframe type
|
||||
/// @param A Animation type
|
||||
abstract class BaseKeyframeAnimation<K extends Object, A extends Object?> {
|
||||
// This is not a Set because we don't want to create an iterator object on every setProgress.
|
||||
final listeners = <void Function()>[];
|
||||
@ -82,7 +82,7 @@ abstract class BaseKeyframeAnimation<K extends Object, A extends Object?> {
|
||||
/// the current keyframe's interpolator.
|
||||
double getInterpolatedCurrentKeyframeProgress() {
|
||||
var keyframe = getCurrentKeyframe();
|
||||
if (keyframe.isStatic) {
|
||||
if (keyframe.isStatic || keyframe.interpolator == null) {
|
||||
return 0.0;
|
||||
}
|
||||
return keyframe.interpolator!.transform(getLinearCurrentKeyframeProgress());
|
||||
|
@ -69,8 +69,8 @@ class DropShadowKeyframeAnimation {
|
||||
if (callback != null) {
|
||||
_color.setValueCallback(_createCallback(
|
||||
callback, (c) => c?.color ?? const Color(0xff000000)));
|
||||
_opacity.setValueCallback(
|
||||
_createCallback(callback, (c) => c?.color.alpha.toDouble() ?? 255));
|
||||
_opacity
|
||||
.setValueCallback(_createCallback(callback, (c) => c?.color.a ?? 1));
|
||||
_direction.setValueCallback(
|
||||
_createCallback(callback, (c) => c?.direction ?? 0));
|
||||
_distance
|
||||
|
@ -1,3 +1,4 @@
|
||||
import 'dart:math' as math;
|
||||
import 'dart:ui';
|
||||
import '../../model/content/gradient_color.dart';
|
||||
import '../../value/keyframe.dart';
|
||||
@ -8,8 +9,17 @@ class GradientColorKeyframeAnimation extends KeyframeAnimation<GradientColor> {
|
||||
|
||||
GradientColorKeyframeAnimation(List<Keyframe<GradientColor>> keyframes)
|
||||
: super(keyframes) {
|
||||
var startValue = keyframes.first.startValue;
|
||||
var size = startValue == null ? 0 : startValue.size;
|
||||
// Not all keyframes that this GradientColor are used for will have the same length.
|
||||
// AnimatableGradientColorValue.ensureInterpolatableKeyframes may add extra positions
|
||||
// for some keyframes but not others to ensure that it is interpolatable.
|
||||
// Ensure that there is enough space for the largest keyframe.
|
||||
var size = 0;
|
||||
for (var i = 0; i < keyframes.length; i++) {
|
||||
var startValue = keyframes[i].startValue;
|
||||
if (startValue != null) {
|
||||
size = math.max(size, startValue.size);
|
||||
}
|
||||
}
|
||||
_gradientColor = GradientColor(List<double>.filled(size, 0.0),
|
||||
List<Color>.filled(size, const Color(0x00000000)));
|
||||
}
|
||||
|
@ -7,16 +7,18 @@ class IntegerKeyframeAnimation extends KeyframeAnimation<int> {
|
||||
|
||||
@override
|
||||
int getValue(Keyframe<int> keyframe, double keyframeProgress) {
|
||||
if (keyframe.startValue == null || keyframe.endValue == null) {
|
||||
if (keyframe.startValue == null) {
|
||||
throw Exception('Missing values for keyframe.');
|
||||
}
|
||||
|
||||
var endValue = keyframe.endValue ?? keyframe.startValue;
|
||||
|
||||
if (valueCallback != null) {
|
||||
var value = valueCallback!.getValueInternal(
|
||||
keyframe.startFrame,
|
||||
keyframe.endFrame,
|
||||
keyframe.startValue,
|
||||
keyframe.endValue,
|
||||
endValue,
|
||||
keyframeProgress,
|
||||
getLinearCurrentKeyframeProgress(),
|
||||
progress);
|
||||
@ -25,7 +27,6 @@ class IntegerKeyframeAnimation extends KeyframeAnimation<int> {
|
||||
}
|
||||
}
|
||||
|
||||
return lerpDouble(keyframe.startValue, keyframe.endValue, keyframeProgress)!
|
||||
.round();
|
||||
return lerpDouble(keyframe.startValue, endValue, keyframeProgress)!.round();
|
||||
}
|
||||
}
|
||||
|
@ -16,21 +16,20 @@ class PathKeyframe extends Keyframe<Offset> {
|
||||
xInterpolator: keyframe.xInterpolator,
|
||||
yInterpolator: keyframe.yInterpolator,
|
||||
startFrame: keyframe.startFrame,
|
||||
endFrame: keyframe.endFrame) {
|
||||
createPath();
|
||||
}
|
||||
endFrame: keyframe.endFrame);
|
||||
|
||||
void createPath() {
|
||||
Path? _createPath() {
|
||||
var equals =
|
||||
endValue != null && startValue != null && startValue == endValue;
|
||||
if (startValue != null && endValue != null && !equals) {
|
||||
_path = Utils.createPath(startValue!, endValue!, _pointKeyFrame.pathCp1,
|
||||
return Utils.createPath(startValue!, endValue!, _pointKeyFrame.pathCp1,
|
||||
_pointKeyFrame.pathCp2);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// This will be null if the startValue and endValue are the same. */
|
||||
/// This will be null if the startValue and endValue are the same.
|
||||
Path? getPath() {
|
||||
return _path;
|
||||
return _path ??= _createPath();
|
||||
}
|
||||
}
|
||||
|
@ -36,8 +36,22 @@ class PathKeyframeAnimation extends KeyframeAnimation<Offset> {
|
||||
_pathMeasureKeyframe = pathKeyframe;
|
||||
}
|
||||
|
||||
return _pathMeasure
|
||||
.getTangentForOffset(keyframeProgress * _pathMeasure.length)!
|
||||
.position;
|
||||
var length = _pathMeasure.length;
|
||||
|
||||
// allow bounce easings to calculate positions outside the path
|
||||
// by using the tangent at the extremities
|
||||
|
||||
if (keyframeProgress < 0) {
|
||||
var tangent = _pathMeasure.getTangentForOffset(0)!;
|
||||
return tangent.position + tangent.vector * (keyframeProgress * length);
|
||||
} else if (keyframeProgress > 1) {
|
||||
var tangent = _pathMeasure.getTangentForOffset(length)!;
|
||||
return tangent.position +
|
||||
tangent.vector * ((keyframeProgress - 1) * length);
|
||||
} else {
|
||||
return _pathMeasure
|
||||
.getTangentForOffset(keyframeProgress * length)!
|
||||
.position;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,13 @@
|
||||
import 'dart:ui';
|
||||
import '../../model/content/shape_data.dart';
|
||||
import '../../utils/misc.dart';
|
||||
import '../../utils/path_factory.dart';
|
||||
import '../../value/keyframe.dart';
|
||||
import '../content/shape_modifier_content.dart';
|
||||
import 'base_keyframe_animation.dart';
|
||||
|
||||
class ShapeKeyframeAnimation extends BaseKeyframeAnimation<ShapeData, Path> {
|
||||
final ShapeData _tempShapeData = ShapeData.empty();
|
||||
final Path _tempPath = PathFactory.create();
|
||||
final Path _tempPath = Path();
|
||||
List<ShapeModifierContent>? _shapeModifiers;
|
||||
|
||||
ShapeKeyframeAnimation(super.keyframes);
|
||||
@ -16,7 +15,7 @@ class ShapeKeyframeAnimation extends BaseKeyframeAnimation<ShapeData, Path> {
|
||||
@override
|
||||
Path getValue(Keyframe<ShapeData> keyframe, double keyframeProgress) {
|
||||
var startShapeData = keyframe.startValue!;
|
||||
var endShapeData = keyframe.endValue!;
|
||||
var endShapeData = keyframe.endValue ?? startShapeData;
|
||||
|
||||
_tempShapeData.interpolateBetween(
|
||||
startShapeData, endShapeData, keyframeProgress);
|
||||
|
@ -23,6 +23,7 @@ class TransformKeyframeAnimation {
|
||||
_position = animatableTransform.position?.createAnimation(),
|
||||
_scale = animatableTransform.scale?.createAnimation(),
|
||||
_rotation = animatableTransform.rotation?.createAnimation(),
|
||||
_autoOrient = animatableTransform.isAutoOrient,
|
||||
_skew = animatableTransform.skew?.createAnimation(),
|
||||
_skewAngle = animatableTransform.skewAngle?.createAnimation(),
|
||||
_opacity = animatableTransform.opacity?.createAnimation(),
|
||||
@ -50,6 +51,8 @@ class TransformKeyframeAnimation {
|
||||
BaseKeyframeAnimation<double, double>? _endOpacity;
|
||||
BaseKeyframeAnimation<double, double>? get endOpacity => _endOpacity;
|
||||
|
||||
final bool _autoOrient;
|
||||
|
||||
void addAnimationsToLayer(BaseLayer layer) {
|
||||
layer.addAnimation(_opacity);
|
||||
layer.addAnimation(_startOpacity);
|
||||
@ -97,10 +100,31 @@ class TransformKeyframeAnimation {
|
||||
}
|
||||
}
|
||||
|
||||
if (_rotation != null) {
|
||||
final rotation = _rotation!.value;
|
||||
if (rotation != 0) {
|
||||
_matrix.rotateZ(rotation * pi / 180.0);
|
||||
// If autoOrient is true, the rotation should follow the derivative of the position rather
|
||||
// than the rotation property.
|
||||
if (_autoOrient) {
|
||||
if (_position case var position?) {
|
||||
var currentProgress = position.progress;
|
||||
var startPosition = position.value;
|
||||
// Store the start X and Y values because the pointF will be overwritten by the next getValue call.
|
||||
var startX = startPosition.dx;
|
||||
var startY = startPosition.dy;
|
||||
// 1) Find the next position value.
|
||||
// 2) Create a vector from the current position to the next position.
|
||||
// 3) Find the angle of that vector to the X axis (0 degrees).
|
||||
position.setProgress(currentProgress + 0.0001);
|
||||
var nextPosition = position.value;
|
||||
position.setProgress(currentProgress);
|
||||
var rotationValue =
|
||||
degrees(atan2(nextPosition.dy - startY, nextPosition.dx - startX));
|
||||
_matrix.rotateZ(rotationValue);
|
||||
}
|
||||
} else {
|
||||
if (_rotation != null) {
|
||||
final rotation = _rotation!.value;
|
||||
if (rotation != 0) {
|
||||
_matrix.rotateZ(rotation * pi / 180.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -132,9 +156,9 @@ class TransformKeyframeAnimation {
|
||||
0, 0, 0, 1, //
|
||||
);
|
||||
|
||||
_skewMatrix2!.multiply(_skewMatrix1!);
|
||||
_skewMatrix3!.multiply(_skewMatrix2!);
|
||||
_matrix.multiply(_skewMatrix3!);
|
||||
_skewMatrix2.multiply(_skewMatrix1);
|
||||
_skewMatrix3.multiply(_skewMatrix2);
|
||||
_matrix.multiply(_skewMatrix3);
|
||||
}
|
||||
|
||||
if (_scale != null) {
|
||||
|
@ -17,6 +17,9 @@ import 'utils.dart';
|
||||
|
||||
typedef WarningCallback = void Function(String);
|
||||
|
||||
/// A function that knows how to transform a list of bytes to a `LottieComposition`
|
||||
typedef LottieDecoder = Future<LottieComposition?> Function(List<int> bytes);
|
||||
|
||||
class CompositionParameters {
|
||||
MutableRectangle<int> bounds = MutableRectangle<int>(0, 0, 0, 0);
|
||||
double startFrame = 0.0;
|
||||
@ -35,25 +38,47 @@ class CompositionParameters {
|
||||
}
|
||||
|
||||
class LottieComposition {
|
||||
static Future<LottieComposition> fromByteData(ByteData data,
|
||||
{String? name, LottieImageProviderFactory? imageProviderFactory}) {
|
||||
return fromBytes(data.buffer.asUint8List(),
|
||||
name: name, imageProviderFactory: imageProviderFactory);
|
||||
static LottieComposition parseJsonBytes(List<int> bytes) {
|
||||
return LottieCompositionParser.parse(
|
||||
LottieComposition._(), JsonReader.fromBytes(bytes));
|
||||
}
|
||||
|
||||
static Future<LottieComposition> fromBytes(Uint8List bytes,
|
||||
{String? name, LottieImageProviderFactory? imageProviderFactory}) async {
|
||||
Archive? archive;
|
||||
if (bytes[0] == 0x50 && bytes[1] == 0x4B) {
|
||||
archive = ZipDecoder().decodeBytes(bytes);
|
||||
var jsonFile = archive.files.firstWhere((e) => e.name.endsWith('.json'));
|
||||
bytes = jsonFile.content as Uint8List;
|
||||
static Future<LottieComposition> fromByteData(
|
||||
ByteData data, {
|
||||
LottieDecoder? decoder,
|
||||
}) {
|
||||
return fromBytes(data.buffer.asUint8List(), decoder: decoder);
|
||||
}
|
||||
|
||||
static Future<LottieComposition> fromBytes(
|
||||
List<int> bytes, {
|
||||
LottieDecoder? decoder,
|
||||
}) async {
|
||||
decoder ??= decodeZip;
|
||||
|
||||
var compositionFuture = await decoder(bytes);
|
||||
if (compositionFuture != null) {
|
||||
return compositionFuture;
|
||||
}
|
||||
return parseJsonBytes(bytes);
|
||||
}
|
||||
|
||||
var composition = LottieCompositionParser.parse(
|
||||
LottieComposition._(name), JsonReader.fromBytes(bytes));
|
||||
static Future<LottieComposition?> decodeZip(
|
||||
List<int> bytes, {
|
||||
LottieImageProviderFactory? imageProviderFactory,
|
||||
ArchiveFile? Function(List<ArchiveFile>)? filePicker,
|
||||
}) async {
|
||||
if (bytes[0] == 0x50 && bytes[1] == 0x4B) {
|
||||
var archive = ZipDecoder().decodeBytes(bytes);
|
||||
|
||||
ArchiveFile? jsonFile;
|
||||
if (filePicker != null) {
|
||||
jsonFile = filePicker(archive.files);
|
||||
}
|
||||
jsonFile ??= archive.files.firstWhere((e) => e.name.endsWith('.json'));
|
||||
|
||||
var composition = parseJsonBytes(jsonFile.content);
|
||||
|
||||
if (archive != null) {
|
||||
for (var image in composition.images.values) {
|
||||
var imagePath = p.posix.join(image.dirName, image.fileName);
|
||||
var found = archive.files.firstWhereOrNull(
|
||||
@ -69,18 +94,33 @@ class LottieComposition {
|
||||
}
|
||||
|
||||
if (found != null) {
|
||||
image.loadedImage ??= await loadImage(
|
||||
composition, image, MemoryImage(found.content as Uint8List));
|
||||
image.loadedImage ??=
|
||||
await loadImage(composition, image, MemoryImage(found.content));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return composition;
|
||||
for (var font in archive.files.where((f) => f.name.endsWith('.ttf'))) {
|
||||
var fileName = p.basenameWithoutExtension(font.name).toLowerCase();
|
||||
var existingFont = composition.fonts.values
|
||||
.firstWhereOrNull((f) => f.family.toLowerCase() == fileName);
|
||||
composition._fontsToLoad
|
||||
.add(FontToLoad(font.content, family: existingFont?.family));
|
||||
}
|
||||
return composition;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
LottieComposition._(this.name);
|
||||
static Future<LottieComposition?> decodeGZip(List<int> bytes) async {
|
||||
if (bytes[0] == 31 && bytes[1] == 139) {
|
||||
var decodedBytes = GZipDecoder().decodeBytes(bytes);
|
||||
return LottieComposition.parseJsonBytes(decodedBytes);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
LottieComposition._();
|
||||
|
||||
final String? name;
|
||||
final _performanceTracker = PerformanceTracker();
|
||||
// This is stored as a set to avoid duplicates.
|
||||
final _warnings = <String>{};
|
||||
@ -96,6 +136,8 @@ class LottieComposition {
|
||||
/// was only faster until you had ~4 masks after which it would actually become slower.
|
||||
int _maskAndMatteCount = 0;
|
||||
|
||||
final _fontsToLoad = <FontToLoad>[];
|
||||
|
||||
WarningCallback? onWarning;
|
||||
|
||||
void addWarning(String warning) {
|
||||
@ -169,9 +211,8 @@ class LottieComposition {
|
||||
return _parameters.images;
|
||||
}
|
||||
|
||||
double get durationFrames {
|
||||
return endFrame - startFrame;
|
||||
}
|
||||
/// Number of frames in the animation
|
||||
double get durationFrames => endFrame - startFrame;
|
||||
|
||||
/// Returns a "rounded" progress value according to the frameRate
|
||||
double roundProgress(double progress, {required FrameRate frameRate}) {
|
||||
@ -182,8 +223,10 @@ class LottieComposition {
|
||||
fps = this.frameRate;
|
||||
}
|
||||
fps ??= frameRate.framesPerSecond;
|
||||
assert(!fps.isNaN && fps.isFinite && !fps.isNegative);
|
||||
|
||||
var totalFrameCount = seconds * fps;
|
||||
var noOffsetDurationFrames = durationFrames + 0.01;
|
||||
var totalFrameCount = (noOffsetDurationFrames / this.frameRate) * fps;
|
||||
var frameIndex = (totalFrameCount * progress).toInt();
|
||||
var roundedProgress = frameIndex / totalFrameCount;
|
||||
assert(roundedProgress >= 0 && roundedProgress <= 1,
|
||||
@ -200,3 +243,19 @@ class LottieComposition {
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
class FontToLoad {
|
||||
final Uint8List bytes;
|
||||
final String? family;
|
||||
|
||||
FontToLoad(this.bytes, {this.family});
|
||||
|
||||
static List<FontToLoad>? getAndClear(LottieComposition composition) {
|
||||
if (composition._fontsToLoad.isNotEmpty) {
|
||||
var fonts = composition._fontsToLoad.toList();
|
||||
composition._fontsToLoad.clear();
|
||||
return fonts;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user