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

Side by Side Diff: sky/framework/sky-ink-splash.sky

Issue 956753002: Make splash animations abort on scroll. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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
OLDNEW
1 <!-- 1 <!--
2 // Copyright 2015 The Chromium Authors. All rights reserved. 2 // Copyright 2015 The Chromium Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be 3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file. 4 // found in the LICENSE file.
5 --> 5 -->
6 <import src="sky-element.sky" /> 6 <import src="sky-element.sky" />
7 7
8 <sky-element> 8 <sky-element>
9 <template> 9 <template>
10 <style> 10 <style>
(...skipping 18 matching lines...) Expand all
29 } 29 }
30 </style> 30 </style>
31 <div id="splash" /> 31 <div id="splash" />
32 </template> 32 </template>
33 <script> 33 <script>
34 import "animation/controller.dart"; 34 import "animation/controller.dart";
35 import "animation/curves.dart"; 35 import "animation/curves.dart";
36 import "animation/timer.dart"; 36 import "animation/timer.dart";
37 import "dart:math" as math; 37 import "dart:math" as math;
38 import "dart:sky"; 38 import "dart:sky";
39 import "dart:async";
39 40
40 const double _kSplashSize = 400.0; 41 const double _kSplashSize = 400.0;
41 const double _kSplashDuration = 500.0; 42 const double _kSplashDuration = 500.0;
42 43
43 @Tagname('sky-ink-splash') 44 @Tagname('sky-ink-splash')
44 class SkyInkSplash extends SkyElement implements AnimationDelegate { 45 class SkyInkSplash extends SkyElement implements AnimationDelegate {
45 AnimationController _animation; 46 AnimationController _animation;
46 Element _splash; 47 Element _splash;
47 double _offsetX; 48 double _offsetX;
48 double _offsetY; 49 double _offsetY;
50 Completer<SkyInkSplash> _completer = new Completer();
49 51
50 SkyInkSplash() { 52 SkyInkSplash() {
51 _animation = new AnimationController(this); 53 _animation = new AnimationController(this);
52 } 54 }
53 55
54 void shadowRootReady() { 56 void shadowRootReady() {
55 _splash = shadowRoot.getElementById('splash'); 57 _splash = shadowRoot.getElementById('splash');
56 } 58 }
57 59
58 void start(double x, double y, ClientRect rect) { 60 Future start(double x, double y, ClientRect rect) {
59 _offsetX = x - rect.left; 61 _offsetX = x - rect.left;
60 _offsetY = y - rect.top; 62 _offsetY = y - rect.top;
61 _animation.start( 63 _animation.start(
62 begin: 0.0, 64 begin: 0.0,
63 end: _kSplashSize, 65 end: _kSplashSize,
64 duration: _kSplashDuration, 66 duration: _kSplashDuration,
65 curve: easeOut); 67 curve: easeOut);
68 return _completer.future;
69 }
70
71 void _done() {
72 remove();
73 _completer.complete(this);
74 }
75
76 void cancel() {
77 // TODO(eseidel): Should fade away instead of stopping immediately.
78 _animation.stop();
79 _done();
66 } 80 }
67 81
68 void updateAnimation(double p) { 82 void updateAnimation(double p) {
69 if (p == _kSplashSize) { 83 if (p == _kSplashSize) {
70 remove(); 84 _done();
71 return; 85 return;
72 } 86 }
73 _splash.style['top'] = '${_offsetY - p/2}px'; 87 _splash.style['top'] = '${_offsetY - p/2}px';
74 _splash.style['left'] = '${_offsetX - p/2}px'; 88 _splash.style['left'] = '${_offsetX - p/2}px';
75 _splash.style['width'] = '${p}px'; 89 _splash.style['width'] = '${p}px';
76 _splash.style['height'] = '${p}px'; 90 _splash.style['height'] = '${p}px';
77 _splash.style['border-radius'] = '${p}px'; 91 _splash.style['border-radius'] = '${p}px';
78 _splash.style['opacity'] = '${1.0 - (p / _kSplashSize)}'; 92 _splash.style['opacity'] = '${1.0 - (p / _kSplashSize)}';
79 } 93 }
80 } 94 }
81 95
82 _init(script) => register(script, SkyInkSplash); 96 _init(script) => register(script, SkyInkSplash);
83 </script> 97 </script>
84 </sky-element> 98 </sky-element>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698