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

Unified Diff: sky/examples/game/lib/sprite_box.dart

Issue 1190393004: Sprites correctly handles zPosition (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/examples/game/lib/node_with_size.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/examples/game/lib/sprite_box.dart
diff --git a/sky/examples/game/lib/sprite_box.dart b/sky/examples/game/lib/sprite_box.dart
index 9125b44f4fb10684ce20e444a15d9149f594a978..131c4d01fad6b7ff92580b5b55e6044827f5b5f5 100644
--- a/sky/examples/game/lib/sprite_box.dart
+++ b/sky/examples/game/lib/sprite_box.dart
@@ -74,11 +74,27 @@ class SpriteBox extends RenderBox {
// Event handling
void _addEventTargets(Node node, List<Node> eventTargets) {
+ List children = node.children;
+ int i = 0;
+
+ // Add childrens that are behind this node
+ while (i < children.length) {
+ Node child = children[i];
+ if (child.zPosition >= 0.0) break;
+ _addEventTargets(child, eventTargets);
+ i++;
+ }
+
+ // Add this node
if (node.userInteractionEnabled) {
eventTargets.add(node);
}
- for (Node child in node.children) {
+
+ // Add children in front of this node
+ while (i < children.length) {
+ Node child = children[i];
_addEventTargets(child, eventTargets);
+ i++;
}
}
@@ -101,7 +117,7 @@ class SpriteBox extends RenderBox {
if (node.handleMultiplePointers || node._handlingPointer == null) {
// Do the hit test
Point posInNodeSpace = node.convertPointToNodeSpace(entry.localPosition);
- if (node.hitTest(posInNodeSpace)) {
+ if (node.isPointInside(posInNodeSpace)) {
nodeTargets.add(node);
node._handlingPointer = event.pointer;
}
@@ -221,7 +237,7 @@ class SpriteBox extends RenderBox {
canvas.concat(transformMatrix.storage);
// Draw the sprite tree
- _rootNode.visit(canvas);
+ _rootNode._visit(canvas);
canvas.restore();
}
@@ -289,7 +305,7 @@ class SpriteBox extends RenderBox {
}
// Do the hit test
Point posInNodeSpace = node.convertPointToNodeSpace(position);
- if (node.hitTest(posInNodeSpace)) {
+ if (node.isPointInside(posInNodeSpace)) {
list.add(node);
}
}
« no previous file with comments | « sky/examples/game/lib/node_with_size.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698