void Panel::updateWidgetBounds(Ptr<Widget> const & widget) const { auto & widgetInfo = widgetInfos.at(widget); Vector2f panelSize = Vector2f {bounds.max - bounds.min + Vector2i {1, 1}}; Vector2f widgetSize = panelSize.scale(widgetInfo.sizeInPanel) + Vector2f {widgetInfo.sizeOffset}; Vector2f widgetPosition = panelSize.scale(widgetInfo.originInPanel) - widgetSize.scale(widgetInfo.originInWidget) + Vector2f {widgetInfo.originOffset}; widget->setBounds(Recti {Vector2i{widgetPosition}, Vector2i{widgetPosition + widgetSize - Vector2f{1, 1}}}); }