Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(302)

Side by Side Diff: dart/pkg/polymer/lib/src/job.dart

Issue 336013003: Version 1.5.0-dev.4.14 (Closed) Base URL: http://dart.googlecode.com/svn/trunk/
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « dart/pkg/polymer/lib/src/instance.dart ('k') | dart/pkg/polymer/lib/src/js/polymer/build.log » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of polymer; 5 part of polymer;
6 6
7 /// Invoke [callback] in [wait], unless the job is re-registered, 7 /// Like [Timer] but can be restarted, and if no duration is supplied uses
8 /// which resets the timer. For example: 8 /// [window.requestAnimationFrame] instead of a 0-duration timer.
9 /// 9 // TODO(jmesserly): need to find a better name here. Also this feels more like a
10 /// _myJob = runJob(_myJob, callback, const Duration(milliseconds: 100)); 10 // system level API, but doesn't map exactly to any of our other primitives.
11 /// 11 class PolymerJob {
12 /// Returns a job handle which can be used to re-register a job.
13 // Dart note: renamed to runJob to avoid conflict with instance member "job".
14 _Job _runJob(_Job job, void callback(), Duration wait) {
15 if (job != null) {
16 job.stop();
17 } else {
18 job = new _Job();
19 }
20 job.go(callback, wait);
21 return job;
22 }
23
24 // Public in Polymer.js but private as not sure it's the correct API for Dart.
25 // Switch to Timer when 14414 is addressed.
26 class _Job {
27 Function _callback; 12 Function _callback;
28 Timer _timer; 13 Timer _timer;
14 int _id; // for requestAnimationFrame
29 15
30 void go(void callback(), Duration wait) { 16 PolymerJob._();
31 this._callback = callback; 17
32 _timer = new Timer(wait, complete); 18 bool get isScheduled => _timer != null || _id != null;
19
20 /// Starts the job. If the job is already running, it will [stop] first.
21 void start(void callback(), [Duration wait]) {
22 stop();
23 _callback = callback;
24 if (wait == null) {
25 _id = window.requestAnimationFrame((_) => complete());
26 } else {
27 _timer = new Timer(wait, complete);
28 }
33 } 29 }
34 30
31 /// Stops the job. It can be restarted by calling [start] with a new callback.
35 void stop() { 32 void stop() {
33 if (_id != null) {
34 window.cancelAnimationFrame(_id);
35 _id = null;
36 }
36 if (_timer != null) { 37 if (_timer != null) {
37 _timer.cancel(); 38 _timer.cancel();
38 _timer = null; 39 _timer = null;
39 } 40 }
40 } 41 }
41 42
43 /// Synchronously completes the job.
42 void complete() { 44 void complete() {
43 if (_timer != null) { 45 if (isScheduled) {
44 stop(); 46 stop();
45 _callback(); 47 _callback();
46 } 48 }
47 } 49 }
48 } 50 }
OLDNEW
« no previous file with comments | « dart/pkg/polymer/lib/src/instance.dart ('k') | dart/pkg/polymer/lib/src/js/polymer/build.log » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698