diff --git a/lib/widget.js b/lib/widget.js index d9ab158..e6058cd 100644 --- a/lib/widget.js +++ b/lib/widget.js @@ -1962,12 +1962,12 @@ Box.prototype._getShrinkBox = function(xi, xl, yi, yl) { return { xi: xi, xl: xi, yi: yi, yl: yi }; } - var i, el, mxi = 0, mxl = 0, myi = 0, myl = 0; + var i, el, ret, mxi = 0, mxl = 0, myi = 0, myl = 0; for (i = 0; i < this.children.length; i++) { el = this.children[i]; - var ret = el.render(true); + ret = el.render(true); if (!ret) continue; if (ret.xi < mxi) mxi = ret.xi; @@ -1976,31 +1976,25 @@ Box.prototype._getShrinkBox = function(xi, xl, yi, yl) { if (ret.yl > myl) myl = ret.yl; } - var xll = xl, yll = yl; - - if (this.options.left == null && this.options.right != null) { - if (this.options.width == null) xi = xl - (mxl - mxi); - } else { - if (this.options.width == null) xl = mxl; + if (this.options.width == null + && (this.options.left == null + || this.options.right == null)) { + if (this.options.left == null && this.options.right != null) { + xi = xl - (mxl - mxi); + } else { + xl = mxl; + } } - if (this.options.top == null && this.options.bottom != null) { - if (this.options.height == null) yi = yl - (myl - myi); - } else { - if (this.options.height == null) yl = myl; - } - - // Recenter shrunken elements. - if (xl < xll && this.options.left === 'center') { - xll = (xll - xl) / 2 | 0; - xi += xll; - xl += xll; - } - - if (yl < yll && this.options.top === 'center') { - yll = (yll - yl) / 2 | 0; - yi += yll; - yl += yll; + if (this.options.height == null + && (this.options.top == null + || this.options.bottom == null) + && this.childBase == null) { + if (this.options.top == null && this.options.bottom != null) { + yi = yl - (myl - myi); + } else { + yl = myl; + } } return { xi: xi, xl: xl, yi: yi, yl: yl }; @@ -2009,9 +2003,7 @@ Box.prototype._getShrinkBox = function(xi, xl, yi, yl) { Box.prototype._getShrinkContent = function(xi, xl, yi, yl, content) { var hw = this._getShrinkSize(content) , h = hw.height - , w = hw.width - , xll = xl - , yll = yl; + , w = hw.width; if (this.options.width == null && (this.options.left == null @@ -2034,26 +2026,16 @@ Box.prototype._getShrinkContent = function(xi, xl, yi, yl, content) { } } - // Recenter shrunken elements. - if (xl < xll && this.options.left === 'center') { - xll = (xll - xl) / 2 | 0; - xi += xll; - xl += xll; - } - - if (yl < yll && this.options.top === 'center') { - yll = (yll - yl) / 2 | 0; - yi += yll; - yl += yll; - } - return { xi: xi, xl: xl, yi: yi, yl: yl }; }; Box.prototype._getShrink = function(xi, xl, yi, yl, content) { var shrinkBox = this._getShrinkBox(xi, xl, yi, yl) - , shrinkContent = this._getShrinkContent(xi, xl, yi, yl, content); + , shrinkContent = this._getShrinkContent(xi, xl, yi, yl, content) + , xll = xl + , yll = yl; + // Figure out which one is bigger and use it. if (shrinkBox.xl - shrinkBox.xi > shrinkContent.xl - shrinkContent.xi) { xi = shrinkBox.xi; xl = shrinkBox.xl; @@ -2070,17 +2052,39 @@ Box.prototype._getShrink = function(xi, xl, yi, yl, content) { yl = shrinkContent.yl; } - // Add padding if we're shrinking. - if (this.padding) { - if (this.options.left == null && this.options.right != null) { - if (this.options.width == null) xi -= this.padding * 2; - } else { - if (this.options.width == null) xl += this.padding * 2; + // Recenter shrunken elements. + if (xl < xll && this.options.left === 'center') { + xll = (xll - xl) / 2 | 0; + xi += xll; + xl += xll; + } + + if (yl < yll && this.options.top === 'center') { + yll = (yll - yl) / 2 | 0; + yi += yll; + yl += yll; + } + + // Add padding, doesn't seem to be necessary. + if (0 && this.padding) { + if (this.options.width == null + && (this.options.left == null + || this.options.right == null)) { + if (this.options.left == null && this.options.right != null) { + xi -= this.padding * 2; + } else { + xl += this.padding * 2; + } } - if (this.options.top == null && this.options.bottom != null) { - if (this.options.height == null) yi -= this.padding * 2; - } else { - if (this.options.height == null) yl += this.padding * 2; + if (this.options.height == null + && (this.options.top == null + || this.options.bottom == null) + && this.childBase == null) { + if (this.options.top == null && this.options.bottom != null) { + yi -= this.padding * 2; + } else { + yl += this.padding * 2; + } } }