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

Side by Side Diff: sky/examples/raw/touch_demo.dart

Issue 1143343004: Rationalise hit testing in the new RenderNode world (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
OLDNEW
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/layout2.dart'; 8 import 'package:sky/framework/layout2.dart';
8 9
9 // Material design colors. :p 10 // Material design colors. :p
10 List<int> colors = [ 11 List<int> colors = [
11 0xFF009688, 12 0xFF009688,
12 0xFFFFC107, 13 0xFFFFC107,
13 0xFF9C27B0, 14 0xFF9C27B0,
14 0xFF03A9F4, 15 0xFF03A9F4,
15 0xFF673AB7, 16 0xFF673AB7,
16 0xFFCDDC39, 17 0xFFCDDC39,
(...skipping 16 matching lines...) Expand all
33 void paint(RenderNodeDisplayList canvas) { 34 void paint(RenderNodeDisplayList canvas) {
34 canvas.drawCircle(x, y, radius, _paint); 35 canvas.drawCircle(x, y, radius, _paint);
35 } 36 }
36 } 37 }
37 38
38 class RenderTouchDemo extends RenderBox { 39 class RenderTouchDemo extends RenderBox {
39 Map<int, Dot> dots = new Map(); 40 Map<int, Dot> dots = new Map();
40 41
41 RenderTouchDemo(); 42 RenderTouchDemo();
42 43
43 bool handlePointer(PointerEvent event, { double x: 0.0, double y: 0.0 }) { 44 void handlePointer(PointerEvent event) {
44 switch (event.type) { 45 switch (event.type) {
45 case 'pointerdown': 46 case 'pointerdown':
46 int color = colors[event.pointer.remainder(colors.length)]; 47 int color = colors[event.pointer.remainder(colors.length)];
47 dots[event.pointer] = new Dot(color: color)..update(event); 48 dots[event.pointer] = new Dot(color: color)..update(event);
48 break; 49 break;
49 case 'pointerup': 50 case 'pointerup':
50 dots.remove(event.pointer); 51 dots.remove(event.pointer);
51 break; 52 break;
52 case 'pointercancel': 53 case 'pointercancel':
53 dots = new Map(); 54 dots = new Map();
54 break; 55 break;
55 case 'pointermove': 56 case 'pointermove':
56 dots[event.pointer].update(event); 57 dots[event.pointer].update(event);
57 break; 58 break;
58 } 59 }
59 markNeedsPaint(); 60 markNeedsPaint();
60 return true;
61 } 61 }
62 62
63 void paint(RenderNodeDisplayList canvas) { 63 void paint(RenderNodeDisplayList canvas) {
64 dots.forEach((_, Dot dot) { 64 dots.forEach((_, Dot dot) {
65 dot.paint(canvas); 65 dot.paint(canvas);
66 }); 66 });
67 } 67 }
68 } 68 }
69 69
70 RenderView renderView; 70 AppView app;
71
72 void beginFrame(double timeStamp) {
73 RenderNode.flushLayout();
74 renderView.paintFrame();
75 }
76
77 bool handleEvent(Event event) {
78 if (event is! PointerEvent)
79 return false;
80 return renderView.handlePointer(event, x: event.x, y: event.y);
81 }
82 71
83 void main() { 72 void main() {
84 view.setEventCallback(handleEvent); 73 app = new AppView(new RenderTouchDemo());
85 view.setBeginFrameCallback(beginFrame);
86
87 renderView = new RenderView(root: new RenderTouchDemo());
88 renderView.layout(newWidth: view.width, newHeight: view.height);
89
90 view.scheduleFrame();
91 } 74 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698