aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-03-06 16:31:22 +0800
committercrupest <crupest@outlook.com>2022-03-06 16:31:22 +0800
commitafc40737f2dc990f4805342e52e2be128f161808 (patch)
tree0c9afd442ba670e95d3d0d087708ec0befbc71ed
parent1ddea64a948eca27f17a99f8601d737636be872b (diff)
downloadcru-afc40737f2dc990f4805342e52e2be128f161808.tar.gz
cru-afc40737f2dc990f4805342e52e2be128f161808.tar.bz2
cru-afc40737f2dc990f4805342e52e2be128f161808.zip
...
-rw-r--r--include/cru/ui/mapper/style/ContentBrushStylerMapper.h25
-rw-r--r--src/ui/CMakeLists.txt1
-rw-r--r--src/ui/mapper/MapperRegistry.cpp2
-rw-r--r--src/ui/mapper/style/ContentBrushStylerMapper.cpp30
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