Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/windowing/StarFlowLayout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/windowing/StarFlowLayout.cpp')
-rw-r--r--source/windowing/StarFlowLayout.cpp36
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;
+}
+
+}