aboutsummaryrefslogtreecommitdiff
path: root/src/ui/render/RenderObject.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-06-25 16:31:23 +0800
committercrupest <crupest@outlook.com>2020-06-25 16:31:23 +0800
commitce0ae2c3727f83f1943d528b006eec94ad80ece9 (patch)
tree809b8a755aabf60c04118b2b81c4de4b8fc6eb89 /src/ui/render/RenderObject.cpp
parent01b97f7e819f88f01fa0b327dfa2c2aabfa81657 (diff)
downloadcru-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.cpp23
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;