aboutsummaryrefslogtreecommitdiff
path: root/src/ui/mapper
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/mapper')
-rw-r--r--src/ui/mapper/FontMapper.cpp20
-rw-r--r--src/ui/mapper/MapperRegistry.cpp2
2 files changed, 22 insertions, 0 deletions
diff --git a/src/ui/mapper/FontMapper.cpp b/src/ui/mapper/FontMapper.cpp
new file mode 100644
index 00000000..26a17c5f
--- /dev/null
+++ b/src/ui/mapper/FontMapper.cpp
@@ -0,0 +1,20 @@
+#include "cru/ui/mapper/FontMapper.hpp"
+#include "../Helper.hpp"
+#include "cru/platform/graphics/Factory.hpp"
+
+namespace cru::ui::mapper {
+bool FontMapper::XmlElementIsOfThisType(xml::XmlElementNode* node) {
+ return node->GetTag().CaseInsensitiveEqual(u"font");
+}
+
+std::shared_ptr<platform::graphics::IFont> FontMapper::DoMapFromXml(
+ xml::XmlElementNode* node) {
+ auto font_family_attr = node->GetOptionalAttribute(u"family");
+ auto font_size_attr = node->GetOptionalAttribute(u"size");
+
+ auto font_family = font_family_attr.value_or(u"");
+ auto font_size = font_size_attr ? font_size_attr->ParseToFloat() : 24.0f;
+
+ return GetGraphicsFactory()->CreateFont(font_family, font_size);
+}
+} // namespace cru::ui::mapper
diff --git a/src/ui/mapper/MapperRegistry.cpp b/src/ui/mapper/MapperRegistry.cpp
index 97c5cf21..121a65e7 100644
--- a/src/ui/mapper/MapperRegistry.cpp
+++ b/src/ui/mapper/MapperRegistry.cpp
@@ -4,6 +4,7 @@
#include "cru/ui/mapper/ColorMapper.hpp"
#include "cru/ui/mapper/CornerRadiusMapper.hpp"
#include "cru/ui/mapper/CursorMapper.hpp"
+#include "cru/ui/mapper/FontMapper.hpp"
#include "cru/ui/mapper/PointMapper.hpp"
#include "cru/ui/mapper/SizeMapper.hpp"
#include "cru/ui/mapper/ThicknessMapper.hpp"
@@ -29,6 +30,7 @@ MapperRegistry::MapperRegistry() {
RegisterMapper(new BrushMapper());
RegisterMapper(new CornerRadiusMapper());
+ RegisterMapper(new FontMapper());
RegisterMapper(new PointMapper());
RegisterMapper(new SizeMapper());
RegisterMapper(new ThicknessMapper());