mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-07-04 03:12:48 -04:00
Revamped prelaunch experiment w/ RmlUi
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
#include "element.hpp"
|
||||
|
||||
#include <RmlUi/Core/ElementDocument.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace dusk::ui {
|
||||
|
||||
std::string escape(std::string_view text) {
|
||||
std::string result;
|
||||
result.reserve(text.size());
|
||||
for (char c : text) {
|
||||
switch (c) {
|
||||
case '&':
|
||||
result += "&";
|
||||
break;
|
||||
case '<':
|
||||
result += "<";
|
||||
break;
|
||||
case '>':
|
||||
result += ">";
|
||||
break;
|
||||
case '"':
|
||||
result += """;
|
||||
break;
|
||||
case '\'':
|
||||
result += "'";
|
||||
break;
|
||||
default:
|
||||
result += c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Rml::Element* append(Rml::Element* parent, std::string_view tag, std::string_view id) {
|
||||
if (parent == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Rml::ElementDocument* document = parent->GetOwnerDocument();
|
||||
if (document == nullptr) {
|
||||
document = dynamic_cast<Rml::ElementDocument*>(parent);
|
||||
}
|
||||
if (document == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Rml::ElementPtr child = document->CreateElement(std::string(tag));
|
||||
Rml::Element* rawChild = child.get();
|
||||
if (!id.empty()) {
|
||||
rawChild->SetId(std::string(id));
|
||||
}
|
||||
return parent->AppendChild(std::move(child));
|
||||
}
|
||||
|
||||
Rml::Element* append_text(Rml::Element* parent, std::string_view tag, std::string_view text,
|
||||
std::string_view id) {
|
||||
Rml::Element* element = append(parent, tag, id);
|
||||
set_text(element, text);
|
||||
return element;
|
||||
}
|
||||
|
||||
void set_text(Rml::Element* element, std::string_view text) {
|
||||
if (element != nullptr) {
|
||||
element->SetInnerRML(escape(text));
|
||||
}
|
||||
}
|
||||
|
||||
void set_props(Rml::Element* element,
|
||||
std::initializer_list<std::pair<std::string_view, std::string_view> > properties) {
|
||||
if (element == nullptr) {
|
||||
return;
|
||||
}
|
||||
for (const auto& [name, value] : properties) {
|
||||
element->SetProperty(std::string(name), std::string(value));
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace dusk::ui
|
||||
Reference in New Issue
Block a user