aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
-rw-r--r--include/cru/ui/style/ApplyBorderStyleInfo.hpp5
-rw-r--r--src/ui/CMakeLists.txt3
-rw-r--r--src/ui/mapper/BorderStyleMapper.cpp (renamed from src/ui/mapper/style/BorderStyleMapper.cpp)24
-rw-r--r--src/ui/mapper/ColorMapper.cpp8
-rw-r--r--src/ui/mapper/CornerRadiusMapper.cpp16
-rw-r--r--src/ui/mapper/CursorMapper.cpp3
-rw-r--r--src/ui/mapper/PointMapper.cpp10
-rw-r--r--src/ui/mapper/SizeMapper.cpp10
-rw-r--r--src/ui/mapper/ThicknessMapper.cpp16
17 files changed, 73 insertions, 68 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
diff --git a/include/cru/ui/style/ApplyBorderStyleInfo.hpp b/include/cru/ui/style/ApplyBorderStyleInfo.hpp
index 3923ebb4..7ae5b2c5 100644
--- a/include/cru/ui/style/ApplyBorderStyleInfo.hpp
+++ b/include/cru/ui/style/ApplyBorderStyleInfo.hpp
@@ -5,9 +5,10 @@
namespace cru::ui::style {
struct ApplyBorderStyleInfo {
+ ApplyBorderStyleInfo() = default;
+
explicit ApplyBorderStyleInfo(
- std::optional<std::shared_ptr<platform::graphics::IBrush>> border_brush =
- std::nullopt,
+ std::optional<std::shared_ptr<platform::graphics::IBrush>> border_brush,
std::optional<Thickness> border_thickness = std::nullopt,
std::optional<CornerRadius> border_radius = std::nullopt,
std::optional<std::shared_ptr<platform::graphics::IBrush>>
diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt
index b086cce1..4353a541 100644
--- a/src/ui/CMakeLists.txt
+++ b/src/ui/CMakeLists.txt
@@ -26,14 +26,15 @@ add_library(cru_ui SHARED
helper/ShortcutHub.cpp
host/LayoutPaintCycler.cpp
host/WindowHost.cpp
+ mapper/BorderStyleMapper.cpp
mapper/ColorMapper.cpp
mapper/CornerRadiusMapper.cpp
+ mapper/CursorMapper.cpp
mapper/Mapper.cpp
mapper/MapperRegistry.cpp
mapper/PointMapper.cpp
mapper/SizeMapper.cpp
mapper/ThicknessMapper.cpp
- mapper/style/BorderStyleMapper.cpp
render/BorderRenderObject.cpp
render/CanvasRenderObject.cpp
render/FlexLayoutRenderObject.cpp
diff --git a/src/ui/mapper/style/BorderStyleMapper.cpp b/src/ui/mapper/BorderStyleMapper.cpp
index 0dc8a05f..65dbfe3b 100644
--- a/src/ui/mapper/style/BorderStyleMapper.cpp
+++ b/src/ui/mapper/BorderStyleMapper.cpp
@@ -1,12 +1,12 @@
-#include "cru/ui/mapper/style/BorderStyleMapper.hpp"
-#include "../../Helper.hpp"
+#include "cru/ui/mapper/BorderStyleMapper.hpp"
+#include "../Helper.hpp"
#include "cru/common/Logger.hpp"
#include "cru/platform/graphics/Factory.hpp"
#include "cru/ui/mapper/MapperRegistry.hpp"
#include "cru/ui/style/ApplyBorderStyleInfo.hpp"
#include "cru/xml/XmlNode.hpp"
-namespace cru::ui::mapper::style {
+namespace cru::ui::mapper {
using namespace xml;
using ui::style::ApplyBorderStyleInfo;
@@ -14,9 +14,9 @@ bool BorderStyleMapper::XmlElementIsOfThisType(xml::XmlElementNode* node) {
return node->GetTag() == u"BorderStyle";
}
-std::unique_ptr<ApplyBorderStyleInfo> BorderStyleMapper::DoMapFromXml(
+ApplyBorderStyleInfo BorderStyleMapper::DoMapFromXml(
xml::XmlElementNode* node) {
- auto result = std::make_unique<ApplyBorderStyleInfo>();
+ ApplyBorderStyleInfo result;
for (auto child : node->GetChildren()) {
if (child->GetType() == XmlNode::Type::Text) {
@@ -29,23 +29,23 @@ std::unique_ptr<ApplyBorderStyleInfo> BorderStyleMapper::DoMapFromXml(
MapperRegistry::GetInstance()->GetMapper<CornerRadius>();
auto color_mapper = MapperRegistry::GetInstance()->GetMapper<Color>();
if (thickness_mapper->XmlElementIsOfThisType(c)) {
- result->border_thickness = *thickness_mapper->MapFromXml(c);
+ result.border_thickness = thickness_mapper->MapFromXml(c);
} else if (corner_radius_mapper->XmlElementIsOfThisType(c)) {
- result->border_radius = *corner_radius_mapper->MapFromXml(c);
+ result.border_radius = corner_radius_mapper->MapFromXml(c);
} else if (color_mapper->XmlElementIsOfThisType(c)) {
auto brush = GetGraphicsFactory()->CreateSolidColorBrush(
- *color_mapper->MapFromXml(c));
+ color_mapper->MapFromXml(c));
auto name = c->GetOptionalAttribute(u"name");
if (name) {
if (name == u"foreground") {
- result->foreground_brush = std::move(brush);
+ result.foreground_brush = std::move(brush);
} else if (name == u"background") {
- result->background_brush = std::move(brush);
+ result.background_brush = std::move(brush);
} else {
log::Debug(u"Unknown brush name: {}", *name);
}
} else {
- result->border_brush = std::move(brush);
+ result.border_brush = std::move(brush);
}
}
}
@@ -53,4 +53,4 @@ std::unique_ptr<ApplyBorderStyleInfo> BorderStyleMapper::DoMapFromXml(
return result;
}
-} // namespace cru::ui::mapper::style
+} // namespace cru::ui::mapper
diff --git a/src/ui/mapper/ColorMapper.cpp b/src/ui/mapper/ColorMapper.cpp
index e17352e1..a5d2c5e3 100644
--- a/src/ui/mapper/ColorMapper.cpp
+++ b/src/ui/mapper/ColorMapper.cpp
@@ -5,18 +5,18 @@ bool ColorMapper::XmlElementIsOfThisType(xml::XmlElementNode* node) {
return node->GetTag() == u"Color";
}
-std::unique_ptr<Color> ColorMapper::DoMapFromString(String str) {
+Color ColorMapper::DoMapFromString(String str) {
auto c = Color::Parse(str);
if (!c) {
throw Exception(u"Invalid color value.");
}
- return std::make_unique<Color>(*c);
+ return *c;
}
-std::unique_ptr<Color> ColorMapper::DoMapFromXml(xml::XmlElementNode* node) {
+Color ColorMapper::DoMapFromXml(xml::XmlElementNode* node) {
auto value_attr = node->GetOptionalAttribute(u"value");
if (!value_attr) {
- return std::make_unique<Color>(colors::transparent);
+ return colors::transparent;
}
return DoMapFromString(*value_attr);
}
diff --git a/src/ui/mapper/CornerRadiusMapper.cpp b/src/ui/mapper/CornerRadiusMapper.cpp
index ef63e26f..0c13db7c 100644
--- a/src/ui/mapper/CornerRadiusMapper.cpp
+++ b/src/ui/mapper/CornerRadiusMapper.cpp
@@ -10,35 +10,33 @@ bool CornerRadiusMapper::XmlElementIsOfThisType(xml::XmlElementNode* node) {
return false;
}
-std::unique_ptr<CornerRadius> CornerRadiusMapper::DoMapFromXml(
- xml::XmlElementNode* node) {
+CornerRadius CornerRadiusMapper::DoMapFromXml(xml::XmlElementNode* node) {
auto point_mapper = MapperRegistry::GetInstance()->GetMapper<Point>();
-
- auto result = std::make_unique<CornerRadius>();
+ CornerRadius result;
auto all = node->GetOptionalAttribute(u"all");
if (all) {
- result->SetAll(*point_mapper->MapFromString(*all));
+ result.SetAll(point_mapper->MapFromString(*all));
}
auto lefttop = node->GetOptionalAttribute(u"lefttop");
if (lefttop) {
- result->left_top = *point_mapper->MapFromString(*lefttop);
+ result.left_top = point_mapper->MapFromString(*lefttop);
}
auto righttop = node->GetOptionalAttribute(u"righttop");
if (righttop) {
- result->right_top = *point_mapper->MapFromString(*righttop);
+ result.right_top = point_mapper->MapFromString(*righttop);
}
auto rightbottom = node->GetOptionalAttribute(u"rightbottom");
if (rightbottom) {
- result->right_bottom = *point_mapper->MapFromString(*rightbottom);
+ result.right_bottom = point_mapper->MapFromString(*rightbottom);
}
auto leftbottom = node->GetOptionalAttribute(u"leftbottom");
if (leftbottom) {
- result->left_bottom = *point_mapper->MapFromString(*leftbottom);
+ result.left_bottom = point_mapper->MapFromString(*leftbottom);
}
return result;
diff --git a/src/ui/mapper/CursorMapper.cpp b/src/ui/mapper/CursorMapper.cpp
new file mode 100644
index 00000000..2dd08219
--- /dev/null
+++ b/src/ui/mapper/CursorMapper.cpp
@@ -0,0 +1,3 @@
+#include "cru/ui/mapper/CursorMapper.hpp"
+
+namespace cru::ui::mapper {}
diff --git a/src/ui/mapper/PointMapper.cpp b/src/ui/mapper/PointMapper.cpp
index 2be0ba01..bcf209fb 100644
--- a/src/ui/mapper/PointMapper.cpp
+++ b/src/ui/mapper/PointMapper.cpp
@@ -8,20 +8,20 @@ bool PointMapper::XmlElementIsOfThisType(xml::XmlElementNode* node) {
return false;
}
-std::unique_ptr<Point> PointMapper::DoMapFromString(String str) {
+Point PointMapper::DoMapFromString(String str) {
std::vector<float> values = str.ParseToFloatList();
if (values.size() == 2) {
- return std::make_unique<Point>(values[0], values[1]);
+ return {values[0], values[1]};
} else if (values.size() == 1) {
- return std::make_unique<Point>(values[0], values[0]);
+ return {values[0], values[0]};
} else {
throw Exception(u"Invalid Point string.");
}
}
-std::unique_ptr<Point> PointMapper::DoMapFromXml(xml::XmlElementNode* node) {
+Point PointMapper::DoMapFromXml(xml::XmlElementNode* node) {
auto value_attr = node->GetOptionalAttribute(u"value");
- if (!value_attr) return std::make_unique<Point>();
+ if (!value_attr) return {};
return DoMapFromString(*value_attr);
}
} // namespace cru::ui::mapper
diff --git a/src/ui/mapper/SizeMapper.cpp b/src/ui/mapper/SizeMapper.cpp
index 4f9dc208..3e3355cd 100644
--- a/src/ui/mapper/SizeMapper.cpp
+++ b/src/ui/mapper/SizeMapper.cpp
@@ -8,20 +8,20 @@ bool SizeMapper::XmlElementIsOfThisType(xml::XmlElementNode* node) {
return false;
}
-std::unique_ptr<Size> SizeMapper::DoMapFromString(String str) {
+Size SizeMapper::DoMapFromString(String str) {
std::vector<float> values = str.ParseToFloatList();
if (values.size() == 2) {
- return std::make_unique<Size>(values[0], values[1]);
+ return {values[0], values[1]};
} else if (values.size() == 1) {
- return std::make_unique<Size>(values[0], values[0]);
+ return {values[0], values[0]};
} else {
throw Exception(u"Invalid Point string.");
}
}
-std::unique_ptr<Size> SizeMapper::DoMapFromXml(xml::XmlElementNode* node) {
+Size SizeMapper::DoMapFromXml(xml::XmlElementNode* node) {
auto value_attr = node->GetOptionalAttribute(u"value");
- if (!value_attr) return std::make_unique<Size>();
+ if (!value_attr) return {};
return DoMapFromString(*value_attr);
}
} // namespace cru::ui::mapper
diff --git a/src/ui/mapper/ThicknessMapper.cpp b/src/ui/mapper/ThicknessMapper.cpp
index 11f0be0d..1829d64b 100644
--- a/src/ui/mapper/ThicknessMapper.cpp
+++ b/src/ui/mapper/ThicknessMapper.cpp
@@ -9,26 +9,22 @@ bool ThicknessMapper::XmlElementIsOfThisType(xml::XmlElementNode* node) {
return false;
}
-std::unique_ptr<Thickness> ThicknessMapper::DoMapFromString(String str) {
+Thickness ThicknessMapper::DoMapFromString(String str) {
std::vector<float> values = str.ParseToFloatList();
if (values.size() == 4) {
- return std::make_unique<Thickness>(values[0], values[1], values[2],
- values[3]);
+ return Thickness(values[0], values[1], values[2], values[3]);
} else if (values.size() == 2) {
- return std::make_unique<Thickness>(values[0], values[1], values[0],
- values[1]);
+ return Thickness(values[0], values[1], values[0], values[1]);
} else if (values.size() == 1) {
- return std::make_unique<Thickness>(values[0], values[0], values[0],
- values[0]);
+ return Thickness(values[0], values[0], values[0], values[0]);
} else {
throw Exception(u"Invalid Thickness string.");
}
}
-std::unique_ptr<Thickness> ThicknessMapper::DoMapFromXml(
- xml::XmlElementNode* node) {
+Thickness ThicknessMapper::DoMapFromXml(xml::XmlElementNode* node) {
auto value_attr = node->GetOptionalAttribute(u"value");
- if (!value_attr) return std::make_unique<Thickness>();
+ if (!value_attr) return {};
return DoMapFromString(*value_attr);
}
} // namespace cru::ui::mapper