This commit is contained in:
Isuru Samarathunga
2025-10-12 16:39:29 +05:30
parent 09131d7fab
commit 4380705f81
18 changed files with 511 additions and 94 deletions

View File

@ -52,10 +52,71 @@ namespace ia::iae
{
}
VOID ProcessEvent(IN Rml::Event &event)
VOID AddClickListener(IN Rml::Element *element, IN std::function<VOID()> callback)
{
element->AddEventListener("click", this);
m_clickCallbacks[element->GetId().c_str()] = callback;
}
// VOID AddHoverEnterListener(IN PCCHAR elementId, IN std::function<VOID()> callback)
//{
// m_document->GetElementById(elementId)->AddEventListener("mouseover", this);
// m_hoverEnterCallbacks[elementId] = callback;
// }
//
// VOID AddHoverExitListener(IN PCCHAR elementId, IN std::function<VOID()> callback)
//{
// m_document->GetElementById(elementId)->AddEventListener("mouseout", this);
// m_hoverExitCallbacks[elementId] = callback;
//}
//
// VOID AddPointerDownListener(IN PCCHAR elementId, IN std::function<VOID()> callback)
//{
// m_document->GetElementById(elementId)->AddEventListener("mousedown", this);
// m_pointerDownCallbacks[elementId] = callback;
//}
//
// VOID AddPointerUpListener(IN PCCHAR elementId, IN std::function<VOID()> callback)
//{
// m_document->GetElementById(elementId)->AddEventListener("mouseup", this);
// m_pointerUpCallbacks[elementId] = callback;
//}
VOID ProcessEvent(IN Rml::Event &event)
{
switch (event.GetId())
{
case Rml::EventId::Click:
m_clickCallbacks[event.GetTargetElement()->GetId().c_str()]();
break;
case Rml::EventId::Mouseover:
m_hoverEnterCallbacks[event.GetTargetElement()->GetId().c_str()]();
break;
case Rml::EventId::Mouseout:
m_hoverExitCallbacks[event.GetTargetElement()->GetId().c_str()]();
break;
case Rml::EventId::Mousedown:
m_pointerDownCallbacks[event.GetTargetElement()->GetId().c_str()]();
break;
case Rml::EventId::Mouseup:
m_pointerUpCallbacks[event.GetTargetElement()->GetId().c_str()]();
break;
default:
break;
}
}
private:
Map<String, std::function<VOID()>> m_clickCallbacks;
Map<String, std::function<VOID()>> m_hoverEnterCallbacks;
Map<String, std::function<VOID()>> m_hoverExitCallbacks;
Map<String, std::function<VOID()>> m_pointerDownCallbacks;
Map<String, std::function<VOID()>> m_pointerUpCallbacks;
} g_eventListener{};
/* Taken from https://github.com/mikke89/RmlUi/blob/master/Backends/RmlUi_Platform_SDL.cpp */
@ -396,6 +457,11 @@ namespace ia::iae
g_document->SetInnerRML(
BuildString("<body style=\"display: block; width: 100%; height: 100%;\">", source, "</body>").c_str());
}
VOID UI::AddClickEvent(IN PCCHAR elementId, IN std::function<VOID()> callback)
{
g_eventListener.AddClickListener(g_document->GetElementById(elementId), callback);
}
} // namespace ia::iae
namespace ia::iae