#include "recomp_ui.h" #include "ui_helpers.h" #include "ui_api_images.h" #include "core/ui_context.h" #include "core/ui_resource.h" #include "elements/ui_element.h" #include "elements/ui_button.h" #include "elements/ui_clickable.h" #include "elements/ui_container.h" #include "elements/ui_image.h" #include "elements/ui_label.h" #include "elements/ui_radio.h" #include "elements/ui_scroll_container.h" #include "elements/ui_slider.h" #include "elements/ui_span.h" #include "elements/ui_style.h" #include "elements/ui_text_input.h" #include "elements/ui_toggle.h" #include "elements/ui_types.h" #include "librecomp/overlays.hpp" #include "librecomp/helpers.hpp" #include "librecomp/addresses.hpp" #include "ultramodern/error_handling.hpp" using namespace recompui; // Contexts void recompui_create_context(uint8_t* rdram, recomp_context* ctx) { (void)rdram; ContextId ui_context = create_context(); _return(ctx, ui_context.slot_id); } void recompui_open_context(uint8_t* rdram, recomp_context* ctx) { ContextId ui_context = get_context(rdram, ctx); ui_context.open(); } void recompui_close_context(uint8_t* rdram, recomp_context* ctx) { ContextId ui_context = get_context(rdram, ctx); ui_context.close(); } void recompui_context_root(uint8_t* rdram, recomp_context* ctx) { ContextId ui_context = get_context(rdram, ctx); (void)ui_context; return_resource(ctx, root_element_id); } void recompui_show_context(uint8_t* rdram, recomp_context* ctx) { ContextId ui_context = get_context(rdram, ctx); recompui::show_context(ui_context, ""); } void recompui_hide_context(uint8_t* rdram, recomp_context* ctx) { ContextId ui_context = get_context(rdram, ctx); recompui::hide_context(ui_context); } void recompui_set_context_captures_input(uint8_t* rdram, recomp_context* ctx) { ContextId ui_context = get_context(rdram, ctx); bool captures_input = _arg<1, int>(rdram, ctx) != 0; ui_context.set_captures_input(captures_input); } void recompui_set_context_captures_mouse(uint8_t* rdram, recomp_context* ctx) { ContextId ui_context = get_context(rdram, ctx); bool captures_mouse = _arg<1, int>(rdram, ctx) != 0; ui_context.set_captures_mouse(captures_mouse); } // Resources void recompui_create_style(uint8_t* rdram, recomp_context* ctx) { ContextId ui_context = get_context(rdram, ctx); Style* ret = ui_context.create_style(); return_resource(ctx, ret->get_resource_id()); } void recompui_create_element(uint8_t* rdram, recomp_context* ctx) { ContextId ui_context = get_context(rdram, ctx); Element* parent = arg_element<1>(rdram, ctx, ui_context); Element* ret = ui_context.create_element(parent); return_resource(ctx, ret->get_resource_id()); } void recompui_destroy_element(uint8_t* rdram, recomp_context* ctx) { Style* parent_resource = arg_style<0>(rdram, ctx); if (!parent_resource->is_element()) { recompui::message_box("Fatal error in mod - attempted to remove child from non-element or element not found in context"); assert(false); ultramodern::error_handling::quick_exit(__FILE__, __LINE__, __FUNCTION__); } Element* parent = static_cast(parent_resource); ResourceId to_remove = arg_resource_id<1>(rdram, ctx); if (!parent->remove_child(to_remove)) { recompui::message_box("Fatal error in mod - attempted to remove child from wrong parent"); assert(false); ultramodern::error_handling::quick_exit(__FILE__, __LINE__, __FUNCTION__); } } void recompui_create_button(uint8_t* rdram, recomp_context* ctx) { ContextId ui_context = get_context(rdram, ctx); Element* parent = arg_element<1>(rdram, ctx, ui_context); std::string text = _arg_string<2>(rdram, ctx); uint32_t style = _arg<3, uint32_t>(rdram, ctx); Button* ret = ui_context.create_element