aboutsummaryrefslogtreecommitdiff
path: root/include/cru/ui/mapper
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-01-22 22:22:45 +0800
committercrupest <crupest@outlook.com>2022-01-22 22:22:45 +0800
commit14d9efc39635dab2c6c0f791d6b0a63c92d941ee (patch)
tree0e974083611d5725a2135928749026ac237884f4 /include/cru/ui/mapper
parent0e71e7022ee4cfec5b27e178ee1bb7d6977f6b3e (diff)
downloadcru-14d9efc39635dab2c6c0f791d6b0a63c92d941ee.tar.gz
cru-14d9efc39635dab2c6c0f791d6b0a63c92d941ee.tar.bz2
cru-14d9efc39635dab2c6c0f791d6b0a63c92d941ee.zip
...
Diffstat (limited to 'include/cru/ui/mapper')
-rw-r--r--include/cru/ui/mapper/BorderStyleMapper.hpp (renamed from include/cru/ui/mapper/style/BorderStyleMapper.hpp)8
-rw-r--r--include/cru/ui/mapper/ColorMapper.hpp4
-rw-r--r--include/cru/ui/mapper/CornerRadiusMapper.hpp3
-rw-r--r--include/cru/ui/mapper/CursorMapper.hpp5
-rw-r--r--include/cru/ui/mapper/Mapper.hpp14
-rw-r--r--include/cru/ui/mapper/PointMapper.hpp4
-rw-r--r--include/cru/ui/mapper/SizeMapper.hpp4
-rw-r--r--include/cru/ui/mapper/ThicknessMapper.hpp4
8 files changed, 26 insertions, 20 deletions
diff --git a/include/cru/ui/mapper/style/BorderStyleMapper.hpp b/include/cru/ui/mapper/BorderStyleMapper.hpp
index 40a3e883..4d9ae774 100644
--- a/include/cru/ui/mapper/style/BorderStyleMapper.hpp
+++ b/include/cru/ui/mapper/BorderStyleMapper.hpp
@@ -1,9 +1,9 @@
#pragma once
-#include "../Mapper.hpp"
+#include "Mapper.hpp"
#include "cru/ui/style/ApplyBorderStyleInfo.hpp"
#include "cru/xml/XmlNode.hpp"
-namespace cru::ui::mapper::style {
+namespace cru::ui::mapper {
class CRU_UI_API BorderStyleMapper
: BasicMapper<ui::style::ApplyBorderStyleInfo> {
public:
@@ -14,7 +14,7 @@ class CRU_UI_API BorderStyleMapper
bool XmlElementIsOfThisType(xml::XmlElementNode* node) override;
protected:
- std::unique_ptr<ui::style::ApplyBorderStyleInfo> DoMapFromXml(
+ ui::style::ApplyBorderStyleInfo DoMapFromXml(
xml::XmlElementNode* node) override;
};
-} // namespace cru::ui::mapper::style
+} // namespace cru::ui::mapper
diff --git a/include/cru/ui/mapper/ColorMapper.hpp b/include/cru/ui/mapper/ColorMapper.hpp
index 33333025..668a4fc2 100644
--- a/include/cru/ui/mapper/ColorMapper.hpp
+++ b/include/cru/ui/mapper/ColorMapper.hpp
@@ -13,7 +13,7 @@ class ColorMapper : public BasicMapper<Color> {
bool XmlElementIsOfThisType(xml::XmlElementNode* node) override;
protected:
- std::unique_ptr<Color> DoMapFromString(String str) override;
- std::unique_ptr<Color> DoMapFromXml(xml::XmlElementNode* node) override;
+ Color DoMapFromString(String str) override;
+ Color DoMapFromXml(xml::XmlElementNode* node) override;
};
} // namespace cru::ui::mapper
diff --git a/include/cru/ui/mapper/CornerRadiusMapper.hpp b/include/cru/ui/mapper/CornerRadiusMapper.hpp
index b9fe6a52..4d83f2de 100644
--- a/include/cru/ui/mapper/CornerRadiusMapper.hpp
+++ b/include/cru/ui/mapper/CornerRadiusMapper.hpp
@@ -12,7 +12,6 @@ class CRU_UI_API CornerRadiusMapper : public BasicMapper<CornerRadius> {
bool XmlElementIsOfThisType(xml::XmlElementNode* node) override;
protected:
- std::unique_ptr<CornerRadius> DoMapFromXml(
- xml::XmlElementNode* node) override;
+ CornerRadius DoMapFromXml(xml::XmlElementNode* node) override;
};
} // namespace cru::ui::mapper
diff --git a/include/cru/ui/mapper/CursorMapper.hpp b/include/cru/ui/mapper/CursorMapper.hpp
new file mode 100644
index 00000000..b4254061
--- /dev/null
+++ b/include/cru/ui/mapper/CursorMapper.hpp
@@ -0,0 +1,5 @@
+#pragma once
+#include "Mapper.hpp"
+#include "cru/platform/gui/Cursor.hpp"
+
+namespace cru::ui::mapper::style {}
diff --git a/include/cru/ui/mapper/Mapper.hpp b/include/cru/ui/mapper/Mapper.hpp
index 79aa39aa..d15b63aa 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 <type_traits>
#include <typeindex>
#include <typeinfo>
@@ -41,6 +42,9 @@ class CRU_UI_API MapperBase : public Object {
template <typename T>
class CRU_UI_API BasicMapper : public MapperBase {
public:
+ static_assert(std::is_default_constructible_v<T>,
+ "T must be default constructible.");
+
BasicMapper() : MapperBase(typeid(T)) {}
CRU_DELETE_COPY(BasicMapper)
@@ -49,7 +53,7 @@ class CRU_UI_API BasicMapper : public MapperBase {
~BasicMapper() override = default;
virtual bool SupportMapFromString() { return false; }
- virtual std::unique_ptr<T> MapFromString(String str) {
+ virtual T MapFromString(String str) {
if (!SupportMapFromString()) {
throw Exception(u"This mapper does not support map from string.");
}
@@ -61,7 +65,7 @@ class CRU_UI_API BasicMapper : public MapperBase {
virtual bool XmlElementIsOfThisType(xml::XmlElementNode* node) {
return false;
}
- std::unique_ptr<T> MapFromXml(xml::XmlElementNode* node) {
+ T MapFromXml(xml::XmlElementNode* node) {
if (!SupportMapFromXml()) {
throw new Exception(u"This mapper does not support map from xml.");
}
@@ -74,9 +78,7 @@ class CRU_UI_API BasicMapper : public MapperBase {
}
protected:
- virtual std::unique_ptr<T> DoMapFromString(String str) { return nullptr; }
- virtual std::unique_ptr<T> DoMapFromXml(xml::XmlElementNode* node) {
- return nullptr;
- }
+ virtual T DoMapFromString(String str) { return {}; }
+ virtual T DoMapFromXml(xml::XmlElementNode* node) { return {}; }
};
} // namespace cru::ui::mapper
diff --git a/include/cru/ui/mapper/PointMapper.hpp b/include/cru/ui/mapper/PointMapper.hpp
index 5641af01..b1837fe1 100644
--- a/include/cru/ui/mapper/PointMapper.hpp
+++ b/include/cru/ui/mapper/PointMapper.hpp
@@ -12,7 +12,7 @@ class CRU_UI_API PointMapper : public BasicMapper<Point> {
bool XmlElementIsOfThisType(xml::XmlElementNode* node) override;
protected:
- std::unique_ptr<Point> DoMapFromString(String str) override;
- std::unique_ptr<Point> DoMapFromXml(xml::XmlElementNode* node) override;
+ Point DoMapFromString(String str) override;
+ Point DoMapFromXml(xml::XmlElementNode* node) override;
};
} // namespace cru::ui::mapper
diff --git a/include/cru/ui/mapper/SizeMapper.hpp b/include/cru/ui/mapper/SizeMapper.hpp
index 20558bf4..6ab4b97d 100644
--- a/include/cru/ui/mapper/SizeMapper.hpp
+++ b/include/cru/ui/mapper/SizeMapper.hpp
@@ -12,7 +12,7 @@ class CRU_UI_API SizeMapper : public BasicMapper<Size> {
bool XmlElementIsOfThisType(xml::XmlElementNode* node) override;
protected:
- std::unique_ptr<Size> DoMapFromString(String str) override;
- std::unique_ptr<Size> DoMapFromXml(xml::XmlElementNode* node) override;
+ Size DoMapFromString(String str) override;
+ Size DoMapFromXml(xml::XmlElementNode* node) override;
};
} // namespace cru::ui::mapper
diff --git a/include/cru/ui/mapper/ThicknessMapper.hpp b/include/cru/ui/mapper/ThicknessMapper.hpp
index 68bbcf49..4ffbeb9b 100644
--- a/include/cru/ui/mapper/ThicknessMapper.hpp
+++ b/include/cru/ui/mapper/ThicknessMapper.hpp
@@ -16,7 +16,7 @@ class CRU_UI_API ThicknessMapper : public BasicMapper<Thickness> {
bool XmlElementIsOfThisType(xml::XmlElementNode* node) override;
protected:
- std::unique_ptr<Thickness> DoMapFromString(String str) override;
- std::unique_ptr<Thickness> DoMapFromXml(xml::XmlElementNode* node) override;
+ Thickness DoMapFromString(String str) override;
+ Thickness DoMapFromXml(xml::XmlElementNode* node) override;
};
} // namespace cru::ui::mapper