void BoxLayout::draw(sf::RenderTarget& target, sf::RenderStates states) const { // Set the position states.transform.translate(getPosition()); // Draw the background if (m_backgroundColor != sf::Color::Transparent) { sf::RectangleShape background(getSize()); background.setFillColor(m_backgroundColor); target.draw(background, states); } // Draw the widgets drawWidgetContainer(&target, states); }
void ScrollablePanel::draw(sf::RenderTarget& target, sf::RenderStates states) const { states.transform.translate(getPosition()); const auto oldStates = states; // Draw the borders if (m_bordersCached != Borders{0}) { drawBorders(target, states, m_bordersCached, getSize(), m_borderColorCached); states.transform.translate({m_bordersCached.getLeft(), m_bordersCached.getTop()}); } // Draw the background const sf::Vector2f innerSize = {getSize().x - m_bordersCached.getLeft() - m_bordersCached.getRight(), getSize().y - m_bordersCached.getTop() - m_bordersCached.getBottom()}; drawRectangleShape(target, states, innerSize, m_backgroundColorCached); states.transform.translate(m_paddingCached.getLeft(), m_paddingCached.getTop()); sf::Vector2f contentSize = {innerSize.x - m_paddingCached.getLeft() - m_paddingCached.getRight(), innerSize.y - m_paddingCached.getTop() - m_paddingCached.getBottom()}; if (m_verticalScrollbar.getMaximum() > m_verticalScrollbar.getLowValue()) contentSize.x -= m_verticalScrollbar.getSize().x; if (m_horizontalScrollbar.getMaximum() > m_horizontalScrollbar.getLowValue()) contentSize.y -= m_horizontalScrollbar.getSize().y; // Draw the child widgets { const Clipping clipping{target, states, {}, contentSize}; states.transform.translate(-static_cast<float>(m_horizontalScrollbar.getValue()), -static_cast<float>(m_verticalScrollbar.getValue())); drawWidgetContainer(&target, states); } m_verticalScrollbar.draw(target, oldStates); m_horizontalScrollbar.draw(target, oldStates); }