diff options
author | crupest <crupest@outlook.com> | 2022-03-12 21:43:40 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-03-12 21:43:40 +0800 |
commit | 3ce391f85443ce8bb47a7e0ff3bef0051cf4006e (patch) | |
tree | 59f8c4b4a6c66676d206bda5bfce3ff5020e4d26 /include/cru/ui/render | |
parent | f3b5009040a05e8efd15c385cacf5dd594ecf801 (diff) | |
download | cru-3ce391f85443ce8bb47a7e0ff3bef0051cf4006e.tar.gz cru-3ce391f85443ce8bb47a7e0ff3bef0051cf4006e.tar.bz2 cru-3ce391f85443ce8bb47a7e0ff3bef0051cf4006e.zip |
...
Diffstat (limited to 'include/cru/ui/render')
-rw-r--r-- | include/cru/ui/render/BorderRenderObject.h | 3 | ||||
-rw-r--r-- | include/cru/ui/render/CanvasRenderObject.h | 2 | ||||
-rw-r--r-- | include/cru/ui/render/GeometryRenderObject.h | 3 | ||||
-rw-r--r-- | include/cru/ui/render/RenderObject.h | 15 | ||||
-rw-r--r-- | include/cru/ui/render/ScrollRenderObject.h | 3 | ||||
-rw-r--r-- | include/cru/ui/render/TextRenderObject.h | 3 |
6 files changed, 27 insertions, 2 deletions
diff --git a/include/cru/ui/render/BorderRenderObject.h b/include/cru/ui/render/BorderRenderObject.h index 8de0eea3..9f3cff4a 100644 --- a/include/cru/ui/render/BorderRenderObject.h +++ b/include/cru/ui/render/BorderRenderObject.h @@ -2,6 +2,7 @@ #include "SingleChildRenderObject.h" #include "../style/ApplyBorderStyleInfo.h" +#include "cru/ui/render/RenderObject.h" namespace cru::ui::render { class CRU_UI_API BorderRenderObject : public SingleChildRenderObject { @@ -56,6 +57,8 @@ class CRU_UI_API BorderRenderObject : public SingleChildRenderObject { const MeasureSize& preferred_size) override; void OnLayoutContent(const Rect& content_rect) override; + Size OnMeasureContent1(const BoxConstraint& constraint) override; + void OnResize(const Size& new_size) override; private: diff --git a/include/cru/ui/render/CanvasRenderObject.h b/include/cru/ui/render/CanvasRenderObject.h index 2488dc91..f498c5ae 100644 --- a/include/cru/ui/render/CanvasRenderObject.h +++ b/include/cru/ui/render/CanvasRenderObject.h @@ -47,6 +47,8 @@ class CRU_UI_API CanvasRenderObject : public RenderObject { const MeasureSize& preferred_size) override; void OnLayoutContent(const Rect& content_rect) override; + Size OnMeasureContent1(const BoxConstraint& constraint) override; + private: Size desired_size_{}; diff --git a/include/cru/ui/render/GeometryRenderObject.h b/include/cru/ui/render/GeometryRenderObject.h index 6c5702ae..5d2ba1e0 100644 --- a/include/cru/ui/render/GeometryRenderObject.h +++ b/include/cru/ui/render/GeometryRenderObject.h @@ -2,6 +2,7 @@ #include "RenderObject.h" #include "cru/platform/graphics/Brush.h" #include "cru/platform/graphics/Geometry.h" +#include "cru/ui/render/MeasureRequirement.h" #include <optional> @@ -40,6 +41,8 @@ class GeometryRenderObject : public RenderObject { const MeasureSize& preferred_size) override; void OnLayoutContent(const Rect& content_rect) override; + Size OnMeasureContent1(const BoxConstraint& constraint) override; + private: std::shared_ptr<platform::graphics::IGeometry> geometry_ = nullptr; Rect view_port_{}; diff --git a/include/cru/ui/render/RenderObject.h b/include/cru/ui/render/RenderObject.h index 134fb935..8a0ba511 100644 --- a/include/cru/ui/render/RenderObject.h +++ b/include/cru/ui/render/RenderObject.h @@ -15,6 +15,16 @@ struct BoxConstraint { return max.width >= min.width && max.height >= min.height && min.width >= 0 && min.height >= 0; } + + constexpr bool Satisfy(const Size& size) const { + return size.width <= max.width && size.height <= max.height && + size.width >= min.width && size.height >= min.height; + } + + constexpr Size Coerce(const Size& size) const { + return Size{std::min(std::max(size.width, min.width), max.width), + std::min(std::max(size.height, min.height), max.height)}; + } }; /** @@ -96,9 +106,10 @@ class CRU_UI_API RenderObject : public Object { Size GetMinSize1() const { return min_size_; } void SetMinSize1(const Size& min_size); - Size GetMaxSize1() const { return max_size_; } void SetMaxSize1(const Size& max_size); + BoxConstraint CalculateMergedConstraint( + const BoxConstraint& constraint) const; // This method will merge requirement passed by argument and requirement of // the render object using MeasureRequirement::Merge and then call @@ -112,7 +123,7 @@ class CRU_UI_API RenderObject : public Object { // This will set offset of this render object and call OnLayoutCore. void Layout(const Point& offset); - void Measure1(const BoxConstraint& constraint); + Size Measure1(const BoxConstraint& constraint); virtual Thickness GetTotalSpaceThickness() const; virtual Thickness GetInnerSpaceThickness() const; diff --git a/include/cru/ui/render/ScrollRenderObject.h b/include/cru/ui/render/ScrollRenderObject.h index 53c64c6c..44656942 100644 --- a/include/cru/ui/render/ScrollRenderObject.h +++ b/include/cru/ui/render/ScrollRenderObject.h @@ -3,6 +3,7 @@ #include "ScrollBar.h" #include "cru/common/Event.h" +#include "cru/ui/render/RenderObject.h" #include <memory> #include <optional> @@ -80,6 +81,8 @@ class CRU_UI_API ScrollRenderObject : public SingleChildRenderObject { const MeasureSize& preferred_size) override; void OnLayoutContent(const Rect& content_rect) override; + Size OnMeasureContent1(const BoxConstraint& constraint) override; + void OnAttachedControlChanged(controls::Control* old_control, controls::Control* new_control) override; diff --git a/include/cru/ui/render/TextRenderObject.h b/include/cru/ui/render/TextRenderObject.h index 16aff29d..f12ac72f 100644 --- a/include/cru/ui/render/TextRenderObject.h +++ b/include/cru/ui/render/TextRenderObject.h @@ -101,6 +101,9 @@ class CRU_UI_API TextRenderObject : public RenderObject { // See remarks of this class. Size OnMeasureContent(const MeasureRequirement& requirement, const MeasureSize& preferred_size) override; + + Size OnMeasureContent1(const BoxConstraint& constraint) override; + void OnLayoutContent(const Rect& content_rect) override; private: |