diff options
Diffstat (limited to 'source/windowing/StarFlowLayout.cpp')
-rw-r--r-- | source/windowing/StarFlowLayout.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/source/windowing/StarFlowLayout.cpp b/source/windowing/StarFlowLayout.cpp new file mode 100644 index 0000000..714d159 --- /dev/null +++ b/source/windowing/StarFlowLayout.cpp @@ -0,0 +1,36 @@ +#include "StarFlowLayout.hpp" + +namespace Star { + +FlowLayout::FlowLayout() : m_wrap(true) {} + +void FlowLayout::update() { + Layout::update(); + + int consumedWidth = 0; + int rowHeight = 0; + Vec2I currentOffset = {0, size()[1]}; + for (auto child : m_members) { + if (m_wrap && consumedWidth + child->size()[0] > size()[0] && consumedWidth != 0) { // wrapping + currentOffset[0] = 0; + consumedWidth = 0; + currentOffset[1] -= rowHeight + m_spacing[1]; + } + if (rowHeight < child->size()[1]) { + rowHeight = child->size()[1]; + } + child->setPosition(Vec2I{currentOffset[0], currentOffset[1] - child->size()[1]}); + consumedWidth += child->size()[0] + m_spacing[0]; + currentOffset[0] = consumedWidth; + } +} + +void FlowLayout::setSpacing(Vec2I const& spacing) { + m_spacing = spacing; +} + +void FlowLayout::setWrapping(bool wrap) { + m_wrap = wrap; +} + +} |