void ModelSpinner::Layout() { Point size(GetSize()); Point activeArea(std::min(size.x, size.y)); Point activeOffset(std::max(0, (size.x-activeArea.x)/2), std::max(0, (size.y-activeArea.y)/2)); SetActiveArea(activeArea, activeOffset); }
void Face::Layout() { Point size(GetSize()); Point activeArea(std::min(size.x, size.y)); Point activeOffset(std::max(0, (size.x-activeArea.x)/2), std::max(0, (size.y-activeArea.y)/2)); SetActiveArea(activeArea, activeOffset); Widget *innerWidget = GetInnerWidget(); if (!innerWidget) return; SetWidgetDimensions(innerWidget, activeOffset, activeArea); innerWidget->Layout(); }
void Image::Layout() { Point size = GetSize(); Point activeArea; switch (m_stretchMode) { case STRETCH_MAX: activeArea = size; break; case STRETCH_PRESERVE_ASPECT: { float originalRatio = float(m_initialSize.x) / float(m_initialSize.y); float wantRatio = float(size.x) / float(size.y); // more room on X than Y, use full X, scale Y if (wantRatio < originalRatio) { activeArea.x = size.x; activeArea.y = float(size.x) / originalRatio; } // more room on Y than X, use full Y, scale X else { activeArea.x = float(size.y) * originalRatio; activeArea.y = size.y; } break; } default: assert(0); } Point activeOffset(std::max(0, (size.x-activeArea.x)/2), std::max(0, (size.y-activeArea.y)/2)); SetActiveArea(activeArea, activeOffset); }