From 7e989c46526b613a04bd938dfb5d85f79ea15ebe Mon Sep 17 00:00:00 2001 From: Grant Skinner Date: Thu, 10 Oct 2013 10:50:34 -0600 Subject: [PATCH] Added DisplayObject.tickEnabled & Container.tickChildren Signed-off-by: Grant Skinner --- VERSIONS.txt | 1 + src/easeljs/display/Container.js | 18 +++++++++++++++--- src/easeljs/display/DisplayObject.js | 10 ++++++++++ src/easeljs/display/Stage.js | 2 +- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/VERSIONS.txt b/VERSIONS.txt index 02a723f23..4d185a60f 100644 --- a/VERSIONS.txt +++ b/VERSIONS.txt @@ -2,6 +2,7 @@ Version NEXT [NOT RELEASED] **************************************************************************************************** - fixed issue with mouseChildren not working with nested Containers - fixed issue where first call to Ticker.addEventListener did not return the listener +- added DisplayObject.tickEnabled & Container.tickChildren Version 0.7.0 [September 25, 2013] diff --git a/src/easeljs/display/Container.js b/src/easeljs/display/Container.js index 93e6971fa..10ec8c841 100644 --- a/src/easeljs/display/Container.js +++ b/src/easeljs/display/Container.js @@ -77,6 +77,16 @@ var p = Container.prototype = new createjs.DisplayObject(); * @default true **/ p.mouseChildren = true; + + /** + * If false, the tick will not be propagated to children of this Container. This can provide some performance benefits. + * In addition to preventing the "tick" event from being dispatched, it will also prevent tick related updates + * on some display objects (ex. Sprite & MovieClip frame advancing, DOMElement visibility handling). + * @property tickChildren + * @type Boolean + * @default true + **/ + p.tickChildren = true; // constructor: @@ -536,9 +546,11 @@ var p = Container.prototype = new createjs.DisplayObject(); * @protected **/ p._tick = function(params) { - for (var i=this.children.length-1; i>=0; i--) { - var child = this.children[i]; - if (child._tick) { child._tick(params); } + if (this.tickChildren) { + for (var i=this.children.length-1; i>=0; i--) { + var child = this.children[i]; + if (child.tickEnabled && child._tick) { child._tick(params); } + } } this.DisplayObject__tick(params); }; diff --git a/src/easeljs/display/DisplayObject.js b/src/easeljs/display/DisplayObject.js index 24bbc37c2..d988d192b 100644 --- a/src/easeljs/display/DisplayObject.js +++ b/src/easeljs/display/DisplayObject.js @@ -325,6 +325,16 @@ var p = DisplayObject.prototype = new createjs.EventDispatcher(); * @default true **/ p.mouseEnabled = true; + + /** + * If false, the tick will not run on this display object (or its children). This can provide some performance benefits. + * In addition to preventing the "tick" event from being dispatched, it will also prevent tick related updates + * on some display objects (ex. Sprite & MovieClip frame advancing, DOMElement visibility handling). + * @property tickEnabled + * @type Boolean + * @default true + **/ + p.tickEnabled = true; /** * An optional name for this display object. Included in {{#crossLink "DisplayObject/toString"}}{{/crossLink}} . Useful for diff --git a/src/easeljs/display/Stage.js b/src/easeljs/display/Stage.js index 02be54174..fc1e891bc 100644 --- a/src/easeljs/display/Stage.js +++ b/src/easeljs/display/Stage.js @@ -361,7 +361,7 @@ var p = Stage.prototype = new createjs.Container(); if (!this.canvas) { return; } if (this.tickOnUpdate) { this.dispatchEvent("tickstart"); // TODO: make cancellable? - this._tick((arguments.length ? arguments : null)); + this.tickEnabled&&this._tick((arguments.length ? arguments : null)); this.dispatchEvent("tickend"); } this.dispatchEvent("drawstart"); // TODO: make cancellable?