aboutsummaryrefslogtreecommitdiff
path: root/include/cru
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-01-22 22:37:24 +0800
committercrupest <crupest@outlook.com>2022-01-22 22:37:24 +0800
commit13860c88910c00478abe3001cc80125e76767381 (patch)
tree507f517467a4e3c851f87a1158f751c38d8644be /include/cru
parent14d9efc39635dab2c6c0f791d6b0a63c92d941ee (diff)
downloadcru-13860c88910c00478abe3001cc80125e76767381.tar.gz
cru-13860c88910c00478abe3001cc80125e76767381.tar.bz2
cru-13860c88910c00478abe3001cc80125e76767381.zip
...
Diffstat (limited to 'include/cru')
-rw-r--r--include/cru/ui/mapper/CursorMapper.hpp18
-rw-r--r--include/cru/ui/mapper/Mapper.hpp4
-rw-r--r--include/cru/ui/mapper/MapperRegistry.hpp5
3 files changed, 26 insertions, 1 deletions
diff --git a/include/cru/ui/mapper/CursorMapper.hpp b/include/cru/ui/mapper/CursorMapper.hpp
index b4254061..6cb61d87 100644
--- a/include/cru/ui/mapper/CursorMapper.hpp
+++ b/include/cru/ui/mapper/CursorMapper.hpp
@@ -1,5 +1,21 @@
#pragma once
#include "Mapper.hpp"
#include "cru/platform/gui/Cursor.hpp"
+#include "cru/xml/XmlNode.hpp"
-namespace cru::ui::mapper::style {}
+namespace cru::ui::mapper {
+class CRU_UI_API CursorMapper : public BasicRefMapper<platform::gui::ICursor> {
+ public:
+ CRU_DEFAULT_CONSTRUCTOR_DESTRUCTOR(CursorMapper);
+
+ public:
+ bool SupportMapFromString() override { return true; }
+ bool SupportMapFromXml() override { return true; }
+ bool XmlElementIsOfThisType(xml::XmlElementNode* node) override;
+
+ protected:
+ std::shared_ptr<platform::gui::ICursor> DoMapFromString(String str) override;
+ std::shared_ptr<platform::gui::ICursor> DoMapFromXml(
+ xml::XmlElementNode* node) override;
+};
+} // namespace cru::ui::mapper
diff --git a/include/cru/ui/mapper/Mapper.hpp b/include/cru/ui/mapper/Mapper.hpp
index d15b63aa..4e5499d0 100644
--- a/include/cru/ui/mapper/Mapper.hpp
+++ b/include/cru/ui/mapper/Mapper.hpp
@@ -5,6 +5,7 @@
#include "cru/common/Exception.hpp"
#include "cru/xml/XmlNode.hpp"
+#include <memory>
#include <type_traits>
#include <typeindex>
#include <typeinfo>
@@ -81,4 +82,7 @@ class CRU_UI_API BasicMapper : public MapperBase {
virtual T DoMapFromString(String str) { return {}; }
virtual T DoMapFromXml(xml::XmlElementNode* node) { return {}; }
};
+
+template <typename T>
+using BasicRefMapper = BasicMapper<std::shared_ptr<T>>;
} // namespace cru::ui::mapper
diff --git a/include/cru/ui/mapper/MapperRegistry.hpp b/include/cru/ui/mapper/MapperRegistry.hpp
index 94643ce0..55051ba9 100644
--- a/include/cru/ui/mapper/MapperRegistry.hpp
+++ b/include/cru/ui/mapper/MapperRegistry.hpp
@@ -29,6 +29,11 @@ class CRU_UI_API MapperRegistry {
return nullptr;
}
+ template <typename T>
+ BasicRefMapper<T>* GetRefMapper() const {
+ return GetMapper<std::shared_ptr<T>>();
+ }
+
void RegisterMapper(MapperBase* mapper);
void UnregisterMapper(MapperBase* mapper);