diff --git a/cocos2d/clipping-nodes/CCClippingNode.js b/cocos2d/clipping-nodes/CCClippingNode.js index c7a1921b27..7214ea13e7 100644 --- a/cocos2d/clipping-nodes/CCClippingNode.js +++ b/cocos2d/clipping-nodes/CCClippingNode.js @@ -128,9 +128,6 @@ cc.ClippingNode = cc.Node.extend(/** @lends cc.ClippingNode# */{ }, visit: function (parent) { - if (!this._visible) - return; - this._renderCmd.clippingVisit(parent && parent._renderCmd); }, diff --git a/cocos2d/core/base-nodes/CCNode.js b/cocos2d/core/base-nodes/CCNode.js index 723b27fe5f..98d5ccc828 100644 --- a/cocos2d/core/base-nodes/CCNode.js +++ b/cocos2d/core/base-nodes/CCNode.js @@ -2102,12 +2102,16 @@ cc.Node = cc.Class.extend(/** @lends cc.Node# */{ * @param {cc.Node} parent */ visit: function (parent) { + var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null; + // quick return if not visible - if (!this._visible) + if (!this._visible) { + cmd._propagateFlagsDown(parentCmd); return; + } - var renderer = cc.renderer, cmd = this._renderCmd; - cmd.visit(parent && parent._renderCmd); + var renderer = cc.renderer; + cmd.visit(parentCmd); var i, children = this._children, len = children.length, child; if (len > 0) { diff --git a/cocos2d/core/base-nodes/CCNodeCanvasRenderCmd.js b/cocos2d/core/base-nodes/CCNodeCanvasRenderCmd.js index 1cc0bef5f6..6b4d170ce1 100644 --- a/cocos2d/core/base-nodes/CCNodeCanvasRenderCmd.js +++ b/cocos2d/core/base-nodes/CCNodeCanvasRenderCmd.js @@ -442,6 +442,22 @@ cc.Node.RenderCmd.prototype = { _updateColor: function () { }, + _propagateFlagsDown: function (parentCmd) { + var locFlag = this._dirtyFlag; + var parentNode = parentCmd ? parentCmd._node : null; + + if(parentNode && parentNode._cascadeColorEnabled && (parentCmd._dirtyFlag & dirtyFlags.colorDirty)) + locFlag |= dirtyFlags.colorDirty; + + if(parentNode && parentNode._cascadeOpacityEnabled && (parentCmd._dirtyFlag & dirtyFlags.opacityDirty)) + locFlag |= dirtyFlags.opacityDirty; + + if(parentCmd && (parentCmd._dirtyFlag & dirtyFlags.transformDirty)) + locFlag |= dirtyFlags.transformDirty; + + this._dirtyFlag = locFlag; + }, + updateStatus: function () { var locFlag = this._dirtyFlag; var colorDirty = locFlag & dirtyFlags.colorDirty, diff --git a/cocos2d/core/labelttf/CCLabelTTF.js b/cocos2d/core/labelttf/CCLabelTTF.js index 2342fc555c..ac988109b9 100644 --- a/cocos2d/core/labelttf/CCLabelTTF.js +++ b/cocos2d/core/labelttf/CCLabelTTF.js @@ -826,7 +826,11 @@ cc.LabelTTF = cc.Sprite.extend(/** @lends cc.LabelTTF# */{ _t._rectRotated = rotated || false; _t.setContentSize(untrimmedSize || rect); - _t.setVertexRect(rect); + var locRect = _t._rect; + locRect.x = rect.x; + locRect.y = rect.y; + locRect.width = rect.width; + locRect.height = rect.height; _t._renderCmd._setTextureCoords(rect, false); var relativeOffsetX = _t._unflippedOffsetPositionFromCenter.x, relativeOffsetY = _t._unflippedOffsetPositionFromCenter.y; @@ -834,7 +838,6 @@ cc.LabelTTF = cc.Sprite.extend(/** @lends cc.LabelTTF# */{ relativeOffsetX = -relativeOffsetX; if (_t._flippedY) relativeOffsetY = -relativeOffsetY; - var locRect = _t._rect; _t._offsetPosition.x = relativeOffsetX + (rect.width - locRect.width) / 2; _t._offsetPosition.y = relativeOffsetY + (rect.height - locRect.height) / 2; }, diff --git a/cocos2d/core/layers/CCLayer.js b/cocos2d/core/layers/CCLayer.js index 626dcfc01a..c752ad814f 100644 --- a/cocos2d/core/layers/CCLayer.js +++ b/cocos2d/core/layers/CCLayer.js @@ -75,12 +75,16 @@ cc.Layer = cc.Node.extend(/** @lends cc.Layer# */{ }, visit: function (parent) { + var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null; + // quick return if not visible - if (!this._visible) + if (!this._visible) { + cmd._propagateFlagsDown(parentCmd); return; + } - var renderer = cc.renderer, cmd = this._renderCmd; - cmd.visit(parent && parent._renderCmd); + var renderer = cc.renderer; + cmd.visit(parentCmd); if (cmd._isBaked) { renderer.pushRenderCommand(cmd); @@ -248,12 +252,16 @@ cc.LayerColor = cc.Layer.extend(/** @lends cc.LayerColor# */{ }, visit: function (parent) { + var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null; + // quick return if not visible - if (!this._visible) + if (!this._visible) { + cmd._propagateFlagsDown(parentCmd); return; + } - var renderer = cc.renderer, cmd = this._renderCmd; - cmd.visit(parent && parent._renderCmd); + var renderer = cc.renderer; + cmd.visit(parentCmd); if (cmd._isBaked) { renderer.pushRenderCommand(cmd._bakeRenderCmd); diff --git a/cocos2d/core/platform/CCTypes.js b/cocos2d/core/platform/CCTypes.js index 252061782d..e076fe2ae4 100644 --- a/cocos2d/core/platform/CCTypes.js +++ b/cocos2d/core/platform/CCTypes.js @@ -37,7 +37,7 @@ cc.Color = function (r, g, b, a) { r = r || 0; g = g || 0; b = b || 0; - a = a || 0; + a = typeof a === 'number' ? a : 255; this._val = ((r << 24) >>> 0) + (g << 16) + (b << 8) + a; }; diff --git a/cocos2d/particle/CCParticleBatchNode.js b/cocos2d/particle/CCParticleBatchNode.js index 38959df638..3952bcdbbb 100644 --- a/cocos2d/particle/CCParticleBatchNode.js +++ b/cocos2d/particle/CCParticleBatchNode.js @@ -148,12 +148,15 @@ cc.ParticleBatchNode = cc.Node.extend(/** @lends cc.ParticleBatchNode# */{ }, visit: function (parent) { + var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null; + // quick return if not visible - if (!this._visible) + if (!this._visible) { + cmd._propagateFlagsDown(parentCmd); return; + } - var cmd = this._renderCmd; - cmd.visit(parent && parent._renderCmd); + cmd.visit(parentCmd); cc.renderer.pushRenderCommand(cmd); cmd._dirtyFlag = 0; }, diff --git a/cocos2d/render-texture/CCRenderTexture.js b/cocos2d/render-texture/CCRenderTexture.js index 050672a66f..5cc00ae45a 100644 --- a/cocos2d/render-texture/CCRenderTexture.js +++ b/cocos2d/render-texture/CCRenderTexture.js @@ -133,13 +133,17 @@ cc.RenderTexture = cc.Node.extend(/** @lends cc.RenderTexture# */{ }, visit: function (parent) { + var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null; + // quick return if not visible - if (!this._visible) + if (!this._visible) { + cmd._propagateFlagsDown(parentCmd); return; + } - var renderer = cc.renderer, cmd = this._renderCmd; + var renderer = cc.renderer; - cmd.visit(parent && parent._renderCmd); + cmd.visit(parentCmd); renderer.pushRenderCommand(cmd); this.sprite.visit(this); cmd._dirtyFlag = 0; diff --git a/extensions/ccui/base-classes/CCProtectedNode.js b/extensions/ccui/base-classes/CCProtectedNode.js index 4a2bcd367a..1925572fa5 100644 --- a/extensions/ccui/base-classes/CCProtectedNode.js +++ b/extensions/ccui/base-classes/CCProtectedNode.js @@ -47,15 +47,19 @@ cc.ProtectedNode = cc.Node.extend(/** @lends cc.ProtectedNode# */{ }, visit: function (parent) { + var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null; + // quick return if not visible - if (!this._visible) + if (!this._visible) { + cmd._propagateFlagsDown(parentCmd); return; + } - var renderer = cc.renderer, cmd = this._renderCmd; + var renderer = cc.renderer; var i, children = this._children, len = children.length, child; var j, pChildren = this._protectedChildren, pLen = pChildren.length, pChild; - cmd.visit(parent && parent._renderCmd); + cmd.visit(parentCmd); var locGrid = this.grid; if (locGrid && locGrid._active) diff --git a/extensions/ccui/layouts/UILayout.js b/extensions/ccui/layouts/UILayout.js index 695f7e40f4..34361aa8a9 100644 --- a/extensions/ccui/layouts/UILayout.js +++ b/extensions/ccui/layouts/UILayout.js @@ -134,14 +134,18 @@ ccui.Layout = ccui.Widget.extend(/** @lends ccui.Layout# */{ * @param {cc.Node} [parent] */ visit: function (parent) { - if (!this._visible) + var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null; + + // quick return if not visible + if (!this._visible) { + cmd._propagateFlagsDown(parentCmd); return; + } this._adaptRenderers(); this._doLayout(); - var renderer = cc.renderer, cmd = this._renderCmd; - var parentCmd = parent && parent._renderCmd; + var renderer = cc.renderer; cmd.visit(parentCmd); var stencilClipping = this._clippingEnabled && this._clippingType === ccui.Layout.CLIPPING_STENCIL; diff --git a/extensions/ccui/uiwidgets/scroll-widget/UIScrollView.js b/extensions/ccui/uiwidgets/scroll-widget/UIScrollView.js index cbdadaad21..79741c9525 100644 --- a/extensions/ccui/uiwidgets/scroll-widget/UIScrollView.js +++ b/extensions/ccui/uiwidgets/scroll-widget/UIScrollView.js @@ -124,14 +124,18 @@ ccui.ScrollView = ccui.Layout.extend(/** @lends ccui.ScrollView# */{ }, visit: function (parent) { - if (!this._visible) + var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null; + + // quick return if not visible + if (!this._visible) { + cmd._propagateFlagsDown(parentCmd); return; + } this._adaptRenderers(); this._doLayout(); - var renderer = cc.renderer, cmd = this._renderCmd; - var parentCmd = parent && parent._renderCmd; + var renderer = cc.renderer; cmd.visit(parentCmd); renderer.pushRenderCommand(cmd); diff --git a/extensions/cocostudio/armature/CCArmature.js b/extensions/cocostudio/armature/CCArmature.js index 29de0934e5..3836c34afd 100644 --- a/extensions/cocostudio/armature/CCArmature.js +++ b/extensions/cocostudio/armature/CCArmature.js @@ -151,12 +151,16 @@ ccs.Armature = ccs.Node.extend(/** @lends ccs.Armature# */{ }, visit: function (parent) { + var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null; + // quick return if not visible - if (!this._visible) + if (!this._visible) { + cmd._propagateFlagsDown(parentCmd); return; + } - this._renderCmd.visit(parent && parent._renderCmd); - this._renderCmd._dirtyFlag = 0; + cmd.visit(parentCmd); + cmd._dirtyFlag = 0; }, addChild: function (child, localZOrder, tag) { diff --git a/extensions/cocostudio/timeline/CCSkeletonNode.js b/extensions/cocostudio/timeline/CCSkeletonNode.js index 28517649d1..2bd075f51e 100644 --- a/extensions/cocostudio/timeline/CCSkeletonNode.js +++ b/extensions/cocostudio/timeline/CCSkeletonNode.js @@ -145,10 +145,14 @@ ccs.SkeletonNode = (function () { }, _visit: function (parentCmd) { - if (!this._visible) - return; var cmd = this._renderCmd; parentCmd = parentCmd || cmd.getParentRenderCmd(); + + // quick return if not visible + if (!this._visible) { + cmd._propagateFlagsDown(parentCmd); + return; + } cmd._syncStatus(parentCmd); var i, node; diff --git a/extensions/gui/scrollview/CCScrollView.js b/extensions/gui/scrollview/CCScrollView.js index d29e6db0ac..bedba0ac04 100644 --- a/extensions/gui/scrollview/CCScrollView.js +++ b/extensions/gui/scrollview/CCScrollView.js @@ -166,12 +166,16 @@ cc.ScrollView = cc.Layer.extend(/** @lends cc.ScrollView# */{ }, visit: function (parent) { + var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null; + + // quick return if not visible if (!this._visible) { + cmd._propagateFlagsDown(parentCmd); return; } - var renderer = cc.renderer, cmd = this._renderCmd; - cmd.visit(parent && parent._renderCmd); + var renderer = cc.renderer; + cmd.visit(parentCmd); if (this._clippingToBounds) { renderer.pushRenderCommand(cmd.startCmd);