void Object::calculateLayout(const Object::Pointer & object) { hgeRect rect = getClientRect(); hgeRect newRect = object->getRect(); switch(object->alignHor) { case AlignManual: newRect.x1 = object->desiredX; newRect.x2 = object->desiredX + object->desiredWidth; break; case AlignCenter: newRect.x1 = (rect.x1 + rect.x2 - object->desiredWidth)/2; newRect.x2 = (rect.x1 + rect.x2 + object->desiredWidth)/2; break; case AlignExpand: newRect.x1 = rect.x1; newRect.x2 = rect.x2; break; case AlignMin: // left newRect.x1 = rect.x1; newRect.x2 = rect.x1 + object->desiredWidth; break; case AlignMax: // right newRect.x1 = rect.x2 - object->desiredWidth; newRect.x2 = rect.x2; case AlignCell: // TODO: implement break; } switch(object->alignVer) { case AlignManual: newRect.y1 = object->desiredY; newRect.y2 = object->desiredY + object->desiredHeight; break; case AlignCenter: newRect.y1 = (rect.y1 + rect.y2 - object->desiredHeight)/2; newRect.y2 = (rect.y1 + rect.y2 + object->desiredHeight)/2; break; case AlignExpand: newRect.y1 = rect.y1; newRect.y2 = rect.y2; break; case AlignMin: // top newRect.y1 = rect.y1; newRect.y2 = rect.y1 + object->desiredHeight; break; case AlignMax: // bottom newRect.y1 = rect.y2 - object->desiredHeight; newRect.y2 = rect.y2; break; case AlignCell: // TODO: implement break; } object->setRect(newRect); }