/** * Component layout for Tip/ToolTip/etc. components * @class Ext.layout.component.Tip * @extends Ext.layout.component.Dock * @private */ Ext.define('Ext.layout.component.Tip', { /* Begin Definitions */ alias: ['layout.tip'], extend: 'Ext.layout.component.Dock', /* End Definitions */ type: 'tip', onLayout: function(width, height) { var me = this, owner = me.owner, el = owner.el, minWidth, maxWidth, naturalWidth, constrainedWidth, xy = el.getXY(); // Position offscreen so the natural width is not affected by the viewport's right edge el.setXY([-9999,-9999]); // Calculate initial layout this.callParent(arguments); // Handle min/maxWidth for auto-width tips if (!Ext.isNumber(width)) { minWidth = owner.minWidth; maxWidth = owner.maxWidth; // IE6/7 in strict mode have a problem doing an autoWidth if (Ext.isStrict && (Ext.isIE6 || Ext.isIE7)) { constrainedWidth = me.doAutoWidth(); } else { naturalWidth = el.getWidth(); } if (naturalWidth < minWidth) { constrainedWidth = minWidth; } else if (naturalWidth > maxWidth) { constrainedWidth = maxWidth; } if (constrainedWidth) { this.callParent([constrainedWidth, height]); } } // Restore position el.setXY(xy); }, doAutoWidth: function(){ var me = this, owner = me.owner, body = owner.body, width = body.getTextWidth(); if (owner.header) { width = Math.max(width, owner.header.getWidth()); } if (!Ext.isDefined(me.frameWidth)) { me.frameWidth = owner.el.getWidth() - body.getWidth(); } width += me.frameWidth + body.getPadding('lr'); return width; } });