diff options
author | crupest <crupest@outlook.com> | 2020-10-18 21:09:21 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-10-18 21:09:21 +0800 |
commit | 5729a5aa1b443e3e25f3e14dee29636d3b31a6f8 (patch) | |
tree | 264efb8b0abdbbe1bcff813d9f10288f78cab905 /src/ui/render | |
parent | 58af3c346e7dd72be077bf5231bb7bf193591288 (diff) | |
download | cru-5729a5aa1b443e3e25f3e14dee29636d3b31a6f8.tar.gz cru-5729a5aa1b443e3e25f3e14dee29636d3b31a6f8.tar.bz2 cru-5729a5aa1b443e3e25f3e14dee29636d3b31a6f8.zip |
...
Diffstat (limited to 'src/ui/render')
-rw-r--r-- | src/ui/render/FlexLayoutRenderObject.cpp | 6 | ||||
-rw-r--r-- | src/ui/render/RenderObject.cpp | 36 | ||||
-rw-r--r-- | src/ui/render/WindowRenderObject.cpp | 4 |
3 files changed, 45 insertions, 1 deletions
diff --git a/src/ui/render/FlexLayoutRenderObject.cpp b/src/ui/render/FlexLayoutRenderObject.cpp index ade230b5..1c39cc8f 100644 --- a/src/ui/render/FlexLayoutRenderObject.cpp +++ b/src/ui/render/FlexLayoutRenderObject.cpp @@ -10,6 +10,10 @@ namespace cru::ui::render { +std::u16string_view FlexLayoutRenderObject::GetName() const { + return u"FlexLayoutRenderObject"; +} + struct tag_horizontal_t {}; struct tag_vertical_t {}; @@ -64,7 +68,7 @@ template <typename TSize> constexpr TSize CreateTSize(decltype(std::declval<TSize>().width) main, decltype(std::declval<TSize>().height) cross, tag_vertical_t) { - return TSize{main, cross}; + return TSize{cross, main}; } enum class FlexLayoutAdjustType { None, Expand, Shrink }; diff --git a/src/ui/render/RenderObject.cpp b/src/ui/render/RenderObject.cpp index 30433868..bc2228d3 100644 --- a/src/ui/render/RenderObject.cpp +++ b/src/ui/render/RenderObject.cpp @@ -5,6 +5,9 @@ #include "cru/ui/UiHost.hpp" #include <algorithm> +#include <string> +#include <string_view> +#include <vector> namespace cru::ui::render { void RenderObject::AddChild(RenderObject* render_object, const Index position) { @@ -66,7 +69,19 @@ void RenderObject::Measure(const MeasureRequirement& requirement, MeasureSize merged_preferred_size = preferred_size.OverrideBy(preferred_size_); +#if CRUUI_DEBUG_LAYOUT + log::Debug(u"{} Measure begins :\nrequirement: {}\npreferred size: {}", + this->GetDebugPathInTree(), requirement.ToDebugString(), + preferred_size.ToDebugString()); +#endif + size_ = OnMeasureCore(merged_requirement, merged_preferred_size); + +#if CRUUI_DEBUG_LAYOUT + log::Debug(u"{} Measure ends :\nresult size: {}", this->GetDebugPathInTree(), + size_.ToDebugString()); +#endif + Ensures(size_.width >= 0); Ensures(size_.height >= 0); Ensures(requirement.Satisfy(size_)); @@ -256,6 +271,27 @@ void RenderObject::InvalidatePaint() { if (ui_host_ != nullptr) ui_host_->InvalidatePaint(); } +constexpr std::u16string_view kUnamedName(u"UNNAMED"); + +std::u16string_view RenderObject::GetName() const { return kUnamedName; } + +std::u16string RenderObject::GetDebugPathInTree() const { + std::vector<std::u16string_view> chain; + const RenderObject* parent = this; + while (parent != nullptr) { + chain.push_back(parent->GetName()); + parent = parent->GetParent(); + } + + std::u16string result(chain.back()); + for (auto iter = chain.crbegin() + 1; iter != chain.crend(); ++iter) { + result += u" -> "; + result += *iter; + } + + return result; +} + void RenderObject::NotifyAfterLayoutRecursive(RenderObject* render_object) { render_object->OnAfterLayout(); for (const auto o : render_object->GetChildren()) { diff --git a/src/ui/render/WindowRenderObject.cpp b/src/ui/render/WindowRenderObject.cpp index 4adf559e..a136c1e9 100644 --- a/src/ui/render/WindowRenderObject.cpp +++ b/src/ui/render/WindowRenderObject.cpp @@ -24,6 +24,10 @@ RenderObject* WindowRenderObject::HitTest(const Point& point) { return Rect{Point{}, GetSize()}.IsPointInside(point) ? this : nullptr; } +std::u16string_view WindowRenderObject::GetName() const { + return u"WindowRenderObject"; +} + Size WindowRenderObject::OnMeasureContent(const MeasureRequirement& requirement, const MeasureSize& preferred_size) { if (const auto child = GetChild()) { |