OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 import 'dart:math'; | 5 import 'dart:math'; |
6 import 'dart:sky'; | 6 import 'dart:sky'; |
7 import 'package:sky/framework/app.dart'; | 7 import 'package:sky/framework/app.dart'; |
8 import 'package:sky/framework/rendering/box.dart'; | 8 import 'package:sky/framework/rendering/box.dart'; |
Hixie
2015/06/11 22:14:09
convention is now to sort this alphabetically, wit
| |
9 import 'package:sky/framework/rendering/object.dart'; | 9 import 'package:sky/framework/rendering/object.dart'; |
10 import 'package:sky/framework/rendering/stack.dart'; | |
11 import 'package:sky/framework/rendering/paragraph.dart'; | |
12 import 'package:sky/framework/theme2/colors.dart'; | |
10 | 13 |
11 // Material design colors. :p | 14 // Material design colors. :p |
12 List<int> colors = [ | 15 List<Color> colors = [ |
13 0xFF009688, | 16 Teal[500], |
14 0xFFFFC107, | 17 Amber[500], |
15 0xFF9C27B0, | 18 Purple[500], |
16 0xFF03A9F4, | 19 LightBlue[500], |
17 0xFF673AB7, | 20 DeepPurple[500], |
18 0xFFCDDC39, | 21 Lime[500], |
19 ]; | 22 ]; |
20 | 23 |
21 class Dot { | 24 class Dot { |
22 final Paint _paint; | 25 final Paint _paint; |
23 double x = 0.0; | 26 double x = 0.0; |
24 double y = 0.0; | 27 double y = 0.0; |
25 double radius = 0.0; | 28 double radius = 0.0; |
26 | 29 |
27 Dot({int color}) : _paint = new Paint()..color = color; | 30 Dot({Color color}) : _paint = new Paint()..color = color; |
Hixie
2015/06/11 22:14:09
spaces around the arguments list.
| |
28 | 31 |
29 void update(PointerEvent event) { | 32 void update(PointerEvent event) { |
30 x = event.x; | 33 x = event.x; |
31 y = event.y; | 34 y = event.y; |
32 radius = 5 + (95 * event.pressure); | 35 radius = 5 + (95 * event.pressure); |
33 } | 36 } |
34 | 37 |
35 void paint(RenderObjectDisplayList canvas) { | 38 void paint(RenderObjectDisplayList canvas) { |
36 canvas.drawCircle(x, y, radius, _paint); | 39 canvas.drawCircle(x, y, radius, _paint); |
37 } | 40 } |
38 } | 41 } |
39 | 42 |
40 class RenderTouchDemo extends RenderBox { | 43 class RenderTouchDemo extends RenderBox { |
41 Map<int, Dot> dots = new Map(); | 44 Map<int, Dot> dots = new Map(); |
42 | 45 |
43 RenderTouchDemo(); | 46 RenderTouchDemo(); |
44 | 47 |
45 void handleEvent(Event event, BoxHitTestEntry entry) { | 48 void handleEvent(Event event, BoxHitTestEntry entry) { |
46 switch (event.type) { | 49 switch (event.type) { |
47 case 'pointerdown': | 50 case 'pointerdown': |
48 int color = colors[event.pointer.remainder(colors.length)]; | 51 Color color = colors[event.pointer.remainder(colors.length)]; |
49 dots[event.pointer] = new Dot(color: color)..update(event); | 52 dots[event.pointer] = new Dot(color: color)..update(event); |
50 break; | 53 break; |
51 case 'pointerup': | 54 case 'pointerup': |
52 dots.remove(event.pointer); | 55 dots.remove(event.pointer); |
53 break; | 56 break; |
54 case 'pointercancel': | 57 case 'pointercancel': |
55 dots = new Map(); | 58 dots = new Map(); |
56 break; | 59 break; |
57 case 'pointermove': | 60 case 'pointermove': |
58 dots[event.pointer].update(event); | 61 dots[event.pointer].update(event); |
59 break; | 62 break; |
60 } | 63 } |
61 markNeedsPaint(); | 64 markNeedsPaint(); |
62 } | 65 } |
63 | 66 |
64 void performLayout() { | 67 void performLayout() { |
65 size = constraints.constrain(Size.infinite); | 68 size = constraints.constrain(Size.infinite); |
66 } | 69 } |
67 | 70 |
68 void paint(RenderObjectDisplayList canvas) { | 71 void paint(RenderObjectDisplayList canvas) { |
69 dots.forEach((_, Dot dot) { | 72 Paint white = new Paint()..color = const Color(0xFFFFFFFF); |
73 canvas.drawRect(new Rect.fromSize(size), white); | |
74 for (Dot dot in dots.values) | |
70 dot.paint(canvas); | 75 dot.paint(canvas); |
71 }); | |
72 } | 76 } |
73 } | 77 } |
74 | 78 |
75 AppView app; | 79 AppView app; |
76 | 80 |
77 void main() { | 81 void main() { |
78 app = new AppView(new RenderTouchDemo()); | 82 var para = new RenderParagraph(text: "Touch me!"); |
83 var stack = new RenderStack(children: [ | |
84 new RenderTouchDemo(), | |
85 para, | |
86 ]); | |
87 // Make the paragraph not fill the whole screen so it doesn't eat events. | |
88 para.parentData..top = 40.0 | |
89 ..left = 20.0; | |
90 app = new AppView(stack); | |
79 } | 91 } |
OLD | NEW |