34 return aui::layout_direction::getAxisValue(direction, v);
43 return aui::layout_direction::getAxisValue(direction, v);
52 return aui::layout_direction::getPerpendicularAxisValue(direction, v);
61 return aui::layout_direction::getPerpendicularAxisValue(direction, v);
64 static void onResize(glm::ivec2 paddedPosition, glm::ivec2 paddedSize, ranges::range
auto&& views,
int spacing) {
69 int availableSpaceForExpandingViews =
getAxisValue(paddedSize) + spacing;
72 for (
const auto& view : views) {
73 view->ensureAssUpdated();
74 if (!(view->getVisibility() & Visibility::FLAG_CONSUME_SPACE))
79 if (expanding == 0 ||
getAxisValue(view->getFixedSize()) != 0)
81 availableSpaceForExpandingViews -= minSpace +
getAxisValue(view->getMargin().occupiedSize()) + spacing;
83 availableSpaceForExpandingViews -=
getAxisValue(view->getMargin().occupiedSize()) + spacing;
86 bool containsExpandingItems = sum > 0;
88 sum = glm::max(sum, 1);
91 if (containsExpandingItems) {
92 for (
const auto& view : views) {
93 if (!(view->getVisibility() & Visibility::FLAG_CONSUME_SPACE))
98 if (expanding == 0 ||
getAxisValue(view->getFixedSize()) != 0)
102 int spaceAcquiredByExpanding = availableSpaceForExpandingViews * expanding / sum;
104 auto viewMaxSize = view->getMaxSize();
105 int validatedSpace = glm::clamp(spaceAcquiredByExpanding, viewMinSize,
getAxisValue(viewMaxSize));
106 availableSpaceForExpandingViews += (spaceAcquiredByExpanding - validatedSpace) * sum / expanding;
112 const auto& last = views.back();
113 for (
const auto& view : views) {
114 if (!(view->getVisibility() & Visibility::FLAG_CONSUME_SPACE))
116 auto margins = view->getMargin();
117 auto viewMaxSize = view->getMaxSize();
119 int viewPosOurAxis = posOurAxis +
getAxisValue(margins.leftTop());
122 if (containsExpandingItems && view == last) {
124 int viewSizeOurAxis =
127 int viewSizePerpAxis =
getPerpAxisValue(paddedSize - margins.occupiedSize());
130 getAxisValue(glm::ivec2 { viewPosOurAxis, viewPosPerpAxis }),
131 getAxisValue(glm::ivec2 { viewPosPerpAxis, viewPosOurAxis }),
132 getAxisValue(glm::ivec2 { viewSizeOurAxis, viewSizePerpAxis }),
133 getAxisValue(glm::ivec2 { viewSizePerpAxis, viewSizeOurAxis }));
137 int viewSizeOurAxis =
138 glm::clamp(availableSpaceForExpandingViews * expanding / sum, viewMinSize,
getAxisValue(viewMaxSize));
139 int viewSizePerpAxis =
143 getAxisValue(glm::ivec2 { viewPosOurAxis, viewPosPerpAxis }),
144 getAxisValue(glm::ivec2 { viewPosPerpAxis, viewPosOurAxis }),
145 getAxisValue(glm::ivec2 { viewSizeOurAxis, viewSizePerpAxis }),
146 getAxisValue(glm::ivec2 { viewSizePerpAxis, viewSizeOurAxis }));
148 posOurAxis +=
getAxisValue(view->getSize() + margins.occupiedSize()) + spacing;
149 availableSpaceForExpandingViews += viewSizeOurAxis -
getAxisValue(view->getSize());
154 static int getMinimumWidth(ranges::range
auto&& views,
int spacing) {
155 if constexpr (direction == ALayoutDirection::HORIZONTAL) {
156 return getMinimumSizeOurAxis(views, spacing);
158 if constexpr (direction == ALayoutDirection::VERTICAL) {
159 return getMinimumSizePerpAxis(views, spacing);
163 static int getMinimumHeight(ranges::range
auto&& views,
int spacing) {
164 if constexpr (direction == ALayoutDirection::VERTICAL) {
165 return getMinimumSizeOurAxis(views, spacing);
167 if constexpr (direction == ALayoutDirection::HORIZONTAL) {
168 return getMinimumSizePerpAxis(views, spacing);
173 static int getMinimumSizeOurAxis(ranges::range
auto&& views,
int spacing) {
174 int minSize = -spacing;
176 for (
const auto& v : views) {
177 if (!(v->getVisibility() & Visibility::FLAG_CONSUME_SPACE))
179 minSize +=
getAxisValue(v->getMinimumSize() + v->getMargin().occupiedSize()) + spacing;
182 return glm::max(minSize, 0);
185 static int getMinimumSizePerpAxis(ranges::range
auto&& views,
int spacing) {
187 for (
const auto& v : views) {
188 if (!(v->getVisibility() & Visibility::FLAG_CONSUME_SPACE))
190 auto h =
getPerpAxisValue(v->getMinimumSize() + +v->getMargin().occupiedSize());
191 minSize = glm::max(minSize,
int(h));