OLD | NEW |
| (Empty) |
1 <!-- | |
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 | |
4 // found in the LICENSE file. | |
5 --> | |
6 <import src="sky-element.sky" /> | |
7 | |
8 <sky-element> | |
9 <template> | |
10 <style> | |
11 :host { | |
12 position: absolute; | |
13 pointer-events: none; | |
14 overflow: hidden; | |
15 top: 0; | |
16 left: 0; | |
17 bottom: 0; | |
18 right: 0; | |
19 } | |
20 | |
21 #splash { | |
22 position: absolute; | |
23 background-color: rgba(0, 0, 0, 0.4); | |
24 border-radius: 0; | |
25 top: 0; | |
26 left: 0; | |
27 height: 0; | |
28 width: 0; | |
29 } | |
30 </style> | |
31 <div id="splash" /> | |
32 </template> | |
33 <script> | |
34 import "animation/controller.dart"; | |
35 import "animation/curves.dart"; | |
36 import "animation/timer.dart"; | |
37 import "dart:math" as math; | |
38 import "dart:sky"; | |
39 import "dart:async"; | |
40 | |
41 const double _kSplashSize = 400.0; | |
42 const double _kSplashDuration = 500.0; | |
43 | |
44 @Tagname('sky-ink-splash') | |
45 class SkyInkSplash extends SkyElement implements AnimationDelegate { | |
46 AnimationController _animation; | |
47 Element _splash; | |
48 double _offsetX; | |
49 double _offsetY; | |
50 Completer<SkyInkSplash> _completer = new Completer(); | |
51 | |
52 SkyInkSplash() { | |
53 _animation = new AnimationController(this); | |
54 } | |
55 | |
56 void shadowRootReady() { | |
57 _splash = shadowRoot.getElementById('splash'); | |
58 } | |
59 | |
60 Future start(double x, double y, ClientRect rect) { | |
61 _offsetX = x - rect.left; | |
62 _offsetY = y - rect.top; | |
63 _animation.start( | |
64 begin: 0.0, | |
65 end: _kSplashSize, | |
66 duration: _kSplashDuration, | |
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(); | |
80 } | |
81 | |
82 void updateAnimation(double p) { | |
83 if (p == _kSplashSize) { | |
84 _done(); | |
85 return; | |
86 } | |
87 _splash.style['top'] = '${_offsetY - p/2}px'; | |
88 _splash.style['left'] = '${_offsetX - p/2}px'; | |
89 _splash.style['width'] = '${p}px'; | |
90 _splash.style['height'] = '${p}px'; | |
91 _splash.style['border-radius'] = '${p}px'; | |
92 _splash.style['opacity'] = '${1.0 - (p / _kSplashSize)}'; | |
93 } | |
94 } | |
95 | |
96 _init(script) => register(script, SkyInkSplash); | |
97 </script> | |
98 </sky-element> | |
OLD | NEW |