OLD | NEW |
1 part of widgets; | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
2 | 4 |
3 abstract class MaterialComponent extends Component { | 5 import '../fn.dart'; |
| 6 import 'dart:sky' as sky; |
| 7 import 'dart:collection'; |
| 8 import 'ink_splash.dart'; |
4 | 9 |
| 10 abstract class Material extends Component { |
5 static const _splashesKey = const Object(); | 11 static const _splashesKey = const Object(); |
6 | 12 |
7 static Style _style = new Style(''' | 13 static final Style _style = new Style(''' |
8 transform: translateX(0); | 14 transform: translateX(0); |
9 position: absolute; | 15 position: absolute; |
10 top: 0; | 16 top: 0; |
11 left: 0; | 17 left: 0; |
12 right: 0; | 18 right: 0; |
13 bottom: 0''' | 19 bottom: 0''' |
14 ); | 20 ); |
15 | 21 |
16 LinkedHashSet<SplashAnimation> _splashes; | 22 LinkedHashSet<SplashAnimation> _splashes; |
17 | 23 |
18 MaterialComponent({ Object key }) : super(key: key); | 24 Material({ Object key }) : super(key: key) { |
| 25 events.listen('gesturescrollstart', _cancelSplashes); |
| 26 events.listen('wheel', _cancelSplashes); |
| 27 events.listen('pointerdown', _startSplash); |
| 28 } |
19 | 29 |
20 Node build() { | 30 Node build() { |
21 List<Node> children = []; | 31 List<Node> children = []; |
22 | 32 |
23 if (_splashes != null) { | 33 if (_splashes != null) { |
24 children.addAll(_splashes.map((s) => new InkSplash(s.onStyleChanged))); | 34 children.addAll(_splashes.map((s) => new InkSplash(s.onStyleChanged))); |
25 } | 35 } |
26 | 36 |
27 return new Container( | 37 return new Container( |
28 style: _style, | 38 style: _style, |
29 children: children, | 39 children: children, |
30 key: _splashesKey | 40 key: _splashesKey |
31 )..events.listen('gesturescrollstart', _cancelSplashes) | 41 ); |
32 ..events.listen('wheel', _cancelSplashes) | |
33 ..events.listen('pointerdown', _startSplash); | |
34 } | 42 } |
35 | 43 |
36 sky.ClientRect _getBoundingRect() => (getRoot() as sky.Element).getBoundingCli
entRect(); | 44 sky.ClientRect _getBoundingRect() => (getRoot() as sky.Element).getBoundingCli
entRect(); |
37 | 45 |
38 void _startSplash(sky.PointerEvent event) { | 46 void _startSplash(sky.PointerEvent event) { |
39 setState(() { | 47 setState(() { |
40 if (_splashes == null) { | 48 if (_splashes == null) { |
41 _splashes = new LinkedHashSet<SplashAnimation>(); | 49 _splashes = new LinkedHashSet<SplashAnimation>(); |
42 } | 50 } |
43 | 51 |
(...skipping 27 matching lines...) Expand all Loading... |
71 } | 79 } |
72 | 80 |
73 setState(() { | 81 setState(() { |
74 _splashes.remove(splash); | 82 _splashes.remove(splash); |
75 if (_splashes.length == 0) { | 83 if (_splashes.length == 0) { |
76 _splashes = null; | 84 _splashes = null; |
77 } | 85 } |
78 }); | 86 }); |
79 } | 87 } |
80 } | 88 } |
OLD | NEW |