| Animation API |
| ============= |
| |
| ```dart |
| typedef void TimerCallback(); |
| |
| external void _addTask({ TimerCallback callback, Duration budget, int bits, int priority, Queue queue }); |
| // see (runloop.md)[runloop.md] for the semantics of tasks and queues |
| // _addTask() does the zone magic on callback |
| |
| external final Queue get _idleQueue; |
| external final Queue get _paintQueue; |
| external final Queue get _nextPaintQueue; |
| |
| class AnimationTimer extends Timer { |
| factory whenIdle(TimerCallback callback, { Duration budget: 1.0 }) { |
| if (budget.inMilliseconds > 1.0) |
| budget = new Duration(milliseconds: 1.0); |
| _addTask(callback: callback, budget: budget, bits: IdleTask, priority: IdlePriority, queue: _idleQueue); |
| } |
| |
| factory beforePaint(TimerCallback callback, { int priority: 0 }) { |
| _addTask(callback: callback, budget: new Duration(milliseconds: 1.0), bits: PaintTask, priority: priority, queue: _paintQueue); |
| } |
| |
| factory nextFrame(TimerCallback callback, { int priority: 0 }) { |
| _addTask(callback: callback, budget: new Duration(milliseconds: 1.0), bits: PaintTask, priority: priority, queue: _nextPaintQueue); |
| } |
| } |
| ``` |
| |
| |
| Easing Functions |
| ---------------- |
| |
| ```dart |
| // part of the framework, not dart:sky |
| |
| typedef void AnimationCallback(); |
| |
| abstract class EasingFunction { |
| EasingFunction({double duration: 0.0, AnimationCallback completionCallback: null }); |
| double getFactor(Float time); |
| // calls completionCallback if time >= duration |
| // then returns a number ostensibly in the range 0.0 to 1.0 |
| // (but it could in practice go outside this range, e.g. for |
| // animation styles that overreach then come back) |
| } |
| ``` |
| |
| If you want to have two animations simultaneously, e.g. two |
| transforms, then you can add to the RenderNode's overrideStyles a |
| StyleValue that combines other StyleValues, e.g. a |
| "TransformStyleValueCombinerStyleValue", and then add to it the |
| regular animated StyleValues, e.g. multiple |
| "AnimatedTransformStyleValue" objects. A framework API could make |
| setting all that up easy, given the right underlying StyleValue |
| classes. |