diff options
author | crupest <crupest@outlook.com> | 2022-03-06 16:31:22 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-03-06 16:31:22 +0800 |
commit | afc40737f2dc990f4805342e52e2be128f161808 (patch) | |
tree | 0c9afd442ba670e95d3d0d087708ec0befbc71ed | |
parent | 1ddea64a948eca27f17a99f8601d737636be872b (diff) | |
download | cru-afc40737f2dc990f4805342e52e2be128f161808.tar.gz cru-afc40737f2dc990f4805342e52e2be128f161808.tar.bz2 cru-afc40737f2dc990f4805342e52e2be128f161808.zip |
...
-rw-r--r-- | include/cru/ui/mapper/style/ContentBrushStylerMapper.h | 25 | ||||
-rw-r--r-- | src/ui/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/ui/mapper/MapperRegistry.cpp | 2 | ||||
-rw-r--r-- | src/ui/mapper/style/ContentBrushStylerMapper.cpp | 30 |
4 files changed, 58 insertions, 0 deletions
diff --git a/include/cru/ui/mapper/style/ContentBrushStylerMapper.h b/include/cru/ui/mapper/style/ContentBrushStylerMapper.h new file mode 100644 index 00000000..04b19bf8 --- /dev/null +++ b/include/cru/ui/mapper/style/ContentBrushStylerMapper.h @@ -0,0 +1,25 @@ +#pragma once +#include "../Mapper.h" +#include "IStylerMapper.h" + +namespace cru::ui::mapper::style { +class ContentBrushStylerMapper + : public BasicClonablePtrMapper<ui::style::ContentBrushStyler>, + public virtual IStylerMapper { + public: + ContentBrushStylerMapper(); + ~ContentBrushStylerMapper() override; + + public: + bool SupportMapFromXml() override { return true; } + + ClonablePtr<ui::style::Styler> MapStylerFromXml( + xml::XmlElementNode* node) override { + return MapFromXml(node); + } + + protected: + ClonablePtr<ui::style::ContentBrushStyler> DoMapFromXml( + xml::XmlElementNode* node) override; +}; +} // namespace cru::ui::mapper::style diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index ce67c12c..4c272e12 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -44,6 +44,7 @@ add_library(cru_ui SHARED mapper/style/BorderStylerMapper.cpp mapper/style/CheckedConditionMapper.cpp mapper/style/ClickStateConditionMapper.cpp + mapper/style/ContentBrushStylerMapper.cpp mapper/style/CursorStylerMapper.cpp mapper/style/FocusConditionMapper.cpp mapper/style/HoverConditionMapper.cpp diff --git a/src/ui/mapper/MapperRegistry.cpp b/src/ui/mapper/MapperRegistry.cpp index f599c1ed..a8cb4157 100644 --- a/src/ui/mapper/MapperRegistry.cpp +++ b/src/ui/mapper/MapperRegistry.cpp @@ -14,6 +14,7 @@ #include "cru/ui/mapper/style/BorderStylerMapper.h" #include "cru/ui/mapper/style/CheckedConditionMapper.h" #include "cru/ui/mapper/style/ClickStateConditionMapper.h" +#include "cru/ui/mapper/style/ContentBrushStylerMapper.h" #include "cru/ui/mapper/style/CursorStylerMapper.h" #include "cru/ui/mapper/style/FocusConditionMapper.h" #include "cru/ui/mapper/style/HoverConditionMapper.h" @@ -49,6 +50,7 @@ MapperRegistry::MapperRegistry() { RegisterMapper(new BorderStylerMapper()); RegisterMapper(new CheckedConditionMapper()); RegisterMapper(new ClickStateConditionMapper()); + RegisterMapper(new ContentBrushStylerMapper()); RegisterMapper(new CursorStylerMapper()); RegisterMapper(new FocusConditionMapper()); RegisterMapper(new HoverConditionMapper()); diff --git a/src/ui/mapper/style/ContentBrushStylerMapper.cpp b/src/ui/mapper/style/ContentBrushStylerMapper.cpp new file mode 100644 index 00000000..e83f4988 --- /dev/null +++ b/src/ui/mapper/style/ContentBrushStylerMapper.cpp @@ -0,0 +1,30 @@ +#include "cru/ui/mapper/style/ContentBrushStylerMapper.h" +#include "cru/common/ClonablePtr.h" +#include "cru/platform/graphics/Brush.h" +#include "cru/ui/mapper/MapperRegistry.h" +#include "cru/ui/style/Styler.h" +#include "cru/xml/XmlNode.h" + +namespace cru::ui::mapper::style { +ContentBrushStylerMapper::ContentBrushStylerMapper() { + SetAllowedTags({u"ContentBrushStyler"}); +} + +ContentBrushStylerMapper::~ContentBrushStylerMapper() {} + +ClonablePtr<ui::style::ContentBrushStyler> +ContentBrushStylerMapper::DoMapFromXml(xml::XmlElementNode* node) { + auto brush_mapper = MapperRegistry::GetInstance() + ->GetSharedPtrMapper<platform::graphics::IBrush>(); + + std::shared_ptr<platform::graphics::IBrush> brush; + + for (auto child_node : node->GetChildren()) { + if (child_node->IsElementNode()) { + brush = brush_mapper->MapFromXml(child_node->AsElement()); + } + } + + return ui::style::ContentBrushStyler::Create(std::move(brush)); +} +} // namespace cru::ui::mapper::style |