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:sky' as sky; |
6 import 'dart:sky'; | |
7 | 6 |
8 import 'package:sky/rendering/box.dart'; | 7 import 'package:sky/rendering/box.dart'; |
9 import 'package:sky/rendering/object.dart'; | 8 import 'package:sky/rendering/object.dart'; |
10 import 'package:sky/rendering/paragraph.dart'; | 9 import 'package:sky/rendering/paragraph.dart'; |
11 import 'package:sky/rendering/sky_binding.dart'; | 10 import 'package:sky/rendering/sky_binding.dart'; |
12 import 'package:sky/rendering/stack.dart'; | 11 import 'package:sky/rendering/stack.dart'; |
13 import 'package:sky/theme/colors.dart'; | 12 import 'package:sky/theme/colors.dart'; |
14 | 13 |
15 // Material design colors. :p | 14 // Material design colors. :p |
16 List<Color> colors = [ | 15 List<Color> colors = [ |
17 Teal[500], | 16 Teal[500], |
18 Amber[500], | 17 Amber[500], |
19 Purple[500], | 18 Purple[500], |
20 LightBlue[500], | 19 LightBlue[500], |
21 DeepPurple[500], | 20 DeepPurple[500], |
22 Lime[500], | 21 Lime[500], |
23 ]; | 22 ]; |
24 | 23 |
25 class Dot { | 24 class Dot { |
26 final Paint _paint; | 25 final Paint _paint; |
27 double x = 0.0; | 26 Point position = Point.origin; |
28 double y = 0.0; | |
29 double radius = 0.0; | 27 double radius = 0.0; |
30 | 28 |
31 Dot({ Color color }) : _paint = new Paint()..color = color; | 29 Dot({ Color color }) : _paint = new Paint()..color = color; |
32 | 30 |
33 void update(PointerEvent event) { | 31 void update(sky.PointerEvent event) { |
34 x = event.x; | 32 position = new Point(event.x, event.y); |
35 y = event.y; | |
36 radius = 5 + (95 * event.pressure); | 33 radius = 5 + (95 * event.pressure); |
37 } | 34 } |
38 | 35 |
39 void paint(RenderCanvas canvas) { | 36 void paint(RenderCanvas canvas) { |
40 canvas.drawCircle(x, y, radius, _paint); | 37 canvas.drawCircle(position, radius, _paint); |
41 } | 38 } |
42 } | 39 } |
43 | 40 |
44 class RenderTouchDemo extends RenderBox { | 41 class RenderTouchDemo extends RenderBox { |
45 Map<int, Dot> dots = new Map(); | 42 Map<int, Dot> dots = new Map(); |
46 | 43 |
47 RenderTouchDemo(); | 44 RenderTouchDemo(); |
48 | 45 |
49 void handleEvent(Event event, BoxHitTestEntry entry) { | 46 void handleEvent(sky.Event event, BoxHitTestEntry entry) { |
50 switch (event.type) { | 47 if (event is sky.PointerEvent) { |
51 case 'pointerdown': | 48 switch (event.type) { |
52 Color color = colors[event.pointer.remainder(colors.length)]; | 49 case 'pointerdown': |
53 dots[event.pointer] = new Dot(color: color)..update(event); | 50 Color color = colors[event.pointer.remainder(colors.length)]; |
54 break; | 51 dots[event.pointer] = new Dot(color: color)..update(event); |
55 case 'pointerup': | 52 break; |
56 dots.remove(event.pointer); | 53 case 'pointerup': |
57 break; | 54 dots.remove(event.pointer); |
58 case 'pointercancel': | 55 break; |
59 dots = new Map(); | 56 case 'pointercancel': |
60 break; | 57 dots = new Map(); |
61 case 'pointermove': | 58 break; |
62 dots[event.pointer].update(event); | 59 case 'pointermove': |
63 break; | 60 dots[event.pointer].update(event); |
| 61 break; |
| 62 } |
64 } | 63 } |
65 markNeedsPaint(); | 64 markNeedsPaint(); |
66 } | 65 } |
67 | 66 |
68 void performLayout() { | 67 void performLayout() { |
69 size = constraints.constrain(Size.infinite); | 68 size = constraints.biggest; |
70 } | 69 } |
71 | 70 |
72 void paint(RenderCanvas canvas) { | 71 void paint(RenderCanvas canvas) { |
73 Paint white = new Paint()..color = const Color(0xFFFFFFFF); | 72 Paint white = new Paint()..color = const Color(0xFFFFFFFF); |
74 canvas.drawRect(new Rect.fromSize(size), white); | 73 canvas.drawRect(new Rect.fromSize(size), white); |
75 for (Dot dot in dots.values) | 74 for (Dot dot in dots.values) |
76 dot.paint(canvas); | 75 dot.paint(canvas); |
77 } | 76 } |
78 } | 77 } |
79 | 78 |
80 void main() { | 79 void main() { |
81 var paragraph = new RenderParagraph(new InlineText("Touch me!")); | 80 var paragraph = new RenderParagraph(new InlineText("Touch me!")); |
82 var stack = new RenderStack(children: [ | 81 var stack = new RenderStack(children: [ |
83 new RenderTouchDemo(), | 82 new RenderTouchDemo(), |
84 paragraph, | 83 paragraph, |
85 ]); | 84 ]); |
86 // Prevent the RenderParagraph from filling the whole screen so | 85 // Prevent the RenderParagraph from filling the whole screen so |
87 // that it doesn't eat events. | 86 // that it doesn't eat events. |
88 paragraph.parentData..top = 40.0 | 87 paragraph.parentData..top = 40.0 |
89 ..left = 20.0; | 88 ..left = 20.0; |
90 new SkyBinding(root: stack); | 89 new SkyBinding(root: stack); |
91 } | 90 } |
OLD | NEW |