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 /include/cru/ui/render | |
parent | 01b97f7e819f88f01fa0b327dfa2c2aabfa81657 (diff) | |
download | cru-ce0ae2c3727f83f1943d528b006eec94ad80ece9.tar.gz cru-ce0ae2c3727f83f1943d528b006eec94ad80ece9.tar.bz2 cru-ce0ae2c3727f83f1943d528b006eec94ad80ece9.zip |
...
Diffstat (limited to 'include/cru/ui/render')
-rw-r--r-- | include/cru/ui/render/BorderRenderObject.hpp | 7 | ||||
-rw-r--r-- | include/cru/ui/render/MeasureRequirement.hpp | 24 | ||||
-rw-r--r-- | include/cru/ui/render/RenderObject.hpp | 6 | ||||
-rw-r--r-- | include/cru/ui/render/ScrollRenderObject.hpp | 4 |
4 files changed, 24 insertions, 17 deletions
diff --git a/include/cru/ui/render/BorderRenderObject.hpp b/include/cru/ui/render/BorderRenderObject.hpp index 45df89f9..b1fc4ba2 100644 --- a/include/cru/ui/render/BorderRenderObject.hpp +++ b/include/cru/ui/render/BorderRenderObject.hpp @@ -74,11 +74,10 @@ class BorderRenderObject : public RenderObject { void OnAfterLayout() override; - private: - RenderObject* GetChild() const { - return GetChildren().empty() ? nullptr : GetChildren()[0]; - } + Rect GetPaddingRect() const override; + Rect GetContentRect() const override; + private: void RecreateGeometry(); private: diff --git a/include/cru/ui/render/MeasureRequirement.hpp b/include/cru/ui/render/MeasureRequirement.hpp index 83de255d..661f40a9 100644 --- a/include/cru/ui/render/MeasureRequirement.hpp +++ b/include/cru/ui/render/MeasureRequirement.hpp @@ -6,11 +6,11 @@ namespace cru::ui::render { class MeasureLength { public: - struct tag_infinate_t {}; - constexpr static tag_infinate_t tag_infinate{}; + struct tag_not_specify_t {}; + constexpr static tag_not_specify_t tag_not_specify{}; constexpr MeasureLength() : MeasureLength(0) {} - constexpr MeasureLength(tag_infinate_t) : length_(-1) {} + constexpr MeasureLength(tag_not_specify_t) : length_(-1) {} constexpr MeasureLength(float length) : length_(length) { Expects(length >= 0); } @@ -25,11 +25,15 @@ class MeasureLength { ~MeasureLength() = default; - constexpr static MeasureLength Infinate() { - return MeasureLength{tag_infinate}; + constexpr static MeasureLength NotSpecify() { + return MeasureLength{tag_not_specify}; } - constexpr bool IsInfinate() const { return length_ < 0; } + // What not specify means depends on situation. + // For max size, it means no limit. + constexpr bool IsNotSpecify() const { return length_ < 0; } + + // If not specify max value of float is returned. constexpr float GetLength() const { return length_ < 0 ? std::numeric_limits<float>::max() : length_; } @@ -60,9 +64,9 @@ struct MeasureRequirement { : max_width(max_size.width), max_height(max_size.height) {} constexpr bool Satisfy(const Size& size) const { - if (!max_width.IsInfinate() && max_width.GetLength() < size.width) + if (!max_width.IsNotSpecify() && max_width.GetLength() < size.width) return false; - if (!max_height.IsInfinate() && max_height.GetLength() < size.height) + if (!max_height.IsNotSpecify() && max_height.GetLength() < size.height) return false; return true; } @@ -72,8 +76,8 @@ struct MeasureRequirement { } constexpr static MeasureRequirement Infinate() { - return MeasureRequirement{MeasureLength::Infinate(), - MeasureLength::Infinate()}; + return MeasureRequirement{MeasureLength::NotSpecify(), + MeasureLength::NotSpecify()}; } }; } // namespace cru::ui::render diff --git a/include/cru/ui/render/RenderObject.hpp b/include/cru/ui/render/RenderObject.hpp index 9de2cc27..72716d2e 100644 --- a/include/cru/ui/render/RenderObject.hpp +++ b/include/cru/ui/render/RenderObject.hpp @@ -84,6 +84,8 @@ class RenderObject : public Object { void SetChildMode(ChildMode mode) { child_mode_ = mode; } protected: + RenderObject* GetSingleChild() const; + virtual void OnParentChanged(RenderObject* old_parent, RenderObject* new_parent); @@ -114,8 +116,8 @@ class RenderObject : public Object { virtual void OnAfterLayout(); static void NotifyAfterLayoutRecursive(RenderObject* render_object); - Rect GetPaddingRect() const; - Rect GetContentRect() const; + virtual Rect GetPaddingRect() const; + virtual Rect GetContentRect() const; private: void SetParent(RenderObject* new_parent); diff --git a/include/cru/ui/render/ScrollRenderObject.hpp b/include/cru/ui/render/ScrollRenderObject.hpp index 924b8ca6..774501a1 100644 --- a/include/cru/ui/render/ScrollRenderObject.hpp +++ b/include/cru/ui/render/ScrollRenderObject.hpp @@ -17,8 +17,10 @@ class ScrollRenderObject : public RenderObject { RenderObject* HitTest(const Point& point) override; - Point GetScrollOffset() { return scroll_offset_; } + // Return the coerced scroll offset. + Point GetScrollOffset(); void SetScrollOffset(const Point& offset); + Point GetRawScrollOffset() const { return scroll_offset_; } protected: // Logic: |