Author: czeidler Date: 2011-02-08 10:02:36 +0100 (Tue, 08 Feb 2011) New Revision: 40385 Changeset: http://dev.haiku-os.org/changeset/40385 Modified: haiku/trunk/src/libs/alm/Area.cpp Log: No pref constraints for sizes equal -1. This works better with items like glue. Modified: haiku/trunk/src/libs/alm/Area.cpp =================================================================== --- haiku/trunk/src/libs/alm/Area.cpp 2011-02-08 09:01:11 UTC (rev 40384) +++ haiku/trunk/src/libs/alm/Area.cpp 2011-02-08 09:02:36 UTC (rev 40385) @@ -532,7 +532,7 @@ -factor, area->Bottom(), kEQ, 0.0); } - +#include <stdio.h> void Area::InvalidateSizeConstraints() { @@ -626,21 +626,8 @@ fConstraints.AddItem(fMinContentWidth); fConstraints.AddItem(fMinContentHeight); -#if USE_SCALE_VARIABLE - fPreferredContentWidth = fLS->AddConstraint(-1.0, fLeft, 1.0, fRight, -1.0, - fScaleWidth, kEQ, 0, fShrinkPenalties.Width(), - fGrowPenalties.Width()); + _SetupPreferredConstraints(); - fPreferredContentHeight = fLS->AddConstraint(-1.0, fTop, 1.0, fBottom, -1.0, - fScaleHeight, kEQ, 0, fShrinkPenalties.Height(), - fGrowPenalties.Height()); -#else - fPreferredContentWidth = fLS->AddConstraint(-1.0, fLeft, 1.0, fRight, kEQ, - 0, fShrinkPenalties.Width(), fGrowPenalties.Width()); - fPreferredContentHeight = fLS->AddConstraint(-1.0, fTop, 1.0, fBottom, kEQ, - 0, fShrinkPenalties.Height(), fGrowPenalties.Height()); -#endif - BSize preferredSize = fLayoutItem->PreferredSize(); _UpdatePreferredWidthConstraint(preferredSize); _UpdatePreferredHeightConstraint(preferredSize); @@ -746,9 +733,18 @@ void Area::_UpdatePreferredWidthConstraint(BSize& preferred) { + if (preferred.width == -1) { + delete fPreferredContentWidth; + fPreferredContentWidth = NULL; + return; + } + float width = 0; if (preferred.width > 0) - width = preferred.Width() + LeftInset() + RightInset(); + width = preferred.width + LeftInset() + RightInset(); + + _SetupPreferredConstraints(); + #if USE_SCALE_VARIABLE fPreferredContentWidth->SetLeftSide(-1.0, fLeft, 1.0, fRight, -width, fScaleWidth); @@ -761,9 +757,17 @@ void Area::_UpdatePreferredHeightConstraint(BSize& preferred) { + if (preferred.height == -1) { + delete fPreferredContentHeight; + fPreferredContentHeight = NULL; + return; + } + float height = 0; if (preferred.height > 0) - height = preferred.Height() + TopInset() + BottomInset(); + height = preferred.height + TopInset() + BottomInset(); + + _SetupPreferredConstraints(); #if USE_SCALE_VARIABLE fPreferredContentHeight->SetLeftSide(-1.0, fTop, 1.0, fBottom, -height, fScaleHeight); @@ -771,3 +775,30 @@ fPreferredContentHeight->SetRightSide(height); #endif } + + +void +Area::_SetupPreferredConstraints() +{ +#if USE_SCALE_VARIABLE + if (!fPreferredContentWidth) { + fPreferredContentWidth = fLS->AddConstraint(-1.0, fLeft, 1.0, fRight, + -1.0, fScaleWidth, kEQ, 0, fShrinkPenalties.Width(), + fGrowPenalties.Width()); + } + if (!fPreferredContentHeight) { + fPreferredContentHeight = fLS->AddConstraint(-1.0, fTop, 1.0, fBottom, + -1.0, fScaleHeight, kEQ, 0, fShrinkPenalties.Height(), + fGrowPenalties.Height()); + } +#else + if (!fPreferredContentWidth) { + fPreferredContentWidth = fLS->AddConstraint(-1.0, fLeft, 1.0, fRight, + kEQ, 0, fShrinkPenalties.Width(), fGrowPenalties.Width()); + } + if (!fPreferredContentHeight) { + fPreferredContentHeight = fLS->AddConstraint(-1.0, fTop, 1.0, fBottom, + kEQ, 0, fShrinkPenalties.Height(), fGrowPenalties.Height()); + } +#endif +}