aboutsummaryrefslogtreecommitdiff
path: root/src/ui/mapper
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-01-24 22:14:37 +0800
committercrupest <crupest@outlook.com>2022-01-24 22:14:37 +0800
commit24e1dc8723aea1e46a3aa15794747f3fa52f8eca (patch)
tree0c879b38647307d25325eb8f9993a7f690fb46b2 /src/ui/mapper
parent72402c09d45b696cd58a65b4a141a804e1cd9371 (diff)
downloadcru-24e1dc8723aea1e46a3aa15794747f3fa52f8eca.tar.gz
cru-24e1dc8723aea1e46a3aa15794747f3fa52f8eca.tar.bz2
cru-24e1dc8723aea1e46a3aa15794747f3fa52f8eca.zip
...
Diffstat (limited to 'src/ui/mapper')
-rw-r--r--src/ui/mapper/MapperRegistry.cpp41
-rw-r--r--src/ui/mapper/style/CursorStylerMapper.cpp2
-rw-r--r--src/ui/mapper/style/HoverConditionMapper.cpp23
3 files changed, 45 insertions, 21 deletions
diff --git a/src/ui/mapper/MapperRegistry.cpp b/src/ui/mapper/MapperRegistry.cpp
index d7131e33..a9c53129 100644
--- a/src/ui/mapper/MapperRegistry.cpp
+++ b/src/ui/mapper/MapperRegistry.cpp
@@ -11,6 +11,7 @@
#include "cru/ui/mapper/style/ClickStateConditionMapper.hpp"
#include "cru/ui/mapper/style/CursorStylerMapper.hpp"
#include "cru/ui/mapper/style/FocusConditionMapper.hpp"
+#include "cru/ui/mapper/style/HoverConditionMapper.hpp"
#include "cru/ui/mapper/style/NoConditionMapper.hpp"
#include "cru/ui/mapper/style/OrConditionMapper.hpp"
#include "cru/ui/mapper/style/StyleRuleMapper.hpp"
@@ -19,31 +20,31 @@
namespace cru::ui::mapper {
MapperRegistry *MapperRegistry::GetInstance() {
static MapperRegistry instance;
+ return &instance;
+}
+MapperRegistry::MapperRegistry() {
using namespace style;
- instance.RegisterMapper(new CornerRadiusMapper());
- instance.RegisterMapper(new PointMapper());
- instance.RegisterMapper(new SizeMapper());
- instance.RegisterMapper(new ThicknessMapper());
- instance.RegisterMapper(new BorderStyleMapper());
- instance.RegisterMapper(new ColorMapper());
- instance.RegisterMapper(new CursorMapper());
- instance.RegisterMapper(new AndConditionMapper());
- instance.RegisterMapper(new BorderStylerMapper());
- instance.RegisterMapper(new ClickStateConditionMapper());
- instance.RegisterMapper(new CursorStylerMapper());
- instance.RegisterMapper(new FocusConditionMapper());
- instance.RegisterMapper(new NoConditionMapper());
- instance.RegisterMapper(new OrConditionMapper());
- instance.RegisterMapper(new StyleRuleMapper());
- instance.RegisterMapper(new StyleRuleSetMapper());
-
- return &instance;
+ RegisterMapper(new CornerRadiusMapper());
+ RegisterMapper(new PointMapper());
+ RegisterMapper(new SizeMapper());
+ RegisterMapper(new ThicknessMapper());
+ RegisterMapper(new BorderStyleMapper());
+ RegisterMapper(new ColorMapper());
+ RegisterMapper(new CursorMapper());
+ RegisterMapper(new AndConditionMapper());
+ RegisterMapper(new BorderStylerMapper());
+ RegisterMapper(new ClickStateConditionMapper());
+ RegisterMapper(new CursorStylerMapper());
+ RegisterMapper(new FocusConditionMapper());
+ RegisterMapper(new HoverConditionMapper());
+ RegisterMapper(new NoConditionMapper());
+ RegisterMapper(new OrConditionMapper());
+ RegisterMapper(new StyleRuleMapper());
+ RegisterMapper(new StyleRuleSetMapper());
}
-MapperRegistry::MapperRegistry() {}
-
MapperRegistry::~MapperRegistry() {
for (auto mapper : mapper_list_) {
delete mapper;
diff --git a/src/ui/mapper/style/CursorStylerMapper.cpp b/src/ui/mapper/style/CursorStylerMapper.cpp
index 0b29c938..c63d451c 100644
--- a/src/ui/mapper/style/CursorStylerMapper.cpp
+++ b/src/ui/mapper/style/CursorStylerMapper.cpp
@@ -6,7 +6,7 @@
namespace cru::ui::mapper::style {
bool CursorStylerMapper::XmlElementIsOfThisType(xml::XmlElementNode* node) {
- return node->GetTag().CaseInsensitiveEqual(u"cursor");
+ return node->GetTag().CaseInsensitiveEqual(u"CursorStyler");
}
ClonablePtr<ui::style::CursorStyler> CursorStylerMapper::DoMapFromXml(
diff --git a/src/ui/mapper/style/HoverConditionMapper.cpp b/src/ui/mapper/style/HoverConditionMapper.cpp
new file mode 100644
index 00000000..b78c12e9
--- /dev/null
+++ b/src/ui/mapper/style/HoverConditionMapper.cpp
@@ -0,0 +1,23 @@
+#include "cru/ui/mapper/style/HoverConditionMapper.hpp"
+#include "cru/common/ClonablePtr.hpp"
+#include "cru/ui/style/Condition.hpp"
+
+namespace cru::ui::mapper::style {
+using namespace cru::ui::style;
+
+bool HoverConditionMapper::XmlElementIsOfThisType(xml::XmlElementNode* node) {
+ return node->GetTag().CaseInsensitiveEqual(u"HoverCondition");
+}
+
+ClonablePtr<HoverCondition> HoverConditionMapper::DoMapFromXml(
+ xml::XmlElementNode* node) {
+ auto value = node->GetAttributeCaseInsensitive(u"value");
+ if (value.CaseInsensitiveEqual(u"true")) {
+ return ui::style::HoverCondition::Create(true);
+ } else if (value.CaseInsensitiveEqual(u"false")) {
+ return ui::style::HoverCondition::Create(false);
+ } else {
+ throw Exception(u"Invalid value for HoverCondition: " + value);
+ }
+}
+} // namespace cru::ui::mapper::style