From e80f44385dee8636b747848ecb6193c41a99d89c Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 24 Feb 2022 16:35:08 +0800 Subject: ... --- 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 +++---- 4 files changed, 16 insertions(+), 5 deletions(-) (limited to 'src') 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