aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-02-24 16:35:08 +0800
committercrupest <crupest@outlook.com>2022-02-24 16:35:08 +0800
commite80f44385dee8636b747848ecb6193c41a99d89c (patch)
treed004d27715d5bbaa3fd087dc8570787eae0549ca /src
parenta7f5275267e1b504b119e2e3b7fcd46a88874821 (diff)
downloadcru-e80f44385dee8636b747848ecb6193c41a99d89c.tar.gz
cru-e80f44385dee8636b747848ecb6193c41a99d89c.tar.bz2
cru-e80f44385dee8636b747848ecb6193c41a99d89c.zip
...
Diffstat (limited to 'src')
-rw-r--r--src/ui/controls/CheckBox.cpp6
-rw-r--r--src/ui/mapper/style/StyleRuleMapper.cpp6
-rw-r--r--src/ui/render/BorderRenderObject.cpp2
-rw-r--r--src/ui/style/StyleRuleSet.cpp7
4 files changed, 16 insertions, 5 deletions
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<ui::style::StyleRule> 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