diff options
Diffstat (limited to 'src/ui/mapper')
-rw-r--r-- | src/ui/mapper/FontMapper.cpp | 20 | ||||
-rw-r--r-- | src/ui/mapper/MapperRegistry.cpp | 2 |
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()); |