From 8c0308c88e909d1d26fbc5f6edd0ed311bdfa16e Mon Sep 17 00:00:00 2001 From: Andrea Campi Date: Sat, 25 Aug 2012 16:27:02 +0200 Subject: [PATCH] Use element.getBoundingClient() to implement getOffsetWidth(); this also affects Metrics, since it uses getOffsetWidth(). element.getBoundingClient originated on IE, and is implemented by every browser we are compatible with. --- src/lib/dimensions.js | 2 +- test/dimensions.js | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/lib/dimensions.js b/src/lib/dimensions.js index 3112509..d533f09 100644 --- a/src/lib/dimensions.js +++ b/src/lib/dimensions.js @@ -128,7 +128,7 @@ goog.scope(function() { * @return {!number} Value in pixels. */ dimensions.getOffsetWidth = function(el) { - return el && el.offsetWidth || 0; + return el && el.getBoundingClientRect()['width'] || 0; }; /** diff --git a/test/dimensions.js b/test/dimensions.js index 4560951..c78da21 100644 --- a/test/dimensions.js +++ b/test/dimensions.js @@ -128,6 +128,27 @@ $(function() { equals(d.outerH, 20); }); + test('offsetWidth with subpixels', function() { + var e = $('
').addClass('testonly').appendTo('body').css({ + fontSize: '13px', + lineHeight: '13px' + }), + c1 = $('
').appendTo(e).css({ + "margin-left": '15em', + width: '21.5em' + }), + c2 = $('
').appendTo(e).css({ + "margin-left": '37.5em', + width: '21.5em' + }), + d1 = new treesaver.dimensions.Metrics(c1[0]), + d2 = new treesaver.dimensions.Metrics(c2[0]); + + equals(d1.outerW, d2.outerW); + equals(d1.outerW, treesaver.capabilities.SUPPORTS_SUBPIXELS ? 279.5 : 279); + equals(d2.outerW, treesaver.capabilities.SUPPORTS_SUBPIXELS ? 279.5 : 279); + }); + test('lineHeight', function() { var e = $('
').addClass('testonly').appendTo('body').css({ fontSize: '14px',