12#include <RmlUi/Core/Element.h>
13#include <RmlUi/Core/ElementDocument.h>
14#include <RmlUi/Core/ElementText.h>
15#include <RmlUi/Core/Event.h>
16#include <RmlUi/Core/EventListener.h>
38auto internal_m2n_ui_document_get_asset(entt::entity
id) -> hpp::uuid
42 return comp->asset.uid();
48void internal_m2n_ui_document_set_asset(entt::entity
id,
const hpp::uuid& uid)
53 auto& am = ctx.get_cached<asset_manager>();
55 auto asset = am.get_asset<ui_tree>(uid);
60auto internal_m2n_ui_document_is_loaded(entt::entity
id) ->
bool
64 return comp->is_loaded();
70auto internal_m2n_ui_document_is_enabled(entt::entity
id) ->
bool
74 return comp->is_enabled();
80void internal_m2n_ui_document_set_enabled(entt::entity
id,
bool enabled)
87void internal_m2n_ui_document_close(entt::entity
id)
93 comp->document->Close();
94 comp->document =
nullptr;
99auto internal_m2n_ui_document_get_title(entt::entity
id) ->
const std::string&
105 return comp->document->GetTitle();
109 static const std::string empty;
113void internal_m2n_ui_document_set_title(entt::entity
id,
const std::string&
title)
119 comp->document->SetTitle(
title);
139auto get_ui_element_safe(entt::entity entity_id,
const std::string& element_id) -> Rml::Element*
145 return comp->document->GetElementById(element_id);
167void dispatch_ui_event_to_manager(
const T& event_data)
172 const auto& script_cache = ctx.get_cached<script_system>().get_cache();
174 if(!script_cache.ui_dispatch_event_method.valid())
176 APPLOG_ERROR(
"UIEventManager.InternalDispatchEvent method not found");
180 auto method_invoker =
181 dotnet::make_method_invoker<void(const T&)>(script_cache.ui_dispatch_event_method,
false);
182 method_invoker(event_data);
184 catch (
const dotnet::exception& e)
186 APPLOG_ERROR(
"C# exception dispatching UI event: {}",
e.what());
188 catch (
const std::exception& e)
197enum class ui_event_type
208auto get_ui_event_type(
const Rml::Event&
event) -> ui_event_type
210 const auto event_id =
event.GetId();
213 if (event_id == Rml::EventId::Keydown || event_id == Rml::EventId::Keyup)
215 return ui_event_type::key;
219 if (event_id == Rml::EventId::Textinput)
221 return ui_event_type::textinput;
225 if (event_id == Rml::EventId::Click || event_id == Rml::EventId::Mousedown || event_id == Rml::EventId::Mouseup ||
226 event_id == Rml::EventId::Mousemove || event_id == Rml::EventId::Mouseover || event_id == Rml::EventId::Mouseout ||
227 event_id == Rml::EventId::Mousescroll || event_id == Rml::EventId::Dblclick || event_id == Rml::EventId::Drag ||
228 event_id == Rml::EventId::Dragstart || event_id == Rml::EventId::Dragover || event_id == Rml::EventId::Dragdrop)
230 return ui_event_type::pointer;
234 if (event_id == Rml::EventId::Change)
236 auto value_str =
event.GetParameter<std::string>(
"value",
"");
237 if (!value_str.empty())
240 if (
auto* element =
event.GetCurrentElement())
242 if (!element->HasAttribute(
"min") && !element->HasAttribute(
"max"))
244 return ui_event_type::change;
249 return ui_event_type::value;
255 return ui_event_type::unknown;
261 const Rml::Event&
event,
262 Rml::Element* target_element,
263 Rml::Element* current_element)
271 event_data.
phase =
static_cast<int>(
event.GetPhase());
275void dispatch_key_event_to_manager(
const Rml::Event&
event,
276 Rml::Element* target_element,
277 Rml::Element* current_element)
282 fill_base_event_data(key_event_data,
event, target_element, current_element);
285 auto key_identifier =
event.GetParameter<
int>(
"key_identifier", 0);
287 key_event_data.
ctrl_key =
event.GetParameter<
int>(
"ctrl_key", 0) > 0;
288 key_event_data.
shift_key =
event.GetParameter<
int>(
"shift_key", 0) > 0;
289 key_event_data.
alt_key =
event.GetParameter<
int>(
"alt_key", 0) > 0;
290 key_event_data.
meta_key =
event.GetParameter<
int>(
"meta_key", 0) > 0;
292 dispatch_ui_event_to_manager(key_event_data);
296void dispatch_pointer_event_to_manager(
const Rml::Event&
event,
297 Rml::Element* target_element,
298 Rml::Element* current_element)
303 fill_base_event_data(pointer_event_data,
event, target_element, current_element);
306 pointer_event_data.
x =
event.GetParameter<
float>(
"mouse_x", 0.0f);
307 pointer_event_data.
y =
event.GetParameter<
float>(
"mouse_y", 0.0f);
308 pointer_event_data.
button =
event.GetParameter<
int>(
"button", -1);
309 pointer_event_data.
ctrl_key =
event.GetParameter<
int>(
"ctrl_key", 0) > 0;
310 pointer_event_data.
shift_key =
event.GetParameter<
int>(
"shift_key", 0) > 0;
311 pointer_event_data.
alt_key =
event.GetParameter<
int>(
"alt_key", 0) > 0;
312 pointer_event_data.
meta_key =
event.GetParameter<
int>(
"meta_key", 0) > 0;
313 pointer_event_data.
delta_x =
event.GetParameter<
float>(
"wheel_delta_x", 0.0f);
314 pointer_event_data.
delta_y =
event.GetParameter<
float>(
"wheel_delta_y", 0.0f);
316 dispatch_ui_event_to_manager(pointer_event_data);
321void dispatch_textinput_event_to_manager(
const Rml::Event&
event,
322 Rml::Element* target_element,
323 Rml::Element* current_element)
327 fill_base_event_data(textinput_event_data,
event, target_element, current_element);
331 textinput_event_data.
text =
event.GetParameter<std::string>(
"text",
"");
332 textinput_event_data.
ctrl_key =
event.GetParameter<
int>(
"ctrl_key", 0) > 0;
333 textinput_event_data.
shift_key =
event.GetParameter<
int>(
"shift_key", 0) > 0;
334 textinput_event_data.
alt_key =
event.GetParameter<
int>(
"alt_key", 0) > 0;
335 textinput_event_data.
meta_key =
event.GetParameter<
int>(
"meta_key", 0) > 0;
338 dispatch_ui_event_to_manager(textinput_event_data);
342void dispatch_value_event_to_manager(
const Rml::Event&
event,
343 Rml::Element* target_element,
344 Rml::Element* current_element)
349 fill_base_event_data(value_event_data,
event, target_element, current_element);
352 value_event_data.
value =
event.GetParameter<
float>(
"value", 0);
354 if(
auto* slider_element =
event.GetCurrentElement())
356 value_event_data.
min_value = slider_element->GetAttribute<
float>(
"min", 0);
357 value_event_data.
max_value = slider_element->GetAttribute<
float>(
"max", 0);
358 value_event_data.
step = slider_element->GetAttribute<
float>(
"step", 0);
361 dispatch_ui_event_to_manager(value_event_data);
365void dispatch_change_event_to_manager(
const Rml::Event&
event,
366 Rml::Element* target_element,
367 Rml::Element* current_element)
372 fill_base_event_data(change_event_data,
event, target_element, current_element);
375 change_event_data.
value =
event.GetParameter<std::string>(
"value",
"");
377 dispatch_ui_event_to_manager(change_event_data);
382void dispatch_base_event_to_manager(
const Rml::Event&
event,
383 Rml::Element* target_element,
384 Rml::Element* current_element)
387 fill_base_event_data(event_data,
event, target_element, current_element);
388 dispatch_ui_event_to_manager(event_data);
392class ui_global_event_listener :
public Rml::EventListener
394 Rml::Event* current_event_ =
nullptr;
396 void ProcessEvent(Rml::Event&
event)
override
398 current_event_ = &
event;
402 auto* target_element =
event.GetTargetElement();
408 auto* current_element =
event.GetCurrentElement();
409 if (!current_element)
415 const auto event_type = get_ui_event_type(
event);
419 case ui_event_type::key:
420 dispatch_key_event_to_manager(
event, target_element, current_element);
423 case ui_event_type::textinput:
424 dispatch_textinput_event_to_manager(
event, target_element, current_element);
427 case ui_event_type::pointer:
428 dispatch_pointer_event_to_manager(
event, target_element, current_element);
431 case ui_event_type::change:
432 dispatch_change_event_to_manager(
event, target_element, current_element);
435 case ui_event_type::value:
436 dispatch_value_event_to_manager(
event, target_element, current_element);
439 case ui_event_type::unknown:
442 dispatch_base_event_to_manager(
event, target_element, current_element);
446 catch (
const std::exception& e)
450 current_event_ =
nullptr;
454 auto get_current_event() const ->
Rml::Event*
456 return current_event_;
461ui_global_event_listener g_ui_global_listener;
464void internal_m2n_ui_ensure_native_event_listener(std::intptr_t element_ptr,
const std::string& event_type)
466 if (element_ptr == 0)
473 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
477 element->AddEventListener(event_type, &g_ui_global_listener);
479 APPLOG_TRACE(
"Ensured native UI event listener: element='{}', event='{}'", element->GetId(), event_type);
481 catch (
const dotnet::exception& e)
483 APPLOG_ERROR(
"C# exception ensuring native UI event listener: {}",
e.what());
485 catch (
const std::exception& e)
487 APPLOG_ERROR(
"Error ensuring native UI event listener: {}",
e.what());
492void internal_m2n_ui_stop_propagation(std::intptr_t native_ptr)
497 auto* current_event = g_ui_global_listener.get_current_event();
498 if (current_event && current_event ==
reinterpret_cast<Rml::Event*
>(native_ptr))
500 current_event->StopPropagation();
508 catch (
const std::exception& e)
510 APPLOG_ERROR(
"Error stopping UI event propagation: {}",
e.what());
515void internal_m2n_ui_stop_immediate_propagation(std::intptr_t native_ptr)
519 auto* current_event = g_ui_global_listener.get_current_event();
522 current_event->StopImmediatePropagation();
526 APPLOG_WARNING(
"No current UI event to stop immediate propagation on");
529 catch (
const std::exception& e)
531 APPLOG_ERROR(
"Error stopping UI event immediate propagation: {}",
e.what());
550auto validate_ui_element_wrapper(std::intptr_t element_ptr, entt::entity owner_entity) ->
bool
552 if (element_ptr == 0)
557 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
565 return comp->document->Contains(element);
573auto validate_ui_document_wrapper(std::intptr_t document_ptr, entt::entity owner_entity) ->
bool
575 if (document_ptr == 0)
580 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
585 if (comp->document && comp->document == document)
598auto internal_m2n_ui_document_get_wrapper(entt::entity entity_id) -> std::intptr_t
604 return reinterpret_cast<std::intptr_t
>(comp->document);
610auto internal_m2n_ui_document_get_element_wrapper_by_id(std::intptr_t document_ptr, entt::entity owner_entity,
const std::string& element_id) -> std::intptr_t
612 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
617 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
618 auto* element = document->GetElementById(element_id);
619 return reinterpret_cast<std::intptr_t
>(element);
622auto internal_m2n_ui_document_query_selector_wrapper(std::intptr_t document_ptr, entt::entity owner_entity,
const std::string& selector) -> std::intptr_t
624 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
629 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
630 auto element = document->QuerySelector(selector);
633 return reinterpret_cast<std::intptr_t
>(element);
640auto internal_m2n_ui_element_wrapper_get_id(std::intptr_t element_ptr, entt::entity owner_entity) -> std::string
642 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
647 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
648 return element->GetId();
655auto internal_m2n_ui_document_wrapper_is_valid(std::intptr_t document_ptr, entt::entity owner_entity) ->
bool
657 return validate_ui_document_wrapper(document_ptr, owner_entity);
660auto internal_m2n_ui_document_wrapper_get_title(std::intptr_t document_ptr, entt::entity owner_entity) -> std::string
662 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
667 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
668 return document->GetTitle();
671void internal_m2n_ui_document_wrapper_set_title(std::intptr_t document_ptr, entt::entity owner_entity,
const std::string&
title)
673 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
678 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
679 document->SetTitle(
title);
682auto internal_m2n_ui_document_wrapper_is_visible(std::intptr_t document_ptr, entt::entity owner_entity) ->
bool
684 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
689 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
690 return document->IsVisible();
693void internal_m2n_ui_document_wrapper_show(std::intptr_t document_ptr, entt::entity owner_entity)
695 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
700 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
704void internal_m2n_ui_document_wrapper_hide(std::intptr_t document_ptr, entt::entity owner_entity)
706 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
711 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
715void internal_m2n_ui_document_wrapper_close(std::intptr_t document_ptr, entt::entity owner_entity)
717 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
722 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
730auto internal_m2n_ui_element_wrapper_is_valid(std::intptr_t element_ptr, entt::entity owner_entity) ->
bool
732 return validate_ui_element_wrapper(element_ptr, owner_entity);
735auto internal_m2n_ui_element_wrapper_get_inner_rml(std::intptr_t element_ptr, entt::entity owner_entity) -> std::string
737 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
742 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
743 return element->GetInnerRML();
746void internal_m2n_ui_element_wrapper_set_inner_rml(std::intptr_t element_ptr, entt::entity owner_entity,
const std::string& rml)
748 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
753 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
754 auto* element_text = rmlui_dynamic_cast<Rml::ElementText*>(element);
758 if(
auto* first_child = element->GetFirstChild())
760 element_text = rmlui_dynamic_cast<Rml::ElementText*>(first_child);
766 element_text->SetText(rml);
770 auto current_rml = element->GetInnerRML();
771 if(current_rml != rml)
773 element->SetInnerRML(rml);
778auto internal_m2n_ui_element_wrapper_is_visible(std::intptr_t element_ptr, entt::entity owner_entity) ->
bool
780 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
785 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
786 return element->IsVisible();
789void internal_m2n_ui_element_wrapper_set_visible(std::intptr_t element_ptr, entt::entity owner_entity,
bool visible)
791 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
796 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
799 element->SetProperty(
"display",
"block");
803 element->SetProperty(
"display",
"none");
807auto internal_m2n_ui_element_wrapper_get_attribute(std::intptr_t element_ptr, entt::entity owner_entity,
const std::string& attribute_name) -> std::string
809 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
814 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
815 return element->GetAttribute<Rml::String>(attribute_name,
"");
818void internal_m2n_ui_element_wrapper_set_attribute(std::intptr_t element_ptr, entt::entity owner_entity,
const std::string& attribute_name,
const std::string& value)
820 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
825 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
826 element->SetAttribute(attribute_name, value);
829void internal_m2n_ui_element_wrapper_remove_attribute(std::intptr_t element_ptr, entt::entity owner_entity,
const std::string& attribute_name)
831 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
836 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
837 element->RemoveAttribute(attribute_name);
840auto internal_m2n_ui_element_wrapper_has_attribute(std::intptr_t element_ptr, entt::entity owner_entity,
const std::string& attribute_name) ->
bool
842 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
847 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
848 return element->HasAttribute(attribute_name);
851void internal_m2n_ui_element_wrapper_set_class(std::intptr_t element_ptr, entt::entity owner_entity,
const std::string& class_name,
bool activate)
853 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
858 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
859 element->SetClass(class_name, activate);
862auto internal_m2n_ui_element_wrapper_is_class_set(std::intptr_t element_ptr, entt::entity owner_entity,
const std::string& class_name) ->
bool
864 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
869 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
870 return element->IsClassSet(class_name);
873void internal_m2n_ui_element_wrapper_sync_transform_to_entity(std::intptr_t element_ptr, entt::entity owner_entity, entt::entity transform_entity)
881 auto* transform_comp =
transform.try_get<transform_component>();
887 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
892 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
894 const auto& matrix = transform_comp->get_transform_global().get_matrix();
897 float perspective = transform_comp->get_perspective_global().w;
900 s <<
"perspective(" << perspective <<
"dp) ";
902 s <<
"matrix3d(" << matrix[0][0] <<
", " << matrix[0][1] <<
", " << matrix[0][2] <<
", " << matrix[0][3] <<
", " << matrix[1][0] <<
", " << matrix[1][1] <<
", " << matrix[1][2] <<
", " << matrix[1][3] <<
", " << matrix[2][0] <<
", " << matrix[2][1] <<
", " << matrix[2][2] <<
", " << matrix[2][3] <<
", " << matrix[3][0] <<
", " << matrix[3][1] <<
", " << matrix[3][2] <<
", " << matrix[3][3] <<
")";
903 element->SetProperty(
"transform",
s.str());
906void internal_m2n_ui_element_wrapper_focus(std::intptr_t element_ptr, entt::entity owner_entity)
908 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
913 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
917void internal_m2n_ui_element_wrapper_blur(std::intptr_t element_ptr, entt::entity owner_entity)
919 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
924 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
928void internal_m2n_ui_element_wrapper_click(std::intptr_t element_ptr, entt::entity owner_entity)
930 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
935 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
939void internal_m2n_ui_element_wrapper_scroll_into_view(std::intptr_t element_ptr, entt::entity owner_entity,
bool align_with_top)
941 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
946 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
947 element->ScrollIntoView(align_with_top);
958 auto reg = dotnet::internal_call_registry(
"Unravel.Core.UIDocumentComponent");
959 reg.add_internal_call(
"internal_m2n_ui_document_get_asset", dotnet_internal_call(internal_m2n_ui_document_get_asset));
960 reg.add_internal_call(
"internal_m2n_ui_document_set_asset", dotnet_internal_call(internal_m2n_ui_document_set_asset));
961 reg.add_internal_call(
"internal_m2n_ui_document_is_loaded", dotnet_internal_call(internal_m2n_ui_document_is_loaded));
962 reg.add_internal_call(
"internal_m2n_ui_document_is_enabled", dotnet_internal_call(internal_m2n_ui_document_is_enabled));
963 reg.add_internal_call(
"internal_m2n_ui_document_set_enabled", dotnet_internal_call(internal_m2n_ui_document_set_enabled));
964 reg.add_internal_call(
"internal_m2n_ui_document_close", dotnet_internal_call(internal_m2n_ui_document_close));
965 reg.add_internal_call(
"internal_m2n_ui_document_get_title", dotnet_internal_call(internal_m2n_ui_document_get_title));
966 reg.add_internal_call(
"internal_m2n_ui_document_set_title", dotnet_internal_call(internal_m2n_ui_document_set_title));
967 reg.add_internal_call(
"internal_m2n_ui_document_get_wrapper", dotnet_internal_call(internal_m2n_ui_document_get_wrapper));
975 auto reg = dotnet::internal_call_registry(
"Unravel.Core.UIDocument");
976 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_is_valid", dotnet_internal_call(internal_m2n_ui_document_wrapper_is_valid));
977 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_get_title", dotnet_internal_call(internal_m2n_ui_document_wrapper_get_title));
978 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_set_title", dotnet_internal_call(internal_m2n_ui_document_wrapper_set_title));
979 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_is_visible", dotnet_internal_call(internal_m2n_ui_document_wrapper_is_visible));
980 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_show", dotnet_internal_call(internal_m2n_ui_document_wrapper_show));
981 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_hide", dotnet_internal_call(internal_m2n_ui_document_wrapper_hide));
982 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_close", dotnet_internal_call(internal_m2n_ui_document_wrapper_close));
983 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_get_element_by_id", dotnet_internal_call(internal_m2n_ui_document_get_element_wrapper_by_id));
984 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_query_selector", dotnet_internal_call(internal_m2n_ui_document_query_selector_wrapper));
985 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_query_selector_all", dotnet_internal_call(internal_m2n_ui_document_query_selector_wrapper));
993 auto reg = dotnet::internal_call_registry(
"Unravel.Core.UIElement");
994 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_is_valid", dotnet_internal_call(internal_m2n_ui_element_wrapper_is_valid));
995 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_get_inner_rml", dotnet_internal_call(internal_m2n_ui_element_wrapper_get_inner_rml));
996 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_set_inner_rml", dotnet_internal_call(internal_m2n_ui_element_wrapper_set_inner_rml));
997 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_is_visible", dotnet_internal_call(internal_m2n_ui_element_wrapper_is_visible));
998 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_set_visible", dotnet_internal_call(internal_m2n_ui_element_wrapper_set_visible));
999 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_get_attribute", dotnet_internal_call(internal_m2n_ui_element_wrapper_get_attribute));
1000 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_set_attribute", dotnet_internal_call(internal_m2n_ui_element_wrapper_set_attribute));
1001 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_remove_attribute", dotnet_internal_call(internal_m2n_ui_element_wrapper_remove_attribute));
1002 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_has_attribute", dotnet_internal_call(internal_m2n_ui_element_wrapper_has_attribute));
1003 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_set_class", dotnet_internal_call(internal_m2n_ui_element_wrapper_set_class));
1004 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_is_class_set", dotnet_internal_call(internal_m2n_ui_element_wrapper_is_class_set));
1005 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_sync_transform_to_entity", dotnet_internal_call(internal_m2n_ui_element_wrapper_sync_transform_to_entity));
1006 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_focus", dotnet_internal_call(internal_m2n_ui_element_wrapper_focus));
1007 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_blur", dotnet_internal_call(internal_m2n_ui_element_wrapper_blur));
1008 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_click", dotnet_internal_call(internal_m2n_ui_element_wrapper_click));
1009 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_scroll_into_view", dotnet_internal_call(internal_m2n_ui_element_wrapper_scroll_into_view));
1010 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_get_id", dotnet_internal_call(internal_m2n_ui_element_wrapper_get_id));
1018 auto reg = dotnet::internal_call_registry(
"Unravel.Core.UIEventManager");
1019 reg.add_internal_call(
"internal_m2n_ui_ensure_native_event_listener", dotnet_internal_call(internal_m2n_ui_ensure_native_event_listener));
1022 auto reg = dotnet::internal_call_registry(
"Unravel.Core.UIEventBase");
1023 reg.add_internal_call(
"internal_m2n_ui_stop_propagation", dotnet_internal_call(internal_m2n_ui_stop_propagation));
1024 reg.add_internal_call(
"internal_m2n_ui_stop_immediate_propagation", dotnet_internal_call(internal_m2n_ui_stop_immediate_propagation));
#define APPLOG_WARNING(...)
#define APPLOG_ERROR(...)
#define APPLOG_TRACE(...)
bgfx::Transform transform
auto convert_rml_key_to_input(Rml::Input::KeyIdentifier rml_key) -> input::key_code
Convert RmlUi key identifier to engine input key code.
void register_ui_document_script_bindings()
void register_ui_element_script_bindings()
void register_ui_event_script_bindings()
void register_ui_document_component_script_bindings()
auto get_entity_from_id(entt::entity id) -> entt::handle
auto safe_get_component(entt::entity id) -> T *
std::intptr_t target_element_ptr
std::string target_element_id
std::intptr_t current_element_ptr
std::string current_element_id
static auto context() -> rtti::context &