diff options
-rw-r--r-- | demos/main/main.cpp | 5 | ||||
-rw-r--r-- | include/cru/platform/GraphBase.hpp | 4 | ||||
-rw-r--r-- | include/cru/ui/controls/FlexLayout.hpp | 3 | ||||
-rw-r--r-- | src/ui/controls/FlexLayout.cpp | 9 | ||||
-rw-r--r-- | src/ui/render/FlexLayoutRenderObject.cpp | 15 | ||||
-rw-r--r-- | src/ui/render/RenderObject.cpp | 4 |
6 files changed, 31 insertions, 9 deletions
diff --git a/demos/main/main.cpp b/demos/main/main.cpp index 3026baeb..10b43b0f 100644 --- a/demos/main/main.cpp +++ b/demos/main/main.cpp @@ -6,7 +6,6 @@ #include "cru/ui/Window.hpp" #include "cru/ui/controls/Button.hpp" #include "cru/ui/controls/FlexLayout.hpp" -#include "cru/ui/controls/StackLayout.hpp" #include "cru/ui/controls/TextBlock.hpp" #include "cru/ui/controls/TextBox.hpp" @@ -27,9 +26,11 @@ int main() { const auto window = Window::CreateOverlapped(); const auto flex_layout = FlexLayout::Create(); + flex_layout->SetFlexDirection(cru::ui::FlexDirection::Vertical); + flex_layout->SetContentMainAlign(cru::ui::FlexCrossAlignment::Center); + flex_layout->SetItemCrossAlign(cru::ui::FlexCrossAlignment::Center); window->SetChild(flex_layout); - flex_layout->SetFlexDirection(cru::ui::FlexDirection::Vertical); const auto text_block = TextBlock::Create(); text_block->SetText(u"Hello World from CruUI!"); diff --git a/include/cru/platform/GraphBase.hpp b/include/cru/platform/GraphBase.hpp index 571b36f7..6700765e 100644 --- a/include/cru/platform/GraphBase.hpp +++ b/include/cru/platform/GraphBase.hpp @@ -18,6 +18,10 @@ struct Point final { constexpr Point(const float x, const float y) : x(x), y(y) {} explicit constexpr Point(const Size& size); + std::u16string ToDebugString() const { + return fmt::format(u"({}, {})", ToUtf16String(x), ToUtf16String(y)); + } + float x = 0; float y = 0; }; diff --git a/include/cru/ui/controls/FlexLayout.hpp b/include/cru/ui/controls/FlexLayout.hpp index 87162569..0ffedba5 100644 --- a/include/cru/ui/controls/FlexLayout.hpp +++ b/include/cru/ui/controls/FlexLayout.hpp @@ -28,6 +28,9 @@ class FlexLayout : public LayoutControl { FlexDirection GetFlexDirection() const; void SetFlexDirection(FlexDirection direction); + FlexCrossAlignment GetItemCrossAlign() const; + void SetItemCrossAlign(FlexCrossAlignment alignment); + FlexChildLayoutData GetChildLayoutData(Control* control); void SetChildLayoutData(Control* control, FlexChildLayoutData data); diff --git a/src/ui/controls/FlexLayout.cpp b/src/ui/controls/FlexLayout.cpp index b7f350dc..05f6999f 100644 --- a/src/ui/controls/FlexLayout.cpp +++ b/src/ui/controls/FlexLayout.cpp @@ -60,6 +60,15 @@ void FlexLayout::SetFlexDirection(FlexDirection direction) { render_object_->SetFlexDirection(direction); } +FlexCrossAlignment FlexLayout::GetItemCrossAlign() const { + return render_object_->GetItemCrossAlign(); +} + +void FlexLayout::SetItemCrossAlign(FlexCrossAlignment alignment) { + if (alignment == GetItemCrossAlign()) return; + render_object_->SetItemCrossAlign(alignment); +} + void FlexLayout::OnAddChild(Control* child, const Index position) { render_object_->AddChild(child->GetRenderObject(), position); } diff --git a/src/ui/render/FlexLayoutRenderObject.cpp b/src/ui/render/FlexLayoutRenderObject.cpp index 1c39cc8f..36a2dcea 100644 --- a/src/ui/render/FlexLayoutRenderObject.cpp +++ b/src/ui/render/FlexLayoutRenderObject.cpp @@ -391,10 +391,11 @@ void FlexLayoutRenderObject::OnLayoutContent(const Rect& content_rect) { const auto cross_align = GetChildLayoutDataList()[i].cross_alignment.value_or( GetItemCrossAlign()); - child->Layout( - Point{content_rect.top + current_main_offset, - CalculateAnchorByAlignment(cross_align, content_rect.left, - content_rect.width, size.width)}); + child->Layout(Point{ + CalculateAnchorByAlignment(cross_align, content_rect.left, + content_rect.width, size.width), + content_rect.top + current_main_offset, + }); current_main_offset += size.height; } } else { @@ -406,9 +407,9 @@ void FlexLayoutRenderObject::OnLayoutContent(const Rect& content_rect) { GetChildLayoutDataList()[i].cross_alignment.value_or( GetItemCrossAlign()); child->Layout( - Point{content_rect.GetBottom() - current_main_offset, - CalculateAnchorByAlignment(cross_align, content_rect.left, - content_rect.width, size.width)}); + Point{CalculateAnchorByAlignment(cross_align, content_rect.left, + content_rect.width, size.width), + content_rect.GetBottom() - current_main_offset}); current_main_offset += size.height; } } diff --git a/src/ui/render/RenderObject.cpp b/src/ui/render/RenderObject.cpp index bc2228d3..57116f93 100644 --- a/src/ui/render/RenderObject.cpp +++ b/src/ui/render/RenderObject.cpp @@ -88,6 +88,10 @@ void RenderObject::Measure(const MeasureRequirement& requirement, } void RenderObject::Layout(const Point& offset) { +#if CRUUI_DEBUG_LAYOUT + log::Debug(u"{} Layout :\noffset: {}", this->GetDebugPathInTree(), + offset.ToDebugString()); +#endif offset_ = offset; OnLayoutCore(); } |