diff options
Diffstat (limited to 'src/ui')
-rw-r--r-- | src/ui/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/ui/mapper/ColorMapper.cpp | 23 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index 3050b8b8..1c8d8c85 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -26,6 +26,7 @@ add_library(cru_ui SHARED helper/ShortcutHub.cpp host/LayoutPaintCycler.cpp host/WindowHost.cpp + mapper/ColorMapper.cpp mapper/CornerRadiusMapper.cpp mapper/Mapper.cpp mapper/MapperRegistry.cpp diff --git a/src/ui/mapper/ColorMapper.cpp b/src/ui/mapper/ColorMapper.cpp new file mode 100644 index 00000000..be633a86 --- /dev/null +++ b/src/ui/mapper/ColorMapper.cpp @@ -0,0 +1,23 @@ +#include "cru/ui/mapper/ColorMapper.hpp" + +namespace cru::ui::mapper { +bool ColorMapper::XmlElementIsOfThisType(xml::XmlElementNode* node) { + return node->GetTag() == u"color"; +} + +std::unique_ptr<Color> ColorMapper::DoMapFromString(String str) { + auto c = Color::Parse(str); + if (!c) { + throw Exception(u"Invalid color value."); + } + return std::make_unique<Color>(*c); +} + +std::unique_ptr<Color> ColorMapper::DoMapFromXml(xml::XmlElementNode* node) { + auto value_attr = node->GetOptionalAttribute(u"value"); + if (!value_attr) { + return std::make_unique<Color>(colors::transparent); + } + return DoMapFromString(*value_attr); +} +} // namespace cru::ui::mapper |