OLD | NEW |
1 part of sprites; | 1 part of sprites; |
2 | 2 |
3 enum SpriteBoxTransformMode { | 3 enum SpriteBoxTransformMode { |
4 nativePoints, | 4 nativePoints, |
5 letterbox, | 5 letterbox, |
6 stretch, | 6 stretch, |
7 scaleToFit, | 7 scaleToFit, |
8 fixedWidth, | 8 fixedWidth, |
9 fixedHeight, | 9 fixedHeight, |
10 } | 10 } |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 | 67 |
68 void performLayout() { | 68 void performLayout() { |
69 size = constraints.constrain(Size.infinite); | 69 size = constraints.constrain(Size.infinite); |
70 _invalidateTransformMatrix(); | 70 _invalidateTransformMatrix(); |
71 _callSpriteBoxPerformedLayout(_rootNode); | 71 _callSpriteBoxPerformedLayout(_rootNode); |
72 } | 72 } |
73 | 73 |
74 // Event handling | 74 // Event handling |
75 | 75 |
76 void _addEventTargets(Node node, List<Node> eventTargets) { | 76 void _addEventTargets(Node node, List<Node> eventTargets) { |
| 77 List children = node.children; |
| 78 int i = 0; |
| 79 |
| 80 // Add childrens that are behind this node |
| 81 while (i < children.length) { |
| 82 Node child = children[i]; |
| 83 if (child.zPosition >= 0.0) break; |
| 84 _addEventTargets(child, eventTargets); |
| 85 i++; |
| 86 } |
| 87 |
| 88 // Add this node |
77 if (node.userInteractionEnabled) { | 89 if (node.userInteractionEnabled) { |
78 eventTargets.add(node); | 90 eventTargets.add(node); |
79 } | 91 } |
80 for (Node child in node.children) { | 92 |
| 93 // Add children in front of this node |
| 94 while (i < children.length) { |
| 95 Node child = children[i]; |
81 _addEventTargets(child, eventTargets); | 96 _addEventTargets(child, eventTargets); |
| 97 i++; |
82 } | 98 } |
83 } | 99 } |
84 | 100 |
85 void handleEvent(Event event, SpriteBoxHitTestEntry entry) { | 101 void handleEvent(Event event, SpriteBoxHitTestEntry entry) { |
86 if (event is PointerEvent) { | 102 if (event is PointerEvent) { |
87 | 103 |
88 if (event.type == 'pointerdown') { | 104 if (event.type == 'pointerdown') { |
89 // Build list of event targets | 105 // Build list of event targets |
90 if (_eventTargets == null) { | 106 if (_eventTargets == null) { |
91 _eventTargets = []; | 107 _eventTargets = []; |
92 _addEventTargets(_rootNode, _eventTargets); | 108 _addEventTargets(_rootNode, _eventTargets); |
93 } | 109 } |
94 | 110 |
95 // Find the once that are hit by the pointer | 111 // Find the once that are hit by the pointer |
96 List<Node> nodeTargets = []; | 112 List<Node> nodeTargets = []; |
97 for (int i = _eventTargets.length - 1; i >= 0; i--) { | 113 for (int i = _eventTargets.length - 1; i >= 0; i--) { |
98 Node node = _eventTargets[i]; | 114 Node node = _eventTargets[i]; |
99 | 115 |
100 // Check if the node is ready to handle a pointer | 116 // Check if the node is ready to handle a pointer |
101 if (node.handleMultiplePointers || node._handlingPointer == null) { | 117 if (node.handleMultiplePointers || node._handlingPointer == null) { |
102 // Do the hit test | 118 // Do the hit test |
103 Point posInNodeSpace = node.convertPointToNodeSpace(entry.localPosit
ion); | 119 Point posInNodeSpace = node.convertPointToNodeSpace(entry.localPosit
ion); |
104 if (node.hitTest(posInNodeSpace)) { | 120 if (node.isPointInside(posInNodeSpace)) { |
105 nodeTargets.add(node); | 121 nodeTargets.add(node); |
106 node._handlingPointer = event.pointer; | 122 node._handlingPointer = event.pointer; |
107 } | 123 } |
108 } | 124 } |
109 } | 125 } |
110 | 126 |
111 entry.nodeTargets = nodeTargets; | 127 entry.nodeTargets = nodeTargets; |
112 } | 128 } |
113 | 129 |
114 // Pass the event down to nodes that were hit by the pointerdown | 130 // Pass the event down to nodes that were hit by the pointerdown |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 _rootNode._invalidateToBoxTransformMatrix(); | 230 _rootNode._invalidateToBoxTransformMatrix(); |
215 } | 231 } |
216 | 232 |
217 void paint(RenderObjectDisplayList canvas) { | 233 void paint(RenderObjectDisplayList canvas) { |
218 canvas.save(); | 234 canvas.save(); |
219 | 235 |
220 // Move to correct coordinate space before drawing | 236 // Move to correct coordinate space before drawing |
221 canvas.concat(transformMatrix.storage); | 237 canvas.concat(transformMatrix.storage); |
222 | 238 |
223 // Draw the sprite tree | 239 // Draw the sprite tree |
224 _rootNode.visit(canvas); | 240 _rootNode._visit(canvas); |
225 | 241 |
226 canvas.restore(); | 242 canvas.restore(); |
227 } | 243 } |
228 | 244 |
229 // Updates | 245 // Updates |
230 | 246 |
231 int _animationId = 0; | 247 int _animationId = 0; |
232 | 248 |
233 void _scheduleTick() { | 249 void _scheduleTick() { |
234 _animationId = scheduler.requestAnimationFrame(_tick); | 250 _animationId = scheduler.requestAnimationFrame(_tick); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
282 return nodes; | 298 return nodes; |
283 } | 299 } |
284 | 300 |
285 _addNodesAtPosition(Node node, Point position, List<Node> list) { | 301 _addNodesAtPosition(Node node, Point position, List<Node> list) { |
286 // Visit children first | 302 // Visit children first |
287 for (Node child in node.children) { | 303 for (Node child in node.children) { |
288 _addNodesAtPosition(child, position, list); | 304 _addNodesAtPosition(child, position, list); |
289 } | 305 } |
290 // Do the hit test | 306 // Do the hit test |
291 Point posInNodeSpace = node.convertPointToNodeSpace(position); | 307 Point posInNodeSpace = node.convertPointToNodeSpace(position); |
292 if (node.hitTest(posInNodeSpace)) { | 308 if (node.isPointInside(posInNodeSpace)) { |
293 list.add(node); | 309 list.add(node); |
294 } | 310 } |
295 } | 311 } |
296 } | 312 } |
297 | 313 |
298 class SpriteBoxHitTestEntry extends BoxHitTestEntry { | 314 class SpriteBoxHitTestEntry extends BoxHitTestEntry { |
299 List<Node> nodeTargets; | 315 List<Node> nodeTargets; |
300 SpriteBoxHitTestEntry(RenderBox target, Point localPosition) : super(target, l
ocalPosition); | 316 SpriteBoxHitTestEntry(RenderBox target, Point localPosition) : super(target, l
ocalPosition); |
301 } | 317 } |
302 | 318 |
303 class SpriteBoxEvent { | 319 class SpriteBoxEvent { |
304 Point boxPosition; | 320 Point boxPosition; |
305 String type; | 321 String type; |
306 int pointer; | 322 int pointer; |
307 | 323 |
308 SpriteBoxEvent(this.boxPosition, this.type, this.pointer); | 324 SpriteBoxEvent(this.boxPosition, this.type, this.pointer); |
309 } | 325 } |
OLD | NEW |