Fixes
This commit is contained in:
@ -26,6 +26,9 @@
|
||||
|
||||
#include <IACore/File.hpp>
|
||||
|
||||
#include <IACore/Map.hpp>
|
||||
#include <map>
|
||||
|
||||
namespace ia::iae
|
||||
{
|
||||
class RmlUIRenderInterface : public Rml::RenderInterface
|
||||
@ -316,19 +319,42 @@ namespace ia::iae
|
||||
class EventListener : public Rml::EventListener
|
||||
{
|
||||
public:
|
||||
EventListener(IN Rml::ElementDocument *document) : m_document(document)
|
||||
{
|
||||
}
|
||||
|
||||
VOID AddClickListener(IN PCCHAR elementId, IN std::function<VOID()> callback)
|
||||
{
|
||||
m_document->GetElementById(elementId)->AddEventListener("click", this);
|
||||
m_clickCallbacks[elementId] = callback;
|
||||
}
|
||||
|
||||
VOID ProcessEvent(IN Rml::Event &event)
|
||||
{
|
||||
printf("Event recieved: %s\n", event.GetType().c_str());
|
||||
switch (event.GetId())
|
||||
{
|
||||
case Rml::EventId::Click:
|
||||
m_clickCallbacks[event.GetTargetElement()->GetId().c_str()]();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
Rml::ElementDocument *CONST m_document;
|
||||
Map<String, std::function<VOID()>> m_clickCallbacks;
|
||||
};
|
||||
} // namespace ia::iae
|
||||
|
||||
namespace ia::iae
|
||||
{
|
||||
Rml::Context *g_context{};
|
||||
EventListener *g_eventListener;
|
||||
BOOL g_debuggerEnabled{false};
|
||||
|
||||
std::map<Handle, EventListener *> g_eventListeners;
|
||||
|
||||
struct MainDataModel
|
||||
{
|
||||
Rml::String InputValues[10];
|
||||
@ -339,7 +365,6 @@ namespace ia::iae
|
||||
Rml::SetRenderInterface(&g_rmlUIRenderInterface);
|
||||
Rml::Initialise();
|
||||
g_context = Rml::CreateContext("main", Rml::Vector2i(width, height));
|
||||
g_eventListener = new EventListener();
|
||||
Rml::Debugger::Initialise(g_context);
|
||||
DisableDebugger();
|
||||
|
||||
@ -352,6 +377,9 @@ namespace ia::iae
|
||||
|
||||
VOID UI::Terminate()
|
||||
{
|
||||
for (auto &v : g_eventListeners)
|
||||
delete v.second;
|
||||
|
||||
Rml::Shutdown();
|
||||
}
|
||||
|
||||
@ -420,7 +448,10 @@ namespace ia::iae
|
||||
|
||||
Handle UI::AddWindowFromFile(IN CONST String &path)
|
||||
{
|
||||
return (Handle) g_context->LoadDocument(path.c_str());
|
||||
const auto w = g_context->LoadDocument(path.c_str());
|
||||
const auto handle = (Handle) w;
|
||||
g_eventListeners[handle] = new EventListener(w);
|
||||
return handle;
|
||||
}
|
||||
|
||||
VOID UI::ShowWindow(IN Handle handle)
|
||||
@ -435,8 +466,7 @@ namespace ia::iae
|
||||
|
||||
VOID UI::AddClickEvent(IN Handle handle, IN PCCHAR elementId, IN std::function<VOID()> callback)
|
||||
{
|
||||
const auto doc = reinterpret_cast<Rml::ElementDocument *>(handle);
|
||||
doc->AddEventListener("click", g_eventListener);
|
||||
g_eventListeners[handle]->AddClickListener(elementId, callback);
|
||||
}
|
||||
} // namespace ia::iae
|
||||
|
||||
|
||||
Reference in New Issue
Block a user