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