diff options
author | crupest <crupest@outlook.com> | 2020-06-25 16:31:23 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-06-25 16:31:23 +0800 |
commit | ce0ae2c3727f83f1943d528b006eec94ad80ece9 (patch) | |
tree | 809b8a755aabf60c04118b2b81c4de4b8fc6eb89 /src/ui/render/RenderObject.cpp | |
parent | 01b97f7e819f88f01fa0b327dfa2c2aabfa81657 (diff) | |
download | cru-ce0ae2c3727f83f1943d528b006eec94ad80ece9.tar.gz cru-ce0ae2c3727f83f1943d528b006eec94ad80ece9.tar.bz2 cru-ce0ae2c3727f83f1943d528b006eec94ad80ece9.zip |
...
Diffstat (limited to 'src/ui/render/RenderObject.cpp')
-rw-r--r-- | src/ui/render/RenderObject.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/ui/render/RenderObject.cpp b/src/ui/render/RenderObject.cpp index cdc3032f..abd5e1c4 100644 --- a/src/ui/render/RenderObject.cpp +++ b/src/ui/render/RenderObject.cpp @@ -73,6 +73,15 @@ void RenderObject::Layout(const Rect& rect) { OnLayoutCore(rect.GetSize()); } +RenderObject* RenderObject::GetSingleChild() const { + Expects(child_mode_ == ChildMode::Single); + const auto& children = GetChildren(); + if (children.empty()) + return nullptr; + else + return children.front(); +} + void RenderObject::OnParentChanged(RenderObject* old_parent, RenderObject* new_parent) { CRU_UNUSED(old_parent) @@ -104,7 +113,7 @@ Size RenderObject::OnMeasureCore(const MeasureRequirement& requirement) { MeasureRequirement content_requirement = requirement; - if (!requirement.max_width.IsInfinate()) { + if (!requirement.max_width.IsNotSpecify()) { const auto max_width = requirement.max_width.GetLength(); if (coerced_space_size.width > max_width) { log::Warn( @@ -115,7 +124,7 @@ Size RenderObject::OnMeasureCore(const MeasureRequirement& requirement) { content_requirement.max_width = max_width - coerced_space_size.width; } - if (!requirement.max_height.IsInfinate()) { + if (!requirement.max_height.IsNotSpecify()) { const auto max_height = requirement.max_height.GetLength(); if (coerced_space_size.height > max_height) { log::Warn( @@ -166,17 +175,23 @@ void RenderObject::OnLayoutCore(const Size& size) { void RenderObject::OnAfterLayout() {} Rect RenderObject::GetPaddingRect() const { - Rect rect{Point{}, GetSize()}; + const auto size = GetSize(); + Rect rect{Point{}, size}; rect = rect.Shrink(GetMargin()); + rect.left = std::min(rect.left, size.width); + rect.top = std::min(rect.top, size.height); rect.width = std::max(rect.width, 0.0f); rect.height = std::max(rect.height, 0.0f); return rect; } Rect RenderObject::GetContentRect() const { - Rect rect{Point{}, GetSize()}; + const auto size = GetSize(); + Rect rect{Point{}, size}; rect = rect.Shrink(GetMargin()); rect = rect.Shrink(GetPadding()); + rect.left = std::min(rect.left, size.width); + rect.top = std::min(rect.top, size.height); rect.width = std::max(rect.width, 0.0f); rect.height = std::max(rect.height, 0.0f); return rect; |