diff options
Diffstat (limited to 'src/ui/mapper')
-rw-r--r-- | src/ui/mapper/CornerRadiusMapper.cpp | 46 | ||||
-rw-r--r-- | src/ui/mapper/MapperRegistry.cpp | 15 |
2 files changed, 61 insertions, 0 deletions
diff --git a/src/ui/mapper/CornerRadiusMapper.cpp b/src/ui/mapper/CornerRadiusMapper.cpp new file mode 100644 index 00000000..ef63e26f --- /dev/null +++ b/src/ui/mapper/CornerRadiusMapper.cpp @@ -0,0 +1,46 @@ +#include "cru/ui/mapper/CornerRadiusMapper.hpp" +#include "cru/ui/mapper/MapperRegistry.hpp" +#include "cru/ui/mapper/PointMapper.hpp" + +namespace cru::ui::mapper { +bool CornerRadiusMapper::XmlElementIsOfThisType(xml::XmlElementNode* node) { + if (node->GetTag() == u"CornerRadius") { + return true; + } + return false; +} + +std::unique_ptr<CornerRadius> CornerRadiusMapper::DoMapFromXml( + xml::XmlElementNode* node) { + auto point_mapper = MapperRegistry::GetInstance()->GetMapper<Point>(); + + auto result = std::make_unique<CornerRadius>(); + + auto all = node->GetOptionalAttribute(u"all"); + if (all) { + result->SetAll(*point_mapper->MapFromString(*all)); + } + + auto lefttop = node->GetOptionalAttribute(u"lefttop"); + if (lefttop) { + result->left_top = *point_mapper->MapFromString(*lefttop); + } + + auto righttop = node->GetOptionalAttribute(u"righttop"); + if (righttop) { + result->right_top = *point_mapper->MapFromString(*righttop); + } + + auto rightbottom = node->GetOptionalAttribute(u"rightbottom"); + if (rightbottom) { + result->right_bottom = *point_mapper->MapFromString(*rightbottom); + } + + auto leftbottom = node->GetOptionalAttribute(u"leftbottom"); + if (leftbottom) { + result->left_bottom = *point_mapper->MapFromString(*leftbottom); + } + + return result; +} +} // namespace cru::ui::mapper diff --git a/src/ui/mapper/MapperRegistry.cpp b/src/ui/mapper/MapperRegistry.cpp index e445a7d0..206d1d32 100644 --- a/src/ui/mapper/MapperRegistry.cpp +++ b/src/ui/mapper/MapperRegistry.cpp @@ -1,6 +1,21 @@ #include "cru/ui/mapper/MapperRegistry.hpp" +#include "cru/ui/mapper/CornerRadiusMapper.hpp" +#include "cru/ui/mapper/PointMapper.hpp" +#include "cru/ui/mapper/SizeMapper.hpp" +#include "cru/ui/mapper/ThicknessMapper.hpp" namespace cru::ui::mapper { +MapperRegistry *MapperRegistry::GetInstance() { + static MapperRegistry instance; + + instance.RegisterMapper(new CornerRadiusMapper()); + instance.RegisterMapper(new PointMapper()); + instance.RegisterMapper(new SizeMapper()); + instance.RegisterMapper(new ThicknessMapper()); + + return &instance; +} + MapperRegistry::MapperRegistry() {} MapperRegistry::~MapperRegistry() { |