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