diff options
author | crupest <crupest@outlook.com> | 2022-01-22 22:37:24 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-01-22 22:37:24 +0800 |
commit | 13860c88910c00478abe3001cc80125e76767381 (patch) | |
tree | 507f517467a4e3c851f87a1158f751c38d8644be /include | |
parent | 14d9efc39635dab2c6c0f791d6b0a63c92d941ee (diff) | |
download | cru-13860c88910c00478abe3001cc80125e76767381.tar.gz cru-13860c88910c00478abe3001cc80125e76767381.tar.bz2 cru-13860c88910c00478abe3001cc80125e76767381.zip |
...
Diffstat (limited to 'include')
-rw-r--r-- | include/cru/ui/mapper/CursorMapper.hpp | 18 | ||||
-rw-r--r-- | include/cru/ui/mapper/Mapper.hpp | 4 | ||||
-rw-r--r-- | include/cru/ui/mapper/MapperRegistry.hpp | 5 |
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); |