diff options
| author | Yuqian Yang <crupest@crupest.life> | 2025-12-15 21:27:33 +0800 |
|---|---|---|
| committer | Yuqian Yang <crupest@crupest.life> | 2025-12-15 21:27:33 +0800 |
| commit | c77072d586bf7aca58e6465ceab3d11a0be0021f (patch) | |
| tree | 83605be90fd32104ef74bbd1d84d900aaf0271ce /src/ui/mapper/BrushMapper.cpp | |
| parent | bc3fa9650699046f3a87a620282ee43f26b2fa75 (diff) | |
| download | cru-c77072d586bf7aca58e6465ceab3d11a0be0021f.tar.gz cru-c77072d586bf7aca58e6465ceab3d11a0be0021f.tar.bz2 cru-c77072d586bf7aca58e6465ceab3d11a0be0021f.zip | |
Clean up mapper codes.
Diffstat (limited to 'src/ui/mapper/BrushMapper.cpp')
| -rw-r--r-- | src/ui/mapper/BrushMapper.cpp | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/src/ui/mapper/BrushMapper.cpp b/src/ui/mapper/BrushMapper.cpp index 6a3d7941..d6fb8e4c 100644 --- a/src/ui/mapper/BrushMapper.cpp +++ b/src/ui/mapper/BrushMapper.cpp @@ -1,10 +1,9 @@ #include "cru/ui/mapper/BrushMapper.h" -#include "cru/base/StringUtil.h" #include "cru/base/xml/XmlNode.h" -#include "cru/platform/Color.h" #include "cru/platform/graphics/Brush.h" #include "cru/platform/graphics/Factory.h" #include "cru/platform/gui/UiApplication.h" +#include "cru/ui/mapper/Mapper.h" #include "cru/ui/mapper/MapperRegistry.h" #include <memory> @@ -12,31 +11,34 @@ namespace cru::ui::mapper { bool BrushMapper::XmlElementIsOfThisType(xml::XmlElementNode* node) { auto color_mapper = MapperRegistry::GetInstance()->GetMapper<Color>(); - return color_mapper->XmlElementIsOfThisType(node) || - cru::string::CaseInsensitiveCompare(node->GetTag(), "Brush") == 0; + return color_mapper->XmlElementIsOfThisType(node) || node->HasTag("Brush"); } std::shared_ptr<platform::graphics::IBrush> BrushMapper::DoMapFromXml( xml::XmlElementNode* node) { + auto graphics_factory = + platform::gui::IUiApplication::GetInstance()->GetGraphicsFactory(); auto color_mapper = MapperRegistry::GetInstance()->GetMapper<Color>(); - Color color = colors::transparent; + try { + auto color = color_mapper->MapFromXml(node); + return graphics_factory->CreateSolidColorBrush(color); + } catch (const MapException&) { + } - 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); - } + for (auto child : node->GetChildren()) { + if (auto c = child->AsElement()) { + if (color_mapper->XmlElementIsOfThisType(node)) { + auto color = color_mapper->MapFromXml(node); + return graphics_factory->CreateSolidColorBrush(color); + } else { + throw MapException("Invalid child element of Brush."); } + } else if (child->IsTextNode()) { + throw MapException("Text node is not allowed in Brush."); } } - return platform::gui::IUiApplication::GetInstance() - ->GetGraphicsFactory() - ->CreateSolidColorBrush(color); + throw MapException("Brush doesn't have content."); } } // namespace cru::ui::mapper |
