UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

158 lines (128 loc) 4.02 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2004-2008 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Sebastian Werner (wpbasti) ************************************************************************ */ /** * The grow layout stretches all children to the full available size * but still respects limits configured by min/max values. * * It will place all children over each other with the top and left coordinates * set to <code>0</code>. The {@link qx.ui.container.Stack} and the * {@link qx.ui.core.scroll.ScrollPane} are using this layout. * * *Features* * * * Auto-sizing * * Respects minimum and maximum child dimensions * * *Item Properties* * * None * * *Example* * * <pre class="javascript"> * var layout = new qx.ui.layout.Grow(); * * var w1 = new qx.ui.core.Widget(); * var w2 = new qx.ui.core.Widget(); * var w3 = new qx.ui.core.Widget(); * * var container = new qx.ui.container.Composite(layout); * container.add(w1); * container.add(w2); * container.add(w3); * </pre> * * *External Documentation* * * <a href='http://manual.qooxdoo.org/${qxversion}/pages/layout/grow.html'> * Extended documentation</a> and links to demos of this layout in the qooxdoo manual. */ qx.Class.define("qx.ui.layout.Grow", { extend : qx.ui.layout.Abstract, /* ***************************************************************************** MEMBERS ***************************************************************************** */ members : { /* --------------------------------------------------------------------------- LAYOUT INTERFACE --------------------------------------------------------------------------- */ // overridden verifyLayoutProperty : qx.core.Environment.select("qx.debug", { "true" : function(item, name, value) { this.assert(false, "The property '"+name+"' is not supported by the Grow layout!"); }, "false" : null }), // overridden renderLayout : function(availWidth, availHeight, padding) { var children = this._getLayoutChildren(); var child, size, width, height; // Render children for (var i=0, l=children.length; i<l; i++) { child = children[i]; size = child.getSizeHint(); width = availWidth; if (width < size.minWidth) { width = size.minWidth; } else if (width > size.maxWidth) { width = size.maxWidth; } height = availHeight; if (height < size.minHeight) { height = size.minHeight; } else if (height > size.maxHeight) { height = size.maxHeight; } child.renderLayout(padding.left, padding.top, width, height); } }, // overridden _computeSizeHint : function() { var children = this._getLayoutChildren(); var child, size; var neededWidth=0, neededHeight=0; var minWidth=0, minHeight=0; var maxWidth=Infinity, maxHeight=Infinity; // Iterate over children for (var i=0, l=children.length; i<l; i++) { child = children[i]; size = child.getSizeHint(); neededWidth = Math.max(neededWidth, size.width); neededHeight = Math.max(neededHeight, size.height); minWidth = Math.max(minWidth, size.minWidth); minHeight = Math.max(minHeight, size.minHeight); maxWidth = Math.min(maxWidth, size.maxWidth); maxHeight = Math.min(maxHeight, size.maxHeight); } // Return hint return { width : neededWidth, height : neededHeight, minWidth : minWidth, minHeight : minHeight, maxWidth : maxWidth, maxHeight : maxHeight }; } } });