From 592f3f3f25f00232234399f4c5f51318a3fa49d2 Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 29 Jan 2022 22:09:29 +0800 Subject: ... --- include/cru/ui/Base.hpp | 6 ++++-- include/cru/ui/controls/StackLayout.hpp | 4 ++++ include/cru/ui/render/StackLayoutRenderObject.hpp | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) (limited to 'include/cru/ui') diff --git a/include/cru/ui/Base.hpp b/include/cru/ui/Base.hpp index db360c07..e99c956f 100644 --- a/include/cru/ui/Base.hpp +++ b/include/cru/ui/Base.hpp @@ -62,12 +62,14 @@ namespace internal { constexpr int align_start = 0; constexpr int align_end = align_start + 1; constexpr int align_center = align_end + 1; +constexpr int align_stretch = align_center + 1; } // namespace internal enum class Alignment { Start = internal::align_start, End = internal::align_end, Center = internal::align_center, + Stretch = internal::align_stretch }; struct CornerRadius { @@ -144,7 +146,7 @@ struct FlexChildLayoutData { }; struct StackChildLayoutData { - Alignment horizontal = Alignment::Start; - Alignment vertical = Alignment::Start; + std::optional horizontal; + std::optional vertical; }; } // namespace cru::ui diff --git a/include/cru/ui/controls/StackLayout.hpp b/include/cru/ui/controls/StackLayout.hpp index 657cadc6..5d90dfda 100644 --- a/include/cru/ui/controls/StackLayout.hpp +++ b/include/cru/ui/controls/StackLayout.hpp @@ -1,5 +1,6 @@ #pragma once #include "LayoutControl.hpp" +#include "cru/ui/Base.hpp" namespace cru::ui::controls { class CRU_UI_API StackLayout : public LayoutControl { @@ -21,6 +22,9 @@ class CRU_UI_API StackLayout : public LayoutControl { render::RenderObject* GetRenderObject() const override; + const StackChildLayoutData& GetChildLayoutData(Index position); + void SetChildLayoutData(Index position, StackChildLayoutData data); + private: std::shared_ptr render_object_; }; diff --git a/include/cru/ui/render/StackLayoutRenderObject.hpp b/include/cru/ui/render/StackLayoutRenderObject.hpp index b7b1502c..2f832e55 100644 --- a/include/cru/ui/render/StackLayoutRenderObject.hpp +++ b/include/cru/ui/render/StackLayoutRenderObject.hpp @@ -1,5 +1,6 @@ #pragma once #include "LayoutRenderObject.hpp" +#include "cru/ui/Base.hpp" namespace cru::ui::render { // Measure Logic: @@ -35,9 +36,22 @@ class CRU_UI_API StackLayoutRenderObject return u"StackLayoutRenderObject"; } + Alignment GetDefaultHorizontalAlignment() const { + return default_vertical_alignment_; + } + void SetDefaultHorizontalAlignment(Alignment alignment); + Alignment GetDefaultVerticalAlignment() { + return default_horizontal_alignment_; + } + void SetDefaultVertialAlignment(Alignment alignment); + protected: Size OnMeasureContent(const MeasureRequirement& requirement, const MeasureSize& preferred_size) override; void OnLayoutContent(const Rect& content_rect) override; + + private: + Alignment default_horizontal_alignment_ = Alignment::Start; + Alignment default_vertical_alignment_ = Alignment::Start; }; } // namespace cru::ui::render -- cgit v1.2.3