/**
* Component layout for components which maintain an inner body element which must be resized
* to synchronize with the Component size.
* @private
*/
Ext.define('Ext.layout.component.Body', {
extend: 'Ext.layout.component.Auto',
alias: 'layout.body',
type: 'body',
beginLayout: function(ownerContext) {
this.callParent(arguments);
ownerContext.bodyContext = ownerContext.getEl('body');
},
beginLayoutCycle: function(ownerContext, firstCycle) {
var me = this,
lastWidthModel = me.lastWidthModel,
lastHeightModel = me.lastHeightModel,
body = me.owner.body;
me.callParent(arguments);
if (lastWidthModel && lastWidthModel.fixed && ownerContext.widthModel.shrinkWrap) {
body.setWidth(null);
}
if (lastHeightModel && lastHeightModel.fixed && ownerContext.heightModel.shrinkWrap) {
body.setHeight(null);
}
},
// Padding is exciting here because we have 2 el's: owner.el and owner.body. Content
// size always includes the padding of the targetEl, which should be owner.body. But
// it is common to have padding on owner.el also (such as a panel header), so we need
// to do some more padding work if targetContext is not owner.el. The base class has
// already handled the ownerContext's frameInfo (border+framing) so all that is left
// is padding.
calculateOwnerHeightFromContentHeight: function(ownerContext, contentHeight) {
var height = this.callParent(arguments);
if (ownerContext.targetContext !== ownerContext) {
height += ownerContext.getPaddingInfo().height;
}
return height;
},
calculateOwnerWidthFromContentWidth: function(ownerContext, contentWidth) {
var width = this.callParent(arguments);
if (ownerContext.targetContext !== ownerContext) {
width += ownerContext.getPaddingInfo().width;
}
return width;
},
measureContentWidth: function(ownerContext) {
return ownerContext.bodyContext.setWidth(ownerContext.bodyContext.el.dom.offsetWidth,
false);
},
measureContentHeight: function(ownerContext) {
return ownerContext.bodyContext.setHeight(ownerContext.bodyContext.el.dom.offsetHeight,
false);
},
publishInnerHeight: function(ownerContext, height) {
var innerHeight = height - ownerContext.getFrameInfo().height,
targetContext = ownerContext.targetContext;
if (targetContext !== ownerContext) {
innerHeight -= ownerContext.getPaddingInfo().height;
}
// return the value here, it may get used in a subclass
return ownerContext.bodyContext.setHeight(innerHeight, !ownerContext.heightModel.natural);
},
publishInnerWidth: function(ownerContext, width) {
var innerWidth = width - ownerContext.getFrameInfo().width,
targetContext = ownerContext.targetContext;
if (targetContext !== ownerContext) {
innerWidth -= ownerContext.getPaddingInfo().width;
}
ownerContext.bodyContext.setWidth(innerWidth, !ownerContext.widthModel.natural);
}
});