diff options
author | crupest <crupest@outlook.com> | 2022-01-27 20:07:15 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-01-27 20:07:15 +0800 |
commit | 56633dab8c1bf9d25a6367a651b5b054055a2130 (patch) | |
tree | d372843e3f6f91604a077ed15c353bedd5ef7e1b /src/ui/mapper | |
parent | d3aa43d9ea0dfc32935767cf60a89af2736dc339 (diff) | |
download | cru-56633dab8c1bf9d25a6367a651b5b054055a2130.tar.gz cru-56633dab8c1bf9d25a6367a651b5b054055a2130.tar.bz2 cru-56633dab8c1bf9d25a6367a651b5b054055a2130.zip |
...
Diffstat (limited to 'src/ui/mapper')
-rw-r--r-- | src/ui/mapper/BorderStyleMapper.cpp | 9 | ||||
-rw-r--r-- | src/ui/mapper/BrushMapper.cpp | 40 |
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 |