Merge pull request #121 from rive-app/antialiasing

Antialiasing
This commit is contained in:
Matt Sullivan
2021-06-11 17:23:50 -07:00
committed by GitHub
6 changed files with 45 additions and 26 deletions

View File

@ -1,8 +1,11 @@
## [0.7.17] - 2021-06-11 18:00:00
- Exposes antialiasing option in Rive and RiveAnimation widgets.
## [0.7.16] - 2021-06-11 12:00:00
- Fixes broken build issue in 0.7.15
## [0.7.15] - 2021-06-10 12:00:00
- Adds linear animation and state machine getters to RuntimeArtboard
- Adds linear animation and state machine getters to RuntimeArtboard.
- RiveAnimation now takes lists of animation and state machine names and plays all of them.
- NOTE: this build is broken

View File

@ -154,6 +154,6 @@ _controller.isActiveChanged.addListener(() {
}
```
## More Info
## Antialiasing
For an in-depth tutorial on how to use the runtime, check out [this blog post](https://blog.rive.app/rives-flutter-runtime-part-1/).
If you want to disable antialiasing (usually for performance reasons), you can set `antialiasing` to `false` on the `Rive` and `RiveAnimation` widgets.

View File

@ -11,7 +11,6 @@ class SimpleAnimation extends StatelessWidget {
title: const Text('Simple Animation'),
),
body: const Center(
// child: RiveAnimation.asset('assets/off_road_car.riv'),
child: RiveAnimation.network(
'https://cdn.rive.app/animations/vehicles.riv',
fit: BoxFit.cover,

View File

@ -6,6 +6,7 @@ import 'package:rive/src/rive_render_box.dart';
import 'package:rive/src/runtime_artboard.dart';
class Rive extends LeafRenderObjectWidget {
/// Artboard used for drawing
final Artboard artboard;
/// Determines whether to use the inherent size of the [artboard], i.e. the
@ -27,12 +28,19 @@ class Rive extends LeafRenderObjectWidget {
/// this to `true`.
final bool useArtboardSize;
/// Fit for the rendering artboard
final BoxFit fit;
/// Alignment for the rendering artboard
final Alignment alignment;
/// Enables/disables anitalising
final bool antialiasing;
const Rive({
required this.artboard,
this.useArtboardSize = false,
this.antialiasing = true,
BoxFit? fit,
Alignment? alignment,
}) : fit = fit ?? BoxFit.contain,
@ -40,6 +48,8 @@ class Rive extends LeafRenderObjectWidget {
@override
RenderObject createRenderObject(BuildContext context) {
// Doing this here and not in constructor so it can remain const
artboard.antialiasing = antialiasing;
return RiveRenderObject(artboard as RuntimeArtboard)
..fit = fit
..alignment = alignment
@ -50,6 +60,7 @@ class Rive extends LeafRenderObjectWidget {
@override
void updateRenderObject(
BuildContext context, covariant RiveRenderObject renderObject) {
artboard.antialiasing = antialiasing;
renderObject
..artboard = artboard
..fit = fit

View File

@ -4,7 +4,7 @@ import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:rive/rive.dart';
import 'package:rive/src/rive_core/artboard.dart';
import 'package:universal_io/io.dart';
import 'package:http/http.dart' as http;
enum _Source {
asset,
@ -15,14 +15,31 @@ enum _Source {
/// animation are not specified, the default artboard and first animation fonund
/// within it are used.
class RiveAnimation extends StatefulWidget {
/// The asset name or url
final String name;
/// The type of source used to retrieve the asset
final _Source src;
/// The name of the artboard to use; default artboard if not specified
final String? artboard;
/// List of animations to play; default animation if not specified
final List<String> animations;
/// List of state machines to play; none will play if not specified
final List<String> stateMachines;
/// Fit for the animation in the widget
final BoxFit? fit;
/// Alignment for the animation in the widget
final Alignment? alignment;
/// Widget displayed while the rive is loading.
/// Enable/disable antialiasing when rendering
final bool antialiasing;
/// Widget displayed while the rive is loading
final Widget? placeHolder;
/// Creates a new RiveAnimation from an asset bundle
@ -34,6 +51,7 @@ class RiveAnimation extends StatefulWidget {
this.fit,
this.alignment,
this.placeHolder,
this.antialiasing = true,
}) : src = _Source.asset;
const RiveAnimation.network(
@ -44,6 +62,7 @@ class RiveAnimation extends StatefulWidget {
this.fit,
this.alignment,
this.placeHolder,
this.antialiasing = true,
}) : src = _Source.network;
@override
@ -83,24 +102,10 @@ class _RiveAnimationState extends State<RiveAnimation> {
/// Loads a Rive file from an HTTP source and configures artboard, animation,
/// and controller.
void _loadNetwork() {
final client = HttpClient();
final contents = <int>[];
client
.getUrl(Uri.parse(widget.name))
.then(
(req) async => req.close(),
)
.then(
(res) => res.listen(
contents.addAll,
onDone: () {
final data = ByteData.view(Uint8List.fromList(contents).buffer);
_init(data);
},
),
);
Future<void> _loadNetwork() async {
final res = await http.get(Uri.parse(widget.name));
final data = ByteData.view(res.bodyBytes.buffer);
_init(data);
}
/// Initializes the artboard, animation, and controller
@ -153,6 +158,7 @@ class _RiveAnimationState extends State<RiveAnimation> {
artboard: _artboard!,
fit: widget.fit,
alignment: widget.alignment,
antialiasing: widget.antialiasing,
)
: widget.placeHolder ?? const SizedBox();
}

View File

@ -1,6 +1,6 @@
name: rive
description: Rive 2 Flutter Runtime. This package provides runtime functionality for playing back and interacting with animations built with the Rive editor available at https://rive.app.
version: 0.7.16
version: 0.7.17
repository: https://github.com/rive-app/rive-flutter
homepage: https://rive.app
@ -12,8 +12,8 @@ dependencies:
flutter:
sdk: flutter
graphs: ^2.0.0
http: ^0.13.3
meta: ^1.3.0
universal_io: ^2.0.4
dev_dependencies:
flutter_test: