void WindowArea::_UpdateConstraintValues() { SATWindow* topWindow = TopWindow(); if (topWindow == NULL) return; int32 minWidth, maxWidth; int32 minHeight, maxHeight; SATWindow* window = fWindowList.ItemAt(0); window->GetSizeLimits(&minWidth, &maxWidth, &minHeight, &maxHeight); for (int32 i = 1; i < fWindowList.CountItems(); i++) { window = fWindowList.ItemAt(i); // size limit constraints int32 minW, maxW; int32 minH, maxH; window->GetSizeLimits(&minW, &maxW, &minH, &maxH); if (minWidth < minW) minWidth = minW; if (minHeight < minH) minHeight = minH; if (maxWidth < maxW) maxWidth = maxW; if (maxHeight < maxH) maxHeight = maxH; } // the current solver don't like big values const int32 kMaxSolverValue = 5000; if (minWidth > kMaxSolverValue) minWidth = kMaxSolverValue; if (minHeight > kMaxSolverValue) minHeight = kMaxSolverValue; if (maxWidth > kMaxSolverValue) maxWidth = kMaxSolverValue; if (maxHeight > kMaxSolverValue) maxHeight = kMaxSolverValue; topWindow->AddDecorator(&minWidth, &maxWidth, &minHeight, &maxHeight); fMinWidthConstraint->SetRightSide(minWidth); fMinHeightConstraint->SetRightSide(minHeight); fMaxWidthConstraint->SetRightSide(maxWidth); fMaxHeightConstraint->SetRightSide(maxHeight); BRect frame = topWindow->CompleteWindowFrame(); fWidthConstraint->SetRightSide(frame.Width()); fHeightConstraint->SetRightSide(frame.Height()); }