aboutsummaryrefslogtreecommitdiff
path: root/src/ui/render/RenderObject.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-10-18 21:09:21 +0800
committercrupest <crupest@outlook.com>2020-10-18 21:09:21 +0800
commit5729a5aa1b443e3e25f3e14dee29636d3b31a6f8 (patch)
tree264efb8b0abdbbe1bcff813d9f10288f78cab905 /src/ui/render/RenderObject.cpp
parent58af3c346e7dd72be077bf5231bb7bf193591288 (diff)
downloadcru-5729a5aa1b443e3e25f3e14dee29636d3b31a6f8.tar.gz
cru-5729a5aa1b443e3e25f3e14dee29636d3b31a6f8.tar.bz2
cru-5729a5aa1b443e3e25f3e14dee29636d3b31a6f8.zip
...
Diffstat (limited to 'src/ui/render/RenderObject.cpp')
-rw-r--r--src/ui/render/RenderObject.cpp36
1 files changed, 36 insertions, 0 deletions
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()) {