aboutsummaryrefslogtreecommitdiff
path: root/src/ui/render/LayoutHelper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/render/LayoutHelper.cpp')
-rw-r--r--src/ui/render/LayoutHelper.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/ui/render/LayoutHelper.cpp b/src/ui/render/LayoutHelper.cpp
new file mode 100644
index 00000000..31cf5c08
--- /dev/null
+++ b/src/ui/render/LayoutHelper.cpp
@@ -0,0 +1,36 @@
+#include "cru/ui/render/LayoutHelper.hpp"
+
+#include "cru/common/Logger.hpp"
+
+namespace cru::ui::render {
+float CalculateAnchorByAlignment(Alignment alignment, float start_point,
+ float content_length, float child_length) {
+ switch (alignment) {
+ case FlexCrossAlignment::Start:
+ return start_point;
+ case FlexCrossAlignment::Center:
+ return start_point + (content_length - child_length) / 2.0f;
+ case FlexCrossAlignment::End:
+ return start_point + content_length - child_length;
+ default:
+ return start_point;
+ }
+}
+
+MeasureLength StackLayoutCalculateChildMaxLength(
+ MeasureLength parent_preferred_size, MeasureLength parent_max_size,
+ MeasureLength child_min_size, std::string_view exceeds_message) {
+ if (parent_max_size.GetLengthOrMax() < child_min_size.GetLengthOr0()) {
+ log::Warn(exceeds_message);
+ return parent_max_size;
+ }
+
+ if (parent_preferred_size.IsSpecified() &&
+ parent_preferred_size.GetLengthOrUndefined() >=
+ child_min_size.GetLengthOr0()) {
+ return parent_preferred_size;
+ } else {
+ return parent_max_size;
+ }
+}
+} // namespace cru::ui::render