| Index: tools/dom/templates/html/impl/impl_Window.darttemplate
|
| diff --git a/tools/dom/templates/html/impl/impl_Window.darttemplate b/tools/dom/templates/html/impl/impl_Window.darttemplate
|
| index fe4db3d7f55beab64cb9092d47f6abb247b0d6c4..8abac3775c4146f65b923db522ae32ae4fa881ac 100644
|
| --- a/tools/dom/templates/html/impl/impl_Window.darttemplate
|
| +++ b/tools/dom/templates/html/impl/impl_Window.darttemplate
|
| @@ -4,99 +4,6 @@
|
|
|
| part of $LIBRARYNAME;
|
|
|
| -typedef void RemoveFrameRequestMapping(int id);
|
| -
|
| -/**
|
| - * The task object representing animation-frame requests.
|
| - *
|
| - * For historical reasons, [Window.requestAnimationFrame] returns an integer
|
| - * to users. However, zone tasks must be unique objects, and an integer can
|
| - * therefore not be used as task object. The [Window] class thus keeps a mapping
|
| - * from the integer ID to the corresponding task object. All zone related
|
| - * operations work on this task object, whereas users of
|
| - * [Window.requestAnimationFrame] only see the integer ID.
|
| - *
|
| - * Since this mapping takes up space, it must be removed when the
|
| - * animation-frame task has triggered. The default implementation does this
|
| - * automatically, but intercepting implementations of `requestAnimationFrame`
|
| - * must make sure to call the [AnimationFrameTask.removeMapping]
|
| - * function that is provided in the task specification.
|
| - *
|
| - * *Experimental*. This class may disappear without notice.
|
| - */
|
| -abstract class AnimationFrameTask {
|
| - /** The ID that is returned to users. */
|
| - int get id;
|
| -
|
| - /** The zone in which the task will run. */
|
| - Zone get zone;
|
| -
|
| - /**
|
| - * Cancels the animation-frame request.
|
| - *
|
| - * A call to [Window.cancelAnimationFrame] with an `id` argument equal to [id]
|
| - * forwards the request to this function.
|
| - *
|
| - * Zones that intercept animation-frame requests implement this method so
|
| - * that they can react to cancelation requests.
|
| - */
|
| - void cancel(Window window);
|
| -
|
| - /**
|
| - * Maps animation-frame request IDs to their task objects.
|
| - */
|
| - static final Map<int, _AnimationFrameTask> _tasks = {};
|
| -
|
| - /**
|
| - * Removes the mapping from [id] to [AnimationFrameTask].
|
| - *
|
| - * This function must be invoked by user-implemented animation-frame
|
| - * tasks, before running [callback].
|
| - *
|
| - * See [AnimationFrameTask].
|
| - */
|
| - static void removeMapping(int id) {
|
| - _tasks.remove(id);
|
| - }
|
| -}
|
| -
|
| -class _AnimationFrameTask implements AnimationFrameTask {
|
| - final int id;
|
| - final Zone zone;
|
| - final FrameRequestCallback _callback;
|
| -
|
| - _AnimationFrameTask(this.id, this.zone, this._callback);
|
| -
|
| - void cancel(Window window) {
|
| - window._cancelAnimationFrame(this.id);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * The task specification for an animation-frame request.
|
| - *
|
| - * *Experimental*. This class may disappear without notice.
|
| - */
|
| -class AnimationFrameRequestSpecification implements TaskSpecification {
|
| - /**
|
| - * The window on which [Window.requestAnimationFrame] was invoked.
|
| - */
|
| - final Window window;
|
| -
|
| - /**
|
| - * The callback that is executed when the animation-frame is ready.
|
| - *
|
| - * Note that the callback hasn't been registered in any zone when the `create`
|
| - * function (passed to [Zone.createTask]) is invoked.
|
| - */
|
| - final FrameRequestCallback callback;
|
| -
|
| - AnimationFrameRequestSpecification(this.window, this.callback);
|
| -
|
| - String get name => "dart.html.request-animation-frame";
|
| - bool get isOneShot => true;
|
| -}
|
| -
|
| @DocsEditable()
|
| $if DART2JS
|
| $(ANNOTATIONS)@Native("Window,DOMWindow")
|
| @@ -122,7 +29,9 @@ $endif
|
| */
|
| Future<num> get animationFrame {
|
| var completer = new Completer<num>.sync();
|
| - requestAnimationFrame(completer.complete);
|
| + requestAnimationFrame((time) {
|
| + completer.complete(time);
|
| + });
|
| return completer.future;
|
| }
|
|
|
| @@ -206,30 +115,7 @@ $if DART2JS
|
| @DomName('Window.requestAnimationFrame')
|
| int requestAnimationFrame(FrameRequestCallback callback) {
|
| _ensureRequestAnimationFrame();
|
| - if (identical(Zone.current, Zone.ROOT)) {
|
| - return _requestAnimationFrame(callback);
|
| - }
|
| - var spec = new AnimationFrameRequestSpecification(this, callback);
|
| - var task = Zone.current.createTask/*<AnimationFrameTask>*/(
|
| - _createAnimationFrameTask, spec);
|
| - AnimationFrameTask._tasks[task.id] = task;
|
| - return task.id;
|
| - }
|
| -
|
| - static _AnimationFrameTask _createAnimationFrameTask(
|
| - AnimationFrameRequestSpecification spec, Zone zone) {
|
| - var task;
|
| - var id = spec.window._requestAnimationFrame((num time) {
|
| - AnimationFrameTask.removeMapping(task.id);
|
| - zone.runTask(_runAnimationFrame, task, time);
|
| - });
|
| - var callback = zone.registerUnaryCallback(spec.callback);
|
| - task = new _AnimationFrameTask(id, zone, callback);
|
| - return task;
|
| - }
|
| -
|
| - static void _runAnimationFrame(_AnimationFrameTask task, num time) {
|
| - task._callback(time);
|
| + return _requestAnimationFrame(_wrapZone/*<num, dynamic>*/(callback));
|
| }
|
|
|
| /**
|
| @@ -242,13 +128,7 @@ $if DART2JS
|
| */
|
| void cancelAnimationFrame(int id) {
|
| _ensureRequestAnimationFrame();
|
| - var task = AnimationFrameTask._tasks.remove(id);
|
| - if (task == null) {
|
| - // Assume that the animation frame request wasn't intercepted by a zone.
|
| - _cancelAnimationFrame(id);
|
| - return;
|
| - }
|
| - task.cancel(this);
|
| + _cancelAnimationFrame(id);
|
| }
|
|
|
| @JSName('requestAnimationFrame')
|
|
|