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/style/StylerMapper.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/style/StylerMapper.cpp')
| -rw-r--r-- | src/ui/mapper/style/StylerMapper.cpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/src/ui/mapper/style/StylerMapper.cpp b/src/ui/mapper/style/StylerMapper.cpp new file mode 100644 index 00000000..f48b4d61 --- /dev/null +++ b/src/ui/mapper/style/StylerMapper.cpp @@ -0,0 +1,127 @@ +#include "cru/ui/mapper/style/StylerMapper.h" +#include "cru/base/ClonePtr.h" +#include "cru/base/xml/XmlNode.h" +#include "cru/ui/mapper/MapperRegistry.h" +#include "cru/ui/style/ApplyBorderStyleInfo.h" +#include "cru/ui/style/Styler.h" + +namespace cru::ui::mapper::style { +ClonePtr<BorderStyler> BorderStylerMapper::DoMapFromXml( + xml::XmlElementNode* node) { + auto border_style_mapper = + MapperRegistry::GetInstance()->GetMapper<ApplyBorderStyleInfo>(); + + ApplyBorderStyleInfo border_style; + + for (auto child : node->GetChildren()) { + if (child->GetType() == xml::XmlElementNode::Type::Element) { + auto child_element = child->AsElement(); + if (border_style_mapper->XmlElementIsOfThisType(child_element)) { + border_style = border_style_mapper->MapFromXml(child_element); + } + } + } + + return BorderStyler::Create(std::move(border_style)); +} + +ClonePtr<ui::style::ContentBrushStyler> ContentBrushStylerMapper::DoMapFromXml( + xml::XmlElementNode* node) { + auto brush_mapper = MapperRegistry::GetInstance() + ->GetSharedPtrMapper<platform::graphics::IBrush>(); + + std::shared_ptr<platform::graphics::IBrush> brush; + + for (auto child_node : node->GetChildren()) { + if (child_node->IsElementNode()) { + brush = brush_mapper->MapFromXml(child_node->AsElement()); + } + } + + return ui::style::ContentBrushStyler::Create(std::move(brush)); +} + +ClonePtr<ui::style::CursorStyler> CursorStylerMapper::DoMapFromXml( + xml::XmlElementNode* node) { + auto cursor_mapper = MapperRegistry::GetInstance() + ->GetSharedPtrMapper<platform::gui::ICursor>(); + std::shared_ptr<platform::gui::ICursor> cursor; + + for (auto child : node->GetChildren()) { + if (child->GetType() == xml::XmlNode::Type::Element && + cursor_mapper->XmlElementIsOfThisType(child->AsElement())) { + cursor = cursor_mapper->MapFromXml(child->AsElement()); + } + } + + return ui::style::CursorStyler::Create(cursor); +} + +ClonePtr<ui::style::FontStyler> FontStylerMapper::DoMapFromXml( + xml::XmlElementNode* node) { + auto font_mapper = MapperRegistry::GetInstance() + ->GetSharedPtrMapper<platform::graphics::IFont>(); + + std::shared_ptr<platform::graphics::IFont> font; + + for (auto child_node : node->GetChildren()) { + if (child_node->IsElementNode()) { + font = font_mapper->MapFromXml(child_node->AsElement()); + } + } + + return ui::style::FontStyler::Create(std::move(font)); +} + +ClonePtr<ui::style::MarginStyler> MarginStylerMapper::DoMapFromXml( + xml::XmlElementNode* node) { + Thickness thickness; + + auto thickness_mapper = MapperRegistry::GetInstance()->GetMapper<Thickness>(); + + auto value_attribute = + node->GetOptionalAttributeValueCaseInsensitive("value"); + if (value_attribute) { + thickness = thickness_mapper->MapFromString(*value_attribute); + } + + return ui::style::MarginStyler::Create(thickness); +} + +ClonePtr<ui::style::PaddingStyler> PaddingStylerMapper::DoMapFromXml( + xml::XmlElementNode* node) { + Thickness thickness; + + auto thickness_mapper = MapperRegistry::GetInstance()->GetMapper<Thickness>(); + + auto value_attribute = + node->GetOptionalAttributeValueCaseInsensitive("value"); + if (value_attribute) { + thickness = thickness_mapper->MapFromString(*value_attribute); + } + + return ui::style::PaddingStyler::Create(thickness); +} + +ClonePtr<ui::style::PreferredSizeStyler> +PreferredSizeStylerMapper::DoMapFromXml(xml::XmlElementNode* node) { + render::MeasureSize size; + + auto measure_length_mapper = + MapperRegistry::GetInstance()->GetMapper<render::MeasureLength>(); + + auto width_attribute = + node->GetOptionalAttributeValueCaseInsensitive("width"); + if (width_attribute) { + size.width = measure_length_mapper->MapFromString(*width_attribute); + } + + auto height_attribute = + node->GetOptionalAttributeValueCaseInsensitive("height"); + if (height_attribute) { + size.height = measure_length_mapper->MapFromString(*height_attribute); + } + + return ui::style::PreferredSizeStyler::Create(size); +} +} // namespace cru::ui::mapper::style |
