aboutsummaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-12-02 19:38:25 +0800
committercrupest <crupest@outlook.com>2020-12-02 19:38:25 +0800
commitd7dca1be0dd0814e30fa63924a20af3d924e974c (patch)
tree0a5ea0b637dc8392eee67ec625a51cef09ec8731 /src/ui
parent145cfd5b82d76e0c937eceda707aa22427899943 (diff)
downloadcru-d7dca1be0dd0814e30fa63924a20af3d924e974c.tar.gz
cru-d7dca1be0dd0814e30fa63924a20af3d924e974c.tar.bz2
cru-d7dca1be0dd0814e30fa63924a20af3d924e974c.zip
...
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/CMakeLists.txt5
-rw-r--r--src/ui/controls/Button.cpp4
-rw-r--r--src/ui/render/BorderRenderObject.cpp18
3 files changed, 24 insertions, 3 deletions
diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt
index 85c87f5e..03297988 100644
--- a/src/ui/CMakeLists.txt
+++ b/src/ui/CMakeLists.txt
@@ -35,6 +35,7 @@ add_library(cru_ui STATIC
render/StackLayoutRenderObject.cpp
render/TextRenderObject.cpp
style/Condition.cpp
+ style/Styler.cpp
)
target_sources(cru_ui PUBLIC
${CRU_UI_INCLUDE_DIR}/Base.hpp
@@ -46,6 +47,8 @@ target_sources(cru_ui PUBLIC
${CRU_UI_INCLUDE_DIR}/controls/ContentControl.hpp
${CRU_UI_INCLUDE_DIR}/controls/Control.hpp
${CRU_UI_INCLUDE_DIR}/controls/FlexLayout.hpp
+ ${CRU_UI_INCLUDE_DIR}/controls/IBorderControl.hpp
+ ${CRU_UI_INCLUDE_DIR}/controls/IClickableControl.hpp
${CRU_UI_INCLUDE_DIR}/controls/LayoutControl.hpp
${CRU_UI_INCLUDE_DIR}/controls/NoChildControl.hpp
${CRU_UI_INCLUDE_DIR}/controls/Popup.hpp
@@ -71,6 +74,8 @@ target_sources(cru_ui PUBLIC
${CRU_UI_INCLUDE_DIR}/render/ScrollRenderObject.hpp
${CRU_UI_INCLUDE_DIR}/render/StackLayoutRenderObject.hpp
${CRU_UI_INCLUDE_DIR}/render/TextRenderObject.hpp
+ ${CRU_UI_INCLUDE_DIR}/style/ApplyBorderStyleInfo.hpp
${CRU_UI_INCLUDE_DIR}/style/Condition.hpp
+ ${CRU_UI_INCLUDE_DIR}/style/Styler.hpp
)
target_link_libraries(cru_ui PUBLIC cru_platform_gui)
diff --git a/src/ui/controls/Button.cpp b/src/ui/controls/Button.cpp
index 39c4b961..6f19e6b9 100644
--- a/src/ui/controls/Button.cpp
+++ b/src/ui/controls/Button.cpp
@@ -64,4 +64,8 @@ Button::~Button() = default;
render::RenderObject* Button::GetRenderObject() const {
return render_object_.get();
}
+
+void Button::ApplyBorderStyle(const style::ApplyBorderStyleInfo& style) {
+ render_object_->ApplyBorderStyle(style);
+}
} // namespace cru::ui::controls
diff --git a/src/ui/render/BorderRenderObject.cpp b/src/ui/render/BorderRenderObject.cpp
index 8e16d8cb..5abc7832 100644
--- a/src/ui/render/BorderRenderObject.cpp
+++ b/src/ui/render/BorderRenderObject.cpp
@@ -5,6 +5,7 @@
#include "cru/platform/graphics/Factory.hpp"
#include "cru/platform/graphics/Geometry.hpp"
#include "cru/platform/graphics/util/Painter.hpp"
+#include "cru/ui/style/ApplyBorderStyleInfo.hpp"
#include <algorithm>
@@ -25,6 +26,16 @@ void BorderRenderObject::SetBorderStyle(const BorderStyle& style) {
InvalidateLayout();
}
+void BorderRenderObject::ApplyBorderStyle(
+ const style::ApplyBorderStyleInfo& style) {
+ if (style.border_brush != nullptr) border_brush_ = style.border_brush;
+ if (style.border_thickness) border_thickness_ = *style.border_thickness;
+ if (style.border_radius) border_radius_ = *style.border_radius;
+ if (style.foreground_brush) foreground_brush_ = style.foreground_brush;
+ if (style.background_brush) background_brush_ = style.background_brush;
+ InvalidateLayout();
+}
+
RenderObject* BorderRenderObject::HitTest(const Point& point) {
if (const auto child = GetSingleChild()) {
auto offset = child->GetOffset();
@@ -109,9 +120,10 @@ Size BorderRenderObject::OnMeasureCore(const MeasureRequirement& requirement,
if (!requirement.max.height.IsNotSpecified()) {
const auto max_height = requirement.max.height.GetLengthOrMax();
if (coerced_space_size.height > max_height) {
- log::TagWarn(log_tag,
- u"(Measure) Vertical length of padding, border and margin is "
- u"bigger than required max length.");
+ log::TagWarn(
+ log_tag,
+ u"(Measure) Vertical length of padding, border and margin is "
+ u"bigger than required max length.");
coerced_space_size.height = max_height;
}
content_requirement.max.height = max_height - coerced_space_size.height;