summaryrefslogtreecommitdiff
path: root/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Dimension.js
diff options
context:
space:
mode:
Diffstat (limited to 'webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Dimension.js')
-rw-r--r--webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Dimension.js222
1 files changed, 222 insertions, 0 deletions
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Dimension.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Dimension.js
new file mode 100644
index 0000000000..7b6b6c7daf
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/dom/Dimension.js
@@ -0,0 +1,222 @@
+/* ************************************************************************
+
+ qooxdoo - the new era of web development
+
+ http://qooxdoo.org
+
+ Copyright:
+ 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+ License:
+ LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+ Authors:
+ * Sebastian Werner (wpbasti)
+ * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(ui_core)
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.dom.Dimension");
+
+/*
++-Outer----------------------------------------+
+| Margin |
+| +-Box------------------------------+ |
+| | Border (+ Scrollbar) | |
+| | +-Area--------------------+ | |
+| | | Padding | | |
+| | | +-Inner----------+ | | |
+| | | | | | | |
+| | | +----------------+ | | |
+| | +-------------------------+ | |
+| +----------------------------------+ |
++----------------------------------------------+
+*/
+
+// Dimensions
+qx.dom.Dimension.getOuterWidth = function(el) { return qx.dom.Dimension.getBoxWidth(el) + qx.dom.Style.getMarginLeft(el) + qx.dom.Style.getMarginRight(el); }
+qx.dom.Dimension.getOuterHeight = function(el) { return qx.dom.Dimension.getBoxHeight(el) + qx.dom.Style.getMarginTop(el) + qx.dom.Style.getMarginBottom(el); }
+
+qx.dom.Dimension.getBoxWidthForZeroHeight = function(el)
+{
+ var h = el.offsetHeight;
+ if (h == 0) {
+ var o = el.style.height;
+ el.style.height = "1px";
+ }
+
+ var v = el.offsetWidth;
+
+ if (h == 0) {
+ el.style.height = o;
+ }
+
+ return v;
+}
+
+qx.dom.Dimension.getBoxHeightForZeroWidth = function(el)
+{
+ var w = el.offsetWidth;
+ if (w == 0) {
+ var o = el.style.width;
+ el.style.width = "1px";
+ }
+
+ var v = el.offsetHeight;
+
+ if (w == 0) {
+ el.style.width = o;
+ }
+
+ return v;
+}
+
+qx.dom.Dimension.getBoxWidth = function(el) {
+ return el.offsetWidth;
+}
+
+qx.dom.Dimension.getBoxHeight = function(el) {
+ return el.offsetHeight;
+}
+
+if (qx.sys.Client.getInstance().isGecko())
+{
+ qx.dom.Dimension.getAreaWidth = function(el)
+ {
+ // 0 in clientWidth could mean both: That it is really 0 or
+ // that the element is not rendered by the browser and
+ // therefore it is 0, too
+
+ // In Gecko based browsers there is sometimes another
+ // behaviour: The clientHeight is equal to the border
+ // sum. This is normally not correct and so we
+ // fix this value with a more complex calculation.
+
+ // (Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.6) Gecko/20050223 Firefox/1.0.1)
+
+ if (el.clientWidth != 0 && el.clientWidth != (qx.dom.Style.getBorderLeft(el) + qx.dom.Style.getBorderRight(el)))
+ {
+ return el.clientWidth;
+ }
+ else
+ {
+ return qx.dom.Dimension.getBoxWidth(el) - qx.dom.Dimension.getInsetLeft(el) - qx.dom.Dimension.getInsetRight(el);
+ }
+ }
+
+ qx.dom.Dimension.getAreaHeight = function(el)
+ {
+ // 0 in clientHeight could mean both: That it is really 0 or
+ // that the element is not rendered by the browser and
+ // therefore it is 0, too
+
+ // In Gecko based browsers there is sometimes another
+ // behaviour: The clientHeight is equal to the border
+ // sum. This is normally not correct and so we
+ // fix this value with a more complex calculation.
+
+ // (Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.6) Gecko/20050223 Firefox/1.0.1)
+
+ if (el.clientHeight != 0 && el.clientHeight != (qx.dom.Style.getBorderTop(el) + qx.dom.Style.getBorderBottom(el)))
+ {
+ return el.clientHeight;
+ }
+ else
+ {
+ return qx.dom.Dimension.getBoxHeight(el) - qx.dom.Dimension.getInsetTop(el) - qx.dom.Dimension.getInsetBottom(el);
+ }
+ }
+}
+else
+{
+ qx.dom.Dimension.getAreaWidth = function(el)
+ {
+ // 0 in clientWidth could mean both: That it is really 0 or
+ // that the element is not rendered by the browser and
+ // therefore it is 0, too
+
+ return el.clientWidth != 0 ? el.clientWidth : (qx.dom.Dimension.getBoxWidth(el) - qx.dom.Dimension.getInsetLeft(el) - qx.dom.Dimension.getInsetRight(el));
+ }
+
+ qx.dom.Dimension.getAreaHeight = function(el)
+ {
+ // 0 in clientHeight could mean both: That it is really 0 or
+ // that the element is not rendered by the browser and
+ // therefore it is 0, too
+
+ return el.clientHeight != 0 ? el.clientHeight : (qx.dom.Dimension.getBoxHeight(el) - qx.dom.Dimension.getInsetTop(el) - qx.dom.Dimension.getInsetBottom(el));
+ }
+}
+
+qx.dom.Dimension.getInnerWidth = function(el) { return qx.dom.Dimension.getAreaWidth(el) - qx.dom.Style.getPaddingLeft(el) - qx.dom.Style.getPaddingRight(el); }
+qx.dom.Dimension.getInnerHeight = function(el) { return qx.dom.Dimension.getAreaHeight(el) - qx.dom.Style.getPaddingTop(el) - qx.dom.Style.getPaddingBottom(el); }
+
+
+
+
+// Insets
+if (qx.sys.Client.getInstance().isMshtml())
+{
+ qx.dom.Dimension.getInsetLeft = function(el) { return el.clientLeft; }
+ qx.dom.Dimension.getInsetTop = function(el) { return el.clientTop; }
+ qx.dom.Dimension.getInsetRight = function(el) {
+ if(qx.dom.Style.getStyleProperty(el, "overflowY") == "hidden" || el.clientWidth == 0) {
+ return qx.dom.Style.getBorderRight(el);
+ }
+
+ return Math.max(0, el.offsetWidth - el.clientLeft - el.clientWidth);
+ }
+
+ qx.dom.Dimension.getInsetBottom = function(el) {
+ if(qx.dom.Style.getStyleProperty(el, "overflowX") == "hidden" || el.clientHeight == 0) {
+ return qx.dom.Style.getBorderBottom(el);
+ }
+
+ return Math.max(0, el.offsetHeight - el.clientTop - el.clientHeight);
+ }
+}
+else
+{
+ qx.dom.Dimension.getInsetLeft = function(el) { return qx.dom.Style.getBorderLeft(el); }
+ qx.dom.Dimension.getInsetTop = function(el) { return qx.dom.Style.getBorderTop(el); }
+
+ qx.dom.Dimension.getInsetRight = function(el) {
+ // Alternative method if clientWidth is unavailable
+ // clientWidth == 0 could mean both: unavailable or really 0
+ if (el.clientWidth == 0) {
+ var ov = qx.dom.Style.getStyleProperty(el, "overflow");
+ var sbv = ov == "scroll" || ov == "-moz-scrollbars-vertical" ? 16 : 0;
+ return Math.max(0, qx.dom.Style.getBorderRight(el) + sbv);
+ }
+
+ return Math.max(0, el.offsetWidth - el.clientWidth - qx.dom.Style.getBorderLeft(el));
+ }
+
+ qx.dom.Dimension.getInsetBottom = function(el) {
+ // Alternative method if clientHeight is unavailable
+ // clientHeight == 0 could mean both: unavailable or really 0
+ if (el.clientHeight == 0) {
+ var ov = qx.dom.Style.getStyleProperty(el, "overflow");
+ var sbv = ov == "scroll" || ov == "-moz-scrollbars-horizontal" ? 16 : 0;
+ return Math.max(0, qx.dom.Style.getBorderBottom(el) + sbv);
+ }
+
+ return Math.max(0, el.offsetHeight - el.clientHeight - qx.dom.Style.getBorderTop(el));
+ }
+}
+
+
+// Scrollbar
+qx.dom.Dimension.getScrollBarSizeLeft = function(el) { return 0; }
+qx.dom.Dimension.getScrollBarSizeTop = function(el) { return 0; }
+qx.dom.Dimension.getScrollBarSizeRight = function(el) { return qx.dom.Dimension.getInsetRight(el) - qx.dom.Style.getBorderRight(el); }
+qx.dom.Dimension.getScrollBarSizeBottom = function(el) { return qx.dom.Dimension.getInsetBottom(el) - qx.dom.Style.getBorderBottom(el); }
+
+qx.dom.Dimension.getScrollBarVisibleX = function(el) { return qx.dom.Dimension.getScrollBarSizeRight(el) > 0; }
+qx.dom.Dimension.getScrollBarVisibleY = function(el) { return qx.dom.Dimension.getScrollBarSizeBottom(el) > 0; }