From e80f44385dee8636b747848ecb6193c41a99d89c Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 24 Feb 2022 16:35:08 +0800 Subject: ... --- assets/cru/ui/DefaultResources.xml | 25 +++++++++++++++++++++++++ include/cru/ui/mapper/style/StyleRuleMapper.h | 2 ++ src/ui/controls/CheckBox.cpp | 6 ++++++ src/ui/mapper/style/StyleRuleMapper.cpp | 6 ++++++ src/ui/render/BorderRenderObject.cpp | 2 +- src/ui/style/StyleRuleSet.cpp | 7 +++---- 6 files changed, 43 insertions(+), 5 deletions(-) diff --git a/assets/cru/ui/DefaultResources.xml b/assets/cru/ui/DefaultResources.xml index 89f2b4a5..26f6e929 100644 --- a/assets/cru/ui/DefaultResources.xml +++ b/assets/cru/ui/DefaultResources.xml @@ -160,6 +160,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/include/cru/ui/mapper/style/StyleRuleMapper.h b/include/cru/ui/mapper/style/StyleRuleMapper.h index cba4872c..2d6d8d94 100644 --- a/include/cru/ui/mapper/style/StyleRuleMapper.h +++ b/include/cru/ui/mapper/style/StyleRuleMapper.h @@ -1,11 +1,13 @@ #pragma once #include "../Mapper.h" +#include "cru/common/Base.h" #include "cru/common/ClonablePtr.h" #include "cru/ui/style/StyleRule.h" #include "cru/xml/XmlNode.h" namespace cru::ui::mapper::style { class CRU_UI_API StyleRuleMapper : public BasicPtrMapper { + CRU_DEFINE_CLASS_LOG_TAG(u"StyleRuleMapper") public: CRU_DEFAULT_CONSTRUCTOR_DESTRUCTOR(StyleRuleMapper) diff --git a/src/ui/controls/CheckBox.cpp b/src/ui/controls/CheckBox.cpp index cace3dbf..a28c4633 100644 --- a/src/ui/controls/CheckBox.cpp +++ b/src/ui/controls/CheckBox.cpp @@ -1,4 +1,5 @@ #include "cru/ui/controls/CheckBox.h" +#include "cru/ui/ThemeManager.h" #include "cru/ui/helper/ClickDetector.h" #include "cru/ui/render/BorderRenderObject.h" @@ -8,6 +9,11 @@ CheckBox::CheckBox() click_detector_(this) { container_render_object_->SetAttachedControl(this); + container_render_object_->SetBorderEnabled(true); + auto default_checkbox_style = + ThemeManager::GetInstance()->GetResourceStyleRuleSet(u"checkbox.style"); + GetStyleRuleSet()->SetParent(std::move(default_checkbox_style)); + click_detector_.ClickEvent()->AddHandler( [this](const helper::ClickEventArgs&) { Toggle(); }); } diff --git a/src/ui/mapper/style/StyleRuleMapper.cpp b/src/ui/mapper/style/StyleRuleMapper.cpp index 1ca45a6e..2ab13c90 100644 --- a/src/ui/mapper/style/StyleRuleMapper.cpp +++ b/src/ui/mapper/style/StyleRuleMapper.cpp @@ -1,5 +1,7 @@ #include "cru/ui/mapper/style/StyleRuleMapper.h" #include "cru/common/ClonablePtr.h" +#include "cru/common/Exception.h" +#include "cru/common/log/Logger.h" #include "cru/ui/mapper/MapperRegistry.h" #include "cru/ui/mapper/style/IConditionMapper.h" #include "cru/ui/mapper/style/IStylerMapper.h" @@ -45,6 +47,10 @@ ClonablePtr StyleRuleMapper::DoMapFromXml( } } } + + if (!resolved) { + throw Exception(u"Unknown element in StyleRule: " + c->GetTag()); + } } } diff --git a/src/ui/render/BorderRenderObject.cpp b/src/ui/render/BorderRenderObject.cpp index cbea4b81..abba47e9 100644 --- a/src/ui/render/BorderRenderObject.cpp +++ b/src/ui/render/BorderRenderObject.cpp @@ -118,7 +118,7 @@ Size BorderRenderObject::OnMeasureContent(const MeasureRequirement& requirement, child->Measure(requirement, preferred_size); return child->GetDesiredSize(); } else { - return Size{}; + return preferred_size.GetSizeOr0(); } } diff --git a/src/ui/style/StyleRuleSet.cpp b/src/ui/style/StyleRuleSet.cpp index c8d12500..6b475c8c 100644 --- a/src/ui/style/StyleRuleSet.cpp +++ b/src/ui/style/StyleRuleSet.cpp @@ -112,10 +112,9 @@ void StyleRuleSetBind::UpdateStyle() { // reverse. for (auto iter = ruleset_chain_cache_.crbegin(); iter != ruleset_chain_cache_.crend(); ++iter) { - for (const auto& rule : (*iter)->GetRules()) - if (rule.GetCondition()->Judge(control_)) { - rule.GetStyler()->Apply(control_); - } + for (const auto& rule : (*iter)->GetRules()) { + rule.CheckAndApply(control_); + } } } } // namespace cru::ui::style -- cgit v1.2.3