From 673f1939beb1b477a23d9641a07a2e05fff903b4 Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 26 Feb 2022 20:12:54 +0800 Subject: ... --- src/ui/mapper/Mapper.cpp | 9 +++++++++ src/ui/mapper/MapperRegistry.cpp | 4 ++++ src/ui/mapper/style/MarginStylerMapper.cpp | 24 ++++++++++++++++++++++++ src/ui/mapper/style/PaddingStylerMapper.cpp | 26 ++++++++++++++++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 src/ui/mapper/style/MarginStylerMapper.cpp create mode 100644 src/ui/mapper/style/PaddingStylerMapper.cpp (limited to 'src/ui/mapper') diff --git a/src/ui/mapper/Mapper.cpp b/src/ui/mapper/Mapper.cpp index 40653118..ebf880a2 100644 --- a/src/ui/mapper/Mapper.cpp +++ b/src/ui/mapper/Mapper.cpp @@ -5,4 +5,13 @@ namespace cru::ui::mapper { MapperBase::MapperBase(std::type_index type_index) : type_index_(std::move(type_index)) {} + +bool MapperBase::XmlElementIsOfThisType(xml::XmlElementNode* node) { + for (const auto& tag : allowed_tags_) { + if (node->GetTag().CaseInsensitiveEqual(tag)) { + return true; + } + } + return false; +} } // namespace cru::ui::mapper diff --git a/src/ui/mapper/MapperRegistry.cpp b/src/ui/mapper/MapperRegistry.cpp index 9ae95a59..ad5b7e8d 100644 --- a/src/ui/mapper/MapperRegistry.cpp +++ b/src/ui/mapper/MapperRegistry.cpp @@ -16,8 +16,10 @@ #include "cru/ui/mapper/style/CursorStylerMapper.h" #include "cru/ui/mapper/style/FocusConditionMapper.h" #include "cru/ui/mapper/style/HoverConditionMapper.h" +#include "cru/ui/mapper/style/MarginStylerMapper.h" #include "cru/ui/mapper/style/NoConditionMapper.h" #include "cru/ui/mapper/style/OrConditionMapper.h" +#include "cru/ui/mapper/style/PaddingStylerMapper.h" #include "cru/ui/mapper/style/PreferredSizeStylerMapper.h" #include "cru/ui/mapper/style/StyleRuleMapper.h" #include "cru/ui/mapper/style/StyleRuleSetMapper.h" @@ -48,8 +50,10 @@ MapperRegistry::MapperRegistry() { RegisterMapper(new CursorStylerMapper()); RegisterMapper(new FocusConditionMapper()); RegisterMapper(new HoverConditionMapper()); + RegisterMapper(new MarginStylerMapper()); RegisterMapper(new NoConditionMapper()); RegisterMapper(new OrConditionMapper()); + RegisterMapper(new PaddingStylerMapper()); RegisterMapper(new PreferredSizeStylerMapper()); RegisterMapper(new StyleRuleMapper()); RegisterMapper(new StyleRuleSetMapper()); diff --git a/src/ui/mapper/style/MarginStylerMapper.cpp b/src/ui/mapper/style/MarginStylerMapper.cpp new file mode 100644 index 00000000..cb2fd7ee --- /dev/null +++ b/src/ui/mapper/style/MarginStylerMapper.cpp @@ -0,0 +1,24 @@ +#include "cru/ui/mapper/style/MarginStylerMapper.h" +#include "cru/ui/mapper/MapperRegistry.h" +#include "cru/ui/render/MeasureRequirement.h" +#include "cru/ui/style/Styler.h" + +namespace cru::ui::mapper::style { +MarginStylerMapper::MarginStylerMapper() { SetAllowedTags({u"MarginStyler"}); } + +MarginStylerMapper::~MarginStylerMapper() {} + +ClonablePtr MarginStylerMapper::DoMapFromXml( + xml::XmlElementNode* node) { + Thickness thickness; + + auto thickness_mapper = MapperRegistry::GetInstance()->GetMapper(); + + auto value_attribute = node->GetOptionalAttributeCaseInsensitive(u"value"); + if (value_attribute) { + thickness = thickness_mapper->MapFromString(*value_attribute); + } + + return ui::style::MarginStyler::Create(thickness); +} +} // namespace cru::ui::mapper::style diff --git a/src/ui/mapper/style/PaddingStylerMapper.cpp b/src/ui/mapper/style/PaddingStylerMapper.cpp new file mode 100644 index 00000000..cd316cd2 --- /dev/null +++ b/src/ui/mapper/style/PaddingStylerMapper.cpp @@ -0,0 +1,26 @@ +#include "cru/ui/mapper/style/PaddingStylerMapper.h" +#include "cru/ui/mapper/MapperRegistry.h" +#include "cru/ui/render/MeasureRequirement.h" +#include "cru/ui/style/Styler.h" + +namespace cru::ui::mapper::style { +PaddingStylerMapper::PaddingStylerMapper() { + SetAllowedTags({u"PaddingStyler"}); +} + +PaddingStylerMapper::~PaddingStylerMapper() {} + +ClonablePtr PaddingStylerMapper::DoMapFromXml( + xml::XmlElementNode* node) { + Thickness thickness; + + auto thickness_mapper = MapperRegistry::GetInstance()->GetMapper(); + + auto value_attribute = node->GetOptionalAttributeCaseInsensitive(u"value"); + if (value_attribute) { + thickness = thickness_mapper->MapFromString(*value_attribute); + } + + return ui::style::PaddingStyler::Create(thickness); +} +} // namespace cru::ui::mapper::style -- cgit v1.2.3