From 3e2b4adc27ba4da47c5076abdf0919a5940d0db9 Mon Sep 17 00:00:00 2001 From: Jonathan Puckey Date: Wed, 16 Feb 2011 18:55:12 +0100 Subject: [PATCH] Layer: implement moveAbove / moveBelow / nextSibling / previousSibling --- src/item/Layer.js | 58 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/src/item/Layer.js b/src/item/Layer.js index 68e3c270..ad218aeb 100644 --- a/src/item/Layer.js +++ b/src/item/Layer.js @@ -3,7 +3,7 @@ Layer = Item.extend({ initialize: function() { this.children = []; - this.document = this.parent = Paper.document; + this.document = Paper.document; this.document.layers.push(this); this.activate(); }, @@ -11,6 +11,62 @@ Layer = Item.extend({ getIndex: function() { return !this.parent ? this.document.layers.indexOf(this) : this.base(); }, + + /** + * Removes the layer from its document's layers list + * or its parent's children list. + */ + removeFromParent: function() { + if(!this.parent) { + this.document.layers.splice(this.index, 1); + } else { + this.base(); + } + }, + + moveAbove: function(item) { + // if the item is a layer and contained within Document#layers + if(item instanceof Layer && !item.parent) { + this.removeFromParent(); + item.document.layers.splice(item.index + 1, 0, this); + this.document = item.document; + return true; + } else { + this.base(item); + } + }, + + moveBelow: function(item) { + // if the item is a layer and contained within Document#layers + if(item instanceof Layer && !item.parent) { + this.removeFromParent(); + item.document.layers.splice(item.index - 1, 0, this); + this.document = item.document; + return true; + } else { + this.base(item); + } + }, + + getNextSibling: function() { + if(!this.parent) { + var index = this.index + 1; + if (index < this.document.layers.length) + return this.document.layers[index]; + } else { + return this.base(); + } + }, + + getPreviousSibling: function() { + if(!this.parent) { + var index = this.index - 1; + if (index <= 0) + return this.document.layers[index]; + } else { + return this.base(); + } + }, activate: function() { this.document.activeLayer = this;