add clientWidth and CSSWidth so we can better compute and force sizes of containers. Absolute positioned children don't affect the bounding width so you have to set it yourself
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/d2fe78af Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/d2fe78af Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/d2fe78af Branch: refs/heads/develop Commit: d2fe78afe46739bac6963a434a004bf2f03cadc1 Parents: aac09e7 Author: Alex Harui <[email protected]> Authored: Fri May 22 15:27:36 2015 -0700 Committer: Alex Harui <[email protected]> Committed: Fri May 22 16:04:11 2015 -0700 ---------------------------------------------------------------------- .../Core/js/src/org/apache/flex/core/UIBase.js | 56 +++++++++++++++++--- 1 file changed, 48 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d2fe78af/frameworks/projects/Core/js/src/org/apache/flex/core/UIBase.js ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/js/src/org/apache/flex/core/UIBase.js b/frameworks/projects/Core/js/src/org/apache/flex/core/UIBase.js index 61a0015..14c79da 100644 --- a/frameworks/projects/Core/js/src/org/apache/flex/core/UIBase.js +++ b/frameworks/projects/Core/js/src/org/apache/flex/core/UIBase.js @@ -424,6 +424,26 @@ Object.defineProperties(org_apache_flex_core_UIBase.prototype, { } }, /** @expose */ + clientWidth: { + /** @this {org_apache_flex_core_UIBase} */ + get: function() { + return this.positioner.clientWidth; + } + }, + /** @expose */ + CSSWidth: { + /** @this {org_apache_flex_core_UIBase} */ + get: function() { + var pixels; + var strpixels = this.positioner.style.width; + if (strpixels !== null && strpixels.indexOf('%') != -1) + pixels = NaN; + else + pixels = parseFloat(strpixels); + return pixels; + } + }, + /** @expose */ width: { /** @this {org_apache_flex_core_UIBase} */ set: function(pixels) { @@ -476,6 +496,26 @@ Object.defineProperties(org_apache_flex_core_UIBase.prototype, { } }, /** @expose */ + clientHeight: { + /** @this {org_apache_flex_core_UIBase} */ + get: function() { + return this.positioner.clientHeight; + } + }, + /** @expose */ + CSSHeight: { + /** @this {org_apache_flex_core_UIBase} */ + get: function() { + var pixels; + var strpixels = this.positioner.style.height; + if (strpixels !== null && strpixels.indexOf('%') != -1) + pixels = NaN; + else + pixels = parseFloat(strpixels); + return pixels; + } + }, + /** @expose */ height: { /** @this {org_apache_flex_core_UIBase} */ set: function(pixels) { @@ -649,8 +689,8 @@ org_apache_flex_core_UIBase.prototype.setHeight = if (opt_noEvent === undefined) opt_noEvent = false; - var _height = this.height; - if (_height != value) { + var _height = this.CSSHeight; + if (isNaN(_height) || _height != value) { this.positioner.style.height = value.toString() + 'px'; if (!opt_noEvent) this.dispatchEvent('heightChanged'); @@ -669,8 +709,8 @@ org_apache_flex_core_UIBase.prototype.setWidth = if (opt_noEvent === undefined) opt_noEvent = false; - var _width = this.width; - if (_width != value) { + var _width = this.CSSWidth; + if (isNaN(_width) || _width != value) { this.positioner.style.width = value.toString() + 'px'; if (!opt_noEvent) this.dispatchEvent('widthChanged'); @@ -690,14 +730,14 @@ org_apache_flex_core_UIBase.prototype.setWidthAndHeight = if (opt_noEvent === undefined) opt_noEvent = false; - var _width = this.width; - if (_width != newWidth) { + var _width = this.CSSWidth; + if (isNaN(_width) || _width != newWidth) { this.positioner.style.width = newWidth.toString() + 'px'; if (!opt_noEvent) this.dispatchEvent('widthChanged'); } - var _height = this.height; - if (_height != newHeight) { + var _height = this.CSSHeight; + if (isNaN(_height) || _height != newHeight) { this.positioner.style.height = newHeight.toString() + 'px'; if (!opt_noEvent) this.dispatchEvent('heightChanged');
