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

Side by Side Diff: sky/framework/components/ink_well.dart

Issue 1132063007: Rationalize Dart mojo and sky package structure (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 7 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
« no previous file with comments | « sky/framework/components/ink_splash.dart ('k') | sky/framework/components/input.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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.
4
5 import '../fn.dart';
6 import '../layout.dart';
7 import 'dart:collection';
8 import 'dart:sky' as sky;
9 import 'ink_splash.dart';
10 import 'scrollable.dart';
11
12 class InkWell extends Component implements ScrollClient {
13 static final Style _containmentStyleHack = new Style('''
14 align-items: center;
15 transform: translateX(0);''');
16
17 LinkedHashSet<SplashController> _splashes;
18
19 String inlineStyle;
20 List<UINode> children;
21
22 InkWell({ Object key, this.inlineStyle, this.children })
23 : super(key: key) {
24 onDidUnmount(() {
25 _cancelSplashes(null);
26 });
27 }
28
29 UINode build() {
30 List<UINode> childrenIncludingSplashes = [];
31
32 if (_splashes != null) {
33 childrenIncludingSplashes.addAll(
34 _splashes.map((s) => new InkSplash(s.onStyleChanged)));
35 }
36
37 if (children != null)
38 childrenIncludingSplashes.addAll(children);
39
40 return new EventListenerNode(
41 new FlexContainer(
42 direction: FlexDirection.Row,
43 style: _containmentStyleHack,
44 inlineStyle: inlineStyle,
45 children: childrenIncludingSplashes),
46 onGestureTapDown: _startSplash,
47 onGestureTap: _confirmSplash
48 );
49 }
50
51 void _startSplash(sky.GestureEvent event) {
52 setState(() {
53 if (_splashes == null)
54 _splashes = new LinkedHashSet<SplashController>();
55 var splash;
56 var root = getRoot();
57 splash = new SplashController(root.rect, event.x, event.y,
58 pointer: event.primaryPointer,
59 onDone: () { _splashDone(splash); });
60 _splashes.add(splash);
61 UINode node = parent;
62 while (node != null) {
63 if (node is Scrollable)
64 node.registerScrollClient(this);
65 node = node.parent;
66 }
67 });
68 }
69
70 bool ancestorScrolled(Scrollable ancestor) {
71 _abortSplashes();
72 return false;
73 }
74
75 void handleRemoved() {
76 UINode node = parent;
77 while (node != null) {
78 if (node is Scrollable)
79 node.unregisterScrollClient(this);
80 node = node.parent;
81 }
82 super.handleRemoved();
83 }
84
85 void _confirmSplash(sky.GestureEvent event) {
86 if (_splashes == null)
87 return;
88 _splashes.where((splash) => splash.pointer == event.primaryPointer)
89 .forEach((splash) { splash.confirm(); });
90 }
91
92 void _abortSplashes() {
93 if (_splashes == null)
94 return;
95 setState(() {
96 _splashes.forEach((s) { s.abort(); });
97 });
98 }
99
100 void _cancelSplashes(sky.Event event) {
101 if (_splashes == null)
102 return;
103 setState(() {
104 var splashes = _splashes;
105 _splashes = null;
106 splashes.forEach((s) { s.cancel(); });
107 });
108 }
109
110 void _splashDone(SplashController splash) {
111 if (_splashes == null)
112 return;
113 setState(() {
114 _splashes.remove(splash);
115 if (_splashes.length == 0)
116 _splashes = null;
117 });
118 }
119 }
OLDNEW
« no previous file with comments | « sky/framework/components/ink_splash.dart ('k') | sky/framework/components/input.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698