aboutsummaryrefslogtreecommitdiff
path: root/include/cru/ui
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/ui')
-rw-r--r--include/cru/ui/render/BorderRenderObject.h3
-rw-r--r--include/cru/ui/render/CanvasRenderObject.h2
-rw-r--r--include/cru/ui/render/GeometryRenderObject.h3
-rw-r--r--include/cru/ui/render/RenderObject.h15
-rw-r--r--include/cru/ui/render/ScrollRenderObject.h3
-rw-r--r--include/cru/ui/render/TextRenderObject.h3
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: