aboutsummaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-01-22 00:30:08 +0800
committercrupest <crupest@outlook.com>2022-01-22 00:30:08 +0800
commitbc1f7cce2440310c2544bf3ea48b44dc4ff04eac (patch)
tree332737f28edd231bb0d74e262054ba80f8959709 /src/ui
parent83eb8263b1c1970bac4f811fdd2e221df63145e1 (diff)
downloadcru-bc1f7cce2440310c2544bf3ea48b44dc4ff04eac.tar.gz
cru-bc1f7cce2440310c2544bf3ea48b44dc4ff04eac.tar.bz2
cru-bc1f7cce2440310c2544bf3ea48b44dc4ff04eac.zip
...
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/CMakeLists.txt1
-rw-r--r--src/ui/mapper/ColorMapper.cpp23
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