Make BALMLayout respect its position when nested.

This commit is contained in:
Alex Wilson 2012-01-20 11:02:54 +13:00
parent 51b5b66b01
commit f6db102e47
3 changed files with 7 additions and 6 deletions

View File

@ -106,7 +106,7 @@ private:
Row* row, Column* column,
RowColumnManager* manager);
void _DoLayout();
void _DoLayout(const BPoint& offset);
void _UpdateMinSizeConstraint(BSize min);
void _UpdateMaxSizeConstraint(BSize max);

View File

@ -794,14 +794,15 @@ BALMLayout::DoLayout()
// Enforced absolute positions of Right and Bottom
BRect area(LayoutArea());
Right()->SetRange(area.right, area.right);
Bottom()->SetRange(area.bottom, area.bottom);
BSize size(area.Size());
Right()->SetRange(size.width, size.width);
Bottom()->SetRange(size.height, size.height);
_TrySolve();
// set the calculated positions and sizes for every area
for (int32 i = 0; i < CountItems(); i++)
AreaFor(ItemAt(i))->_DoLayout();
AreaFor(ItemAt(i))->_DoLayout(area.LeftTop());
}

View File

@ -565,7 +565,7 @@ Area::_Init(LinearSpec* ls, Row* row, Column* column, RowColumnManager* manager)
* Perform layout on the area.
*/
void
Area::_DoLayout()
Area::_DoLayout(const BPoint& offset)
{
// check if if we are initialized
if (!fLeft)
@ -577,7 +577,7 @@ Area::_DoLayout()
areaFrame.top += TopInset();
areaFrame.bottom -= BottomInset();
fLayoutItem->AlignInFrame(areaFrame);
fLayoutItem->AlignInFrame(areaFrame.OffsetBySelf(offset));
}