Fixes
This commit is contained in:
@ -26,6 +26,9 @@
|
|||||||
|
|
||||||
#include <IACore/File.hpp>
|
#include <IACore/File.hpp>
|
||||||
|
|
||||||
|
#include <IACore/Map.hpp>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
namespace ia::iae
|
namespace ia::iae
|
||||||
{
|
{
|
||||||
class RmlUIRenderInterface : public Rml::RenderInterface
|
class RmlUIRenderInterface : public Rml::RenderInterface
|
||||||
@ -316,19 +319,42 @@ namespace ia::iae
|
|||||||
class EventListener : public Rml::EventListener
|
class EventListener : public Rml::EventListener
|
||||||
{
|
{
|
||||||
public:
|
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)
|
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
|
||||||
|
|
||||||
namespace ia::iae
|
namespace ia::iae
|
||||||
{
|
{
|
||||||
Rml::Context *g_context{};
|
Rml::Context *g_context{};
|
||||||
EventListener *g_eventListener;
|
|
||||||
BOOL g_debuggerEnabled{false};
|
BOOL g_debuggerEnabled{false};
|
||||||
|
|
||||||
|
std::map<Handle, EventListener *> g_eventListeners;
|
||||||
|
|
||||||
struct MainDataModel
|
struct MainDataModel
|
||||||
{
|
{
|
||||||
Rml::String InputValues[10];
|
Rml::String InputValues[10];
|
||||||
@ -339,7 +365,6 @@ namespace ia::iae
|
|||||||
Rml::SetRenderInterface(&g_rmlUIRenderInterface);
|
Rml::SetRenderInterface(&g_rmlUIRenderInterface);
|
||||||
Rml::Initialise();
|
Rml::Initialise();
|
||||||
g_context = Rml::CreateContext("main", Rml::Vector2i(width, height));
|
g_context = Rml::CreateContext("main", Rml::Vector2i(width, height));
|
||||||
g_eventListener = new EventListener();
|
|
||||||
Rml::Debugger::Initialise(g_context);
|
Rml::Debugger::Initialise(g_context);
|
||||||
DisableDebugger();
|
DisableDebugger();
|
||||||
|
|
||||||
@ -352,6 +377,9 @@ namespace ia::iae
|
|||||||
|
|
||||||
VOID UI::Terminate()
|
VOID UI::Terminate()
|
||||||
{
|
{
|
||||||
|
for (auto &v : g_eventListeners)
|
||||||
|
delete v.second;
|
||||||
|
|
||||||
Rml::Shutdown();
|
Rml::Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -420,7 +448,10 @@ namespace ia::iae
|
|||||||
|
|
||||||
Handle UI::AddWindowFromFile(IN CONST String &path)
|
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)
|
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)
|
VOID UI::AddClickEvent(IN Handle handle, IN PCCHAR elementId, IN std::function<VOID()> callback)
|
||||||
{
|
{
|
||||||
const auto doc = reinterpret_cast<Rml::ElementDocument *>(handle);
|
g_eventListeners[handle]->AddClickListener(elementId, callback);
|
||||||
doc->AddEventListener("click", g_eventListener);
|
|
||||||
}
|
}
|
||||||
} // namespace ia::iae
|
} // namespace ia::iae
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user