Makes this easier:
```
class MyController extends RiveAnimationController<Artboard> {
@override
bool init(Artboard core) {
var run = core.component<TextValueRun>("blah");
run?.text = "HEEEEEY";
return super.init(core);
}
@override
void apply(Artboard? core, double elapsedSeconds) {}
}
```
Also exposes NestedArtboard which lots of users have requested.
Diffs=
fa36ec055 Make TextValueRun visible to clients and NestedArtboards too. (#5657)
Co-authored-by: Luigi Rosso <luigi-rosso@users.noreply.github.com>
Follow this thread: https://2dimensions.slack.com/archives/CLLCU09T6/p1690220943525829
Note that re-running the generator picked up some more changes.
Diffs=
aeb9210ad Fix runtime image sizes and run core generator. (#5655)
Co-authored-by: Luigi Rosso <luigi-rosso@users.noreply.github.com>
- Exposes `useArtboardSize` in RiveAnimation
- Checks to see if clipping is disabled - Artboard.clip
- Provides means to supply a custom Rect for clipping
Diffs=
fa6ed717b improve Rive widget clipping and sizing (#5154)
13863bf8f Rive Text for iOS and Android! (#5634)
9e0c43b70 Fix small bugs caught by JC (and Alex). (#5647)
Co-authored-by: Gordon <pggordonhayes@gmail.com>
just ran "generate_core_runtimes.sh" because it looks like we've started to fall behind a bunch here.
Any reason not to get this merged (after sorting any issues)
looks like it has some text updates & follow constraints?
i guess it'd be good to double check this for things we do not want in the public runtimes
Diffs=
d0c65132d ran generate core runtimes (#5628)
420d27a5b FollowPathConstraint to extend TransformSpaceConstraint (#5635)
Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
…e asset extensions into api as well
bit of a refactor...
tldr move stage mutation & export mutation stuff into rive api (we couldjust move export i guess...)
move the export helper into rive-api as well
this allows peon to share the same code as our backend here!
Diffs=
17a07fe2e refactor asset export helpers, moving them into rive-api & moving som… (#5620)
Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
…sset
ok just "fixing" how we export .riv files, and no-longer rely on width and height form image assets, but take them from the image instead.
its not "huge" difference, but basically it means that if we replace an existing image with an image of different dimensions we end up drawing the image from the centre of where the original image was, rather than the top left, which is a bit mroe forgiving
example:
got a few images in here, (they're all like 5k x 3k pixels, so all quite large)
<img width="1086" alt="CleanShot 2023-07-03 at 16 28 34@2x" src="https://github.com/rive-app/rive/assets/1216025/625e0d34-ac0c-4eb6-ad75-cb839aca92ac">
before this change this would look like:
<img width="1135" alt="CleanShot 2023-07-03 at 16 28 46@2x" src="https://github.com/rive-app/rive/assets/1216025/8ba848da-5938-4897-a664-eaae39c86806">
with this change we get
<img width="1113" alt="CleanShot 2023-07-03 at 16 29 17@2x" src="https://github.com/rive-app/rive/assets/1216025/c5f30eb6-21bd-419e-802d-9c98c00399e7">
(the mesh is kinda interesting here)
*note* i'm not touching the cpp runtime just yet, so this & other changes still need to make it down there
Diffs=
235908221 use the dimensions of the image at runtime, rather than of the ImageA… (#5519)
Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
Resolves https://github.com/rive-app/rive-flutter/issues/321
This requires Sentry to be updated as well.
Diffs=
05c8632e8 Update http v1.1.0 (#5540)
db5688c4a Don't use the '-g' buildoption in premake (#5621)
b17671130 Fixing modifier ranges not updating on the right frame. (#5623)
Co-authored-by: Gordon <pggordonhayes@gmail.com>
- enables overriding the exporttype on export
- forces the "preview" riv file that gets exported to be exported "embedded"
- allows us to handle exceptions when decoding images (more to be done here, but this at least lets us avoid crashing without being able to catch exceptions https://api.flutter.dev/flutter/dart-ui/decodeImageFromList.html)
Diffs=
185b76201 Force embed assets when getting the preview for the sharelinks (#5608)
8e82475b8 Baseline Origin (#5577)
8b49fcbc5 Add option to quantize time to whole frames of framerate. (#5578)
b8e5473b9 Follow path should respect constrained component rotation if orient is off (#5601)
Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
three commits
1 - updated the generator
2 - ran generator against core
3 - ran generator against core runtime
i tried to remove all the changes that are not the comment change
Diffs=
1292ebe56 Code generator fixes alternative (#5584)
094afae0b Adding target origin to transform constraint. (#5559)
Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
Adds some cleanup to this previous PR: https://github.com/rive-app/rive/pull/5411/files
- Brings back some classes and parameters and mark them as deprecated.
- Changed the naming for parameters
- Removed asset resolving from the high level `RiveAnimation` widget, prefer to manage this by loading in your own `RiveFile`. This is to avoid introducing too many changes that we may revert down the line
- Removed code comments that were intended as questions, marked some as TODOs
- Improved documentation and cleaned up example
The cached asset example now has a button to hot swap out assets at runtime by keeping a reference to the asset. This works for images, but not for Fonts.
- We can either remove this example for the time being
- Or investigate why it does not swap out (I would expect it to)
Diffs=
94e3490ae refactor: asset resolving (#5563)
bae069339 Stop automatically pruning empty segments in RawPath (#5557)
2d2d8c413 Line Height & Paragraph Spacing (#5552)
Co-authored-by: Gordon <pggordonhayes@gmail.com>
Finally ready! Some highlights:
- Text objects own TextModifierGroups
- A TextModifierGroup defines a set of operations (Modifiers) to perform on ranges of the whole Text object.
- The ranges are defined by TextModifierRanges which are owned by TextModiferGroups. Each TextModifierGroup can have multiple TextModifierRanges, meaning that the set of Modifiers will perform on the final selection defined by TextModifierRanges.
- TextModifierRanges select portions of the text in a Text object based on rules that define the strength of the selection. The strength of multiple TextModifierRanges can be blended together meaning selection strength can be above 1 and below 0 (optionally clamped).
- There are three fundamental modifications:
1. Transform where glyphs are individually transformed by a matrix
2. Paint where glyphs are drawn with different paint (currently only opacity is supported, but later Fill and Stroke will be too).
3. Shape where a selection can have shaping properties (currently variable axes later also font size) changed. This is the most complex one as it requires [two pass shaping](ef2d0d3ca3/packages/runtime/src/text/text.cpp (L578-L598)).
Diffs=
8086bdbf9 Runtime modifiers (#5512)
1a271c437 Get more compiling on MSVC (#5547)
5a18c89bd Swap propertyKeys between follow path and text core defs (#5543)
942bb8c94 Fix conflicting core key ids and set follow path offset to default false (#5541)
dcf320c64 Follow Path Constraint (Editor & CPP Runtime) (#5510)
Co-authored-by: Luigi Rosso <luigi-rosso@users.noreply.github.com>
Adds origin to text object that works just like the origin of a parametric path. It can be moved in freeze mode too. Adds support in the editor, Flutter runtime, and C++ runtime.
Diffs=
9b8dacbac Adding origin to text. (#5533)
797fb4cbd Add CMake support for building Android and Catch2 Tests (#5468)
Co-authored-by: Luigi Rosso <luigi-rosso@users.noreply.github.com>
allowing the cdn to be set per asset, defaults to our public production cdn.
its a "little" wasteful, but should only find usage when we are exporting .riv's from uat (which will be a little bit bigger as a result of this)
We could put the cdn base url onto the rivefile as a whole, i don't think it buys us much & this is simpler.
also considered putting the default string into the runtime (where it was priori to this) but i think its better of in the defs (as the defs would default to an empty string otherwise, which makes the code ever so slightly messier to read). I think this comes out just a crappy if we ever change the default cdn url.
Diffs=
5c76c52e1 Add cdn overwrite (#5522)
Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
(basing this pr onto our dart runtime change for now, to limit scope)
made some small tweaks to function names, mostly to get fonts and images to "feel" more similar.
broke out "decode' into parsing the asset first.
makes it possible to cache images/fonts with our dart runtime, example included
Diffs=
40302069e Caching example (#5517)
Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
There are a number of questions I'd like to resolve before considering to merge this. also a few thigns to clean up no doubt
# Questions before merging
To customize loading out of band assets, we expect our users to implement
```
abstract class FileAssetLoader {
Future<bool> load(FileAsset asset);
bool isCompatible(FileAsset asset) => true;
}
```
1. is this a good interface (i've changed `loadContents`, to `load`)? (if we like this we should change this in cpp too)
2. `FileAssetLoader` is a mouth-full, would `AssetLoader` be better?
3. We are passing `FileAssets` (our core objects) to users with some slight api extensions, is that good? should we just wrap this in an Asset class (I had this before, its not a lot of work to get it back)
things sorted
- [x] cdn "loading" vs url loading
- just sticking with cdn, users can customize for url
- [x] asset class for consumers of our runtime.
- i've avoided this one for now, just extending our FileAsset
- [x] Importer/Resolver/Loader. I flipped some names around, mostly because I want our end users to provide an `AssetLoader`, not a resolver.
things to sort out down the line, i'm declaring them out of scope for this pr, fft disagree:
- Fallback font, I see we have a fallback font file hardcoded in the runtime. should investigate if we can include an asset for people like this, or if we need to have users set this if they want to use fallback fonts.
- Image Placement, we should strip width/height from runtimes on ImageAssets
- What do we want to do about asset loading / decoding errors
- TextStyle has both assetId & fontAssetId it gets assetId from the file asset referencer, its nbd,
Diffs=
06e959ad2 Font dart runtime (#5411)
Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
…strings
an approach we could do to sort this out
Diffs=
9007b7f92 add skip to core string type, to avoid trying to parse bytearrays as … (#5503)
Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
just trying to flush through some of the bits coming out of running generate core runtime & generate core runtime without making a mess in other pr's .
this is split into four commits which might be helpful when looking at the changes here.
Diffs=
ad72cfce5 Run generate (#5490)
7ee5f7d5a Increases the margin for the approx call to some of the wangs formula… (#5506)
2f224da7f Runtime ellipsis (#5482)
Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
Following our runtimes upgrade docs here: https://www.notion.so/rive-app/Updating-Runtimes-e03da3c30a0448e59e72e82e3e8f9f6f
Unsure if this needs to be committed and pushed down first before doing the flutter publish, or after. @luigi-rosso ?
Diffs=
ca5884788 Bump Flutter runtime version and changelog, small analyze fix (#5495)
500d878a2 fix viewer build (#5493)
Co-authored-by: Zachary Plata <plata.zach@gmail.com>
Adds runtime and editor support for setting feature flags on a Font.
The biggest change to the font engine is that the feature options are now stored on the Font object itself instead of hard-coded during shaping. This is nice as it requires no extra data to be piped through for individual run styling. It also means that we generalized the concept of creating a variable font as configuring a version of the font (see withOptions replacing makeVariation) so that variable axis and feature settings are treated as options to a Font configuration.
This also allows us to track existing variations and options on the configured Font such that any further call to "withOptions" on that already configured Font will propagate previous changes if not overridden. This fortuitously also fixes an issue the modifiers were exhibiting where a variation set on the TextStyle that wasn't part of the modifier set would be lost.
Diffs=
31d9a5424 Feature options on Fonts (#5479)
8b7587241 Runtime/interpolate states cpp (#5437)
Co-authored-by: Luigi Rosso <luigi-rosso@users.noreply.github.com>
Just ran `generate_core_runtime.sh` which added quite a lot of stuff. The change is quite minimal, I'll highlight it with a few comments in the PR.
I'll also adding a test for these new cubic exports just in case!
Fixes the Flutter bit for #5404
Diffs=
59858e333 Add transition interpolation to the runtime (#5429)
Co-authored-by: Umberto Sonnino <umberto@rive.app>
this breaks tests in rive-flutter, and presumably a leftover from testing a rive_common bump locally
37eb623b96
Diffs=
ad0d13cd6 revert overriding rive_common in flutter example (#5334)
Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
adding pr from the community https://github.com/rive-app/rive-flutter/pull/314, including an update to how we make sure credits for contributions are kept when our mono scripts merge changes upstream.
Some companies don't let the rive file URLs without authentication, that's why they need to send headers in the network request.
Example of how to use:
```
RiveAnimation.network(
'https://cdn.rive.app/animations/vehicles.riv',
headers: {'Authorization': '{token}'},
)
```
The same idea is in the [flutter_svg package](https://pub.dev/documentation/flutter_svg/latest/svg/SvgPicture/SvgPicture.network.html)
Diffs=
c163c1a7f Add setting custom headers (#5327)
Co-authored-by: Ahmed Wahba <a.tarek360@gmail.com>
Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
Need to make sure setUrlStrategy is only called once. Due to a bug in Flutter it seems like that static final instance is being called like a getter in Flutter Web (bizarre) but we can mitigate it by using the correct Platform (not the one from rive_common).
Also re-published the wasm for the latest rive_common.
Diffs=
cae6fa5cc Fix web editor (#5299)
Adds support for text modifiers, which are a set a of operations that can run on a per character basis to transform, reshape, and fade resulting glyphs.
Adds:
- Modifier groups which encompass a set of modifications done to a range of the text.
- Range selectors which help define the range the modifier applies to (multiple range selectors can be included to build up the final selection of a modifier group).
- Variation modifiers which allow animating variable fonts per character.
- Origin, Translation, Rotation, and Scale modification.
- Opacity modifiers.
Diffs=
9695de6e3 Text modifiers! (#5288)
a9f8a1c5d Macos take2 (#5258)
fix up an edge case where we require computeDryLayout over performResize
https://docs.flutter.dev/release/breaking-changes/renderbox-dry-layout
the default implementation of performResize uses dryLayout so we can get rid of our override there. I was not able to make a unit test that fails without computeDryLayout, but an app with the below will throw this error
```
══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY
╞═════════════════════════════════════════════════════════
The following assertion was thrown during performLayout():
The RiveRenderObject class does not implement "computeDryLayout".
If you are not writing your own RenderBox subclass, then this is not
your fault. Contact support: https://github.com/flutter/flutter/issues/new?template=2_bug.md
```
```
import 'package:flutter/material.dart';
import 'package:rive/rive.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: LayoutBuilder(builder: (context, constraints) {
return SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(
minHeight: constraints.maxHeight,
),
child: const IntrinsicHeight(
child: Column(
children: <Widget>[
Wrap(
children: [
SizedBox(
height: 100,
child: IntrinsicHeight(
child: RiveAnimation.network(
'https://cdn.rive.app/animations/vehicles.riv',
),
),
),
],
),
],
),
),
),
);
}),
);
}
}
```
Diffs=
4f7d11d85 replace performResize with computeDryLayout (#5278)
Fixes issue with dependencies discussed here:
https://github.com/rive-app/rive/pull/5275
Joysticks now build their own DAG and export in the correct order for runtime.
Diffs=
f2ecb824b Joystick ordering (#5277)
- Adds invert x/y to joystick (Thanks @alxgibsn)
- Adds the invert to Flutter and C++ runtimes.
- Updates Cpp core generator to latest Flutter+NNBD.
- Fixes warnings and errors from latest Flutter (Dart SDK really).
Diffs=
a4fb3dc7d Joystick updates (#5261)
8f8e06b9e Attempt fixing the builds with new Docker images (#5253)
7768798a7 Update to Flutter 3.10.0 (#5247)
pr containing the changes here https://github.com/rive-app/rive/pull/3581
I've made a new branch/pr, just so its easier for you to check that i've not rebased something important tout...
I've also tried to remove most uses of [], bounds_resize does math using it.. it probably can get reworked, we just need to update a few things, like what edges are represented like etc...
Diffs=
d0bca2e72 Aabb3 (#5226)
Diffs=
8115f9a07 Minor changes for publishing rive_flutter to pub.dev (#5117)
abc600932 Propagate collapse to path composer. (#5116)
9266e0d30 Fix for runtime crash with skins nested in solo nodes. (#5109)
Fixes some visibility conditions JC caught while attempting to nest multiple solos into other solos a few times. Added tests for these conditions to both the editor and the C++ runtime.
Diffs=
2bc4acfba Fixing solo nesting. (#5066)
havent really done much to test things work, kinda hoping tests will fail/ windows will stop being able to be built. everything else is an example
Diffs=
41b699beb remove a bunch of generated files (#5002)
c0c8a45ae Reduce github log pollution (#5011)
ccab8df36 Pre-count array sizes in ContourMeasureIter::tryNext (#5010)
f4046e60b Rename reset to rewind. (#5004)
c6caafc24 Import Wang's formula for contour measuring (#5005)
72c5d2084 Port PLS to wasm (#5003)
just prepping for a rive-flutter runtime release
Diffs=
ea255ef1b prepping flutter runtime release (#4994)
6e95e7e1f fix up the viewer to progress time even when we miss a frame or two (#4912)
b90ac530a Decompose accounts for 0 scale, adds test. (#4975)
makes blend states keepGoing!
fixes a regression introduced when looking at keep going of states when deciding if to advance them. for blend states specifically mixing is done as well as animating animation instances, and if the mix value changes we need to apply this change.
@luigi-rosso struggled to build state machines into an automated test on the cpp side before. going to add one loading a `.riv` for this I think, at least to cover some basics here.
btw, I assume we also want this behaviour for direct blend states
https://2dimensions.slack.com/archives/CHMAP278R/p1677820699177779
Diffs=
2504d2ab2 force blend states to keepGoing (#4922)
look commit by commit potentially, last couple of commits are running core generator
& its quite a small change code wise, so it'd be good to get feedback on the actual change sooner rather than later
there are at least a couple of changes in there that should make you question if this is a good idea so i expect some feedback.
add to cpp: (i just got it working in the viewer, probably broke some things)
- [x] negative time fix
- [x] combine state speed to determine time for state
- [x] no longer carry spilled time into new advances
add test
- [x] negative time fix to state machines
- [x] negative combined time state fix to state machines
- [ ] no longer carry spilled time into new advances @luigi-rosso i tried adding tests for this, but i was not really able to construct a state machine instance (with an animations, an animation state and the right transition) in tests I had to add a bunch of public methods all over the place, can you show me the way? probably not a blocker for merging this)
apply changes to rive_flutter
- [x] run script (ran both core generator and core generator runtime, the runtime one wanted to remove a load of comments so i didnt let those bits be committed. but still.. annoying)
Diffs=
bc6c6f467 Fix negative speeds in state machines (#4887)
040a27c1c Generate Android builds directly from premake (#4871)
12285f625 Put SIMD perf warnings behind a flag (#4861)
157a399d2 update id in code (#4855)
- ran ```dev/generate_core_runtime.sh build```
- cleaned up a lot of accumulated changes from the last few months that needed to be stripped/modified for the rutnime
- removed no longer supported lining options from analysis files
- fixed up defs for some editor only features so they don't transpile
- added some more details to changelog
- bumped pubspec version
Diffs=
aa8c750bd Update flutter runtime (#4835)
Also update the auto formatter to run on *.m and *.mm files, and effectively ban breaking on return types entirely, as I think this is ugly.
Diffs=
c7d125c7d Update ObjC formatting to look more similar to the C++
- Adds checks to see if a drawable has a 0% opacity before performing draw commands
- Add skinning example
Diffs=
a61f4c6b5 apply changes to rive_core
8152b8a02 docs: update CHANGELOG
b8f61022c perf: check if opacity is 0 before drawing
4c4826e67 chore: add typedef argument names
ff94982f9 docs: add skinning sample
f1ddd88d4 Fix artboard pieces slowly popping in. (#4818)
3039909c2 Update to using deployment workflow similar to ios
53a8f9517 Fix direction when looping. (#4786)
4c5a576ad Fix ping pong hang (#4776)
ae1e02afc Fix tess test linking (#4773)
4ecbf9321 Fix remap based on issue JC caught. (#4771)
89e38b700 allow negative speed (#4770)
4d115b4c6 Adding GLSL100 for tess renderer. (#4767)
31a3972aa ios shaders for tess (#4765)
686e5125b Add dependency to correct grand parent for linear gradients. (#4753)
e737ee427 Revert "Update to using deployment workflow similar to ios"
de0e57d55 Update to using deployment workflow similar to ios
051769242 Runtime Text! (#4741)
331ad0d55 Build cleanups
2538229d6 Use Rive's libpng premake dependency in golden testing
42a0377bc Fix condition with trim paths where all contours are 0 length. (#4722)
ea1c83d02 Use os.copyfile() instead of the '{COPY}' command
5c03e1640 Remove forcing arch to arm64 for libpng (#4715)
404a04d35 Cleaning up libpng premake to be isolated/stand-alone. (#4713)