Revision: 1067
Author: allain.lalonde
Date: Wed Sep  1 12:45:28 2010
Log: JS: Adding moveToFront and moveToBack to PNode
http://code.google.com/p/piccolo2d/source/detail?r=1067

Modified:
 /piccolo2d.js/trunk/piccolo2d.js
 /piccolo2d.js/trunk/test.html

=======================================
--- /piccolo2d.js/trunk/piccolo2d.js    Wed Sep  1 12:01:18 2010
+++ /piccolo2d.js/trunk/piccolo2d.js    Wed Sep  1 12:45:28 2010
@@ -509,6 +509,32 @@

         getScale: function() {
           return this.transform.getScale();
+        },
+
+        moveToFront: function() {
+            if (this.parent && this.parent.children.length > 1) {
+                this.parent.children = this.parent.children.remove(this);
+                this.parent.children.push(this);
+
+                this.invalidatePaint();
+            }
+            return this;
+        },
+
+        moveToBack: function() {
+            if (this.parent && this.parent.children.length > 1) {
+                var newSiblings = [this];
+                for (var i=0, n = this.parent.children.length; i<n; i++) {
+                    if (this.parent.children[i] != this) {
+                      newSiblings.push(this.parent.children[i]);
+                    }
+                }
+
+                this.parent.children = newSiblings;
+
+                this.invalidatePaint();
+            }
+            return this;
         }
     });

@@ -743,10 +769,10 @@
             function dispatchEvent(type, event, pickedNodes) {
                 var currentNode, listener;

- for (var nodeIndex = 0; nodeIndex < pickedNodes.length; nodeIndex += 1) { + for (var nodeIndex = 0, pickedNodeCount = pickedNodes.length; nodeIndex < pickedNodeCount; nodeIndex += 1) {
                     currentNode = pickedNodes[nodeIndex];
                     while (currentNode) {
- for (var i = 0; i < currentNode.listeners.length; i += 1) { + for (var i = 0, listenerCount = currentNode.listeners.length; i < listenerCount; i += 1) {
                             listener = currentNode.listeners[i];
                             if (listener[type]) {
                                 listener[type]({
=======================================
--- /piccolo2d.js/trunk/test.html       Wed Sep  1 12:01:18 2010
+++ /piccolo2d.js/trunk/test.html       Wed Sep  1 12:45:28 2010
@@ -465,6 +465,36 @@
             testNode.getFullBounds();
             ok(layoutChildrenCalled, "layoutChildren was not called");
         });
+
+ test("Move to front places child node at end of its parent's children", function() {
+            var a = new PNode();
+            var b = new PNode();
+            var parent = new PNode();
+            parent.addChild(a);
+            parent.addChild(b);
+            a.moveToFront();
+            same(parent.children[1], a);
+        });
+
+ test("Move to back places child node at front of its parent's children", function() {
+            var a = new PNode();
+            var b = new PNode();
+            var parent = new PNode();
+            parent.addChild(a);
+            parent.addChild(b);
+            b.moveToBack();
+            same(parent.children[0], b);
+        });
+
+ test("Move to front does nothing if child has no parent", function() {
+            var a = new PNode();
+            a.moveToFront();
+        });
+
+ test("Move to back does nothing if child has no parent", function() {
+            var a = new PNode();
+            a.moveToBack();
+        });
       }

       function testPRoot() {

--
Piccolo2D Developers Group: http://groups.google.com/group/piccolo2d-dev?hl=en

Reply via email to