mirror of
https://github.com/Zelda64Recomp/Zelda64Recomp.git
synced 2026-01-15 19:22:26 +00:00
52 lines
2.1 KiB
C++
52 lines
2.1 KiB
C++
#include "ui_elements.h"
|
|
#include "librecomp/config.hpp"
|
|
|
|
struct RecompElementConfig {
|
|
Rml::String tag;
|
|
std::unique_ptr<Rml::ElementInstancer> instancer;
|
|
};
|
|
|
|
#define CUSTOM_ELEMENT(s, e) { s, std::make_unique< Rml::ElementInstancerGeneric< e > >() }
|
|
|
|
static RecompElementConfig custom_elements[] = {
|
|
CUSTOM_ELEMENT("recomp-description", recompui::ElementDescription),
|
|
CUSTOM_ELEMENT("recomp-config-group", recompui::ElementConfigGroup),
|
|
CUSTOM_ELEMENT("recomp-config-option", recompui::ElementConfigOption),
|
|
CUSTOM_ELEMENT("recomp-option-type-button", recompui::ElementOptionTypeButton),
|
|
CUSTOM_ELEMENT("recomp-option-type-checkbox", recompui::ElementOptionTypeCheckbox),
|
|
CUSTOM_ELEMENT("recomp-option-type-color", recompui::ElementOptionTypeColor),
|
|
CUSTOM_ELEMENT("recomp-option-type-dropdown", recompui::ElementOptionTypeDropdown),
|
|
CUSTOM_ELEMENT("recomp-option-type-textfield", recompui::ElementOptionTypeTextField),
|
|
CUSTOM_ELEMENT("recomp-option-type-radio-tabs", recompui::ElementOptionTypeRadioTabs),
|
|
CUSTOM_ELEMENT("recomp-option-type-range", recompui::ElementOptionTypeRange),
|
|
CUSTOM_ELEMENT("recomp-mod-menu", recompui::ElementModMenu),
|
|
};
|
|
|
|
void recompui::register_custom_elements() {
|
|
for (auto& element_config : custom_elements) {
|
|
Rml::Factory::RegisterElementInstancer(element_config.tag, element_config.instancer.get());
|
|
}
|
|
}
|
|
|
|
Rml::ElementInstancer* recompui::get_custom_element_instancer(std::string tag) {
|
|
for (auto& element_config : custom_elements) {
|
|
if (tag == element_config.tag) {
|
|
return element_config.instancer.get();
|
|
}
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
Rml::ElementPtr recompui::create_custom_element(Rml::Element* parent, std::string tag) {
|
|
auto instancer = recompui::get_custom_element_instancer(tag);
|
|
const Rml::XMLAttributes attributes = {};
|
|
if (Rml::ElementPtr element = instancer->InstanceElement(parent, tag, attributes))
|
|
{
|
|
element->SetInstancer(instancer);
|
|
element->SetAttributes(attributes);
|
|
|
|
return element;
|
|
}
|
|
|
|
return nullptr;
|
|
}
|