aboutsummaryrefslogtreecommitdiff
path: root/src/ui/mapper/BrushMapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/mapper/BrushMapper.cpp')
-rw-r--r--src/ui/mapper/BrushMapper.cpp36
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