aboutsummaryrefslogtreecommitdiff
path: root/src/ui/mapper
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/mapper')
-rw-r--r--src/ui/mapper/BorderStyleMapper.cpp9
-rw-r--r--src/ui/mapper/BrushMapper.cpp40
2 files changed, 45 insertions, 4 deletions
diff --git a/src/ui/mapper/BorderStyleMapper.cpp b/src/ui/mapper/BorderStyleMapper.cpp
index 691f091d..1209df07 100644
--- a/src/ui/mapper/BorderStyleMapper.cpp
+++ b/src/ui/mapper/BorderStyleMapper.cpp
@@ -1,6 +1,7 @@
#include "cru/ui/mapper/BorderStyleMapper.hpp"
#include "../Helper.hpp"
#include "cru/common/Logger.hpp"
+#include "cru/platform/graphics/Brush.hpp"
#include "cru/platform/graphics/Factory.hpp"
#include "cru/ui/mapper/MapperRegistry.hpp"
#include "cru/ui/style/ApplyBorderStyleInfo.hpp"
@@ -27,14 +28,14 @@ ApplyBorderStyleInfo BorderStyleMapper::DoMapFromXml(
MapperRegistry::GetInstance()->GetMapper<Thickness>();
auto corner_radius_mapper =
MapperRegistry::GetInstance()->GetMapper<CornerRadius>();
- auto color_mapper = MapperRegistry::GetInstance()->GetMapper<Color>();
+ auto brush_mapper = MapperRegistry::GetInstance()
+ ->GetRefMapper<platform::graphics::IBrush>();
if (thickness_mapper->XmlElementIsOfThisType(c)) {
result.border_thickness = thickness_mapper->MapFromXml(c);
} else if (corner_radius_mapper->XmlElementIsOfThisType(c)) {
result.border_radius = corner_radius_mapper->MapFromXml(c);
- } else if (color_mapper->XmlElementIsOfThisType(c)) {
- auto brush = GetGraphicsFactory()->CreateSolidColorBrush(
- color_mapper->MapFromXml(c));
+ } else if (brush_mapper->XmlElementIsOfThisType(c)) {
+ auto brush = brush_mapper->MapFromXml(c);
auto name = c->GetOptionalAttributeCaseInsensitive(u"name");
if (name) {
if (name->CaseInsensitiveCompare(u"foreground") == 0) {
diff --git a/src/ui/mapper/BrushMapper.cpp b/src/ui/mapper/BrushMapper.cpp
new file mode 100644
index 00000000..bfaef507
--- /dev/null
+++ b/src/ui/mapper/BrushMapper.cpp
@@ -0,0 +1,40 @@
+#include "cru/ui/mapper/BrushMapper.hpp"
+#include "../Helper.hpp"
+#include "cru/platform/Color.hpp"
+#include "cru/platform/graphics/Brush.hpp"
+#include "cru/platform/graphics/Factory.hpp"
+#include "cru/ui/mapper/ColorMapper.hpp"
+#include "cru/ui/mapper/MapperRegistry.hpp"
+#include "cru/xml/XmlNode.hpp"
+
+#include <memory>
+
+namespace cru::ui::mapper {
+bool BrushMapper::XmlElementIsOfThisType(xml::XmlElementNode* node) {
+ auto color_mapper = MapperRegistry::GetInstance()->GetMapper<Color>();
+ return color_mapper->XmlElementIsOfThisType(node) ||
+ node->GetTag().CaseInsensitiveEqual(u"Brush");
+}
+
+std::shared_ptr<platform::graphics::IBrush> BrushMapper::DoMapFromXml(
+ xml::XmlElementNode* node) {
+ auto color_mapper = MapperRegistry::GetInstance()->GetMapper<Color>();
+
+ Color color = colors::transparent;
+
+ if (color_mapper->XmlElementIsOfThisType(node)) {
+ color = color_mapper->MapFromXml(node);
+ } else {
+ for (auto child : node->GetChildren()) {
+ if (child->IsElementNode()) {
+ auto c = child->AsElement();
+ if (color_mapper->XmlElementIsOfThisType(node)) {
+ color = color_mapper->MapFromXml(node);
+ }
+ }
+ }
+ }
+
+ return GetGraphicsFactory()->CreateSolidColorBrush(color);
+}
+} // namespace cru::ui::mapper