mirror of
https://github.com/kevinporetti/UnrealImGui.git
synced 2025-01-18 16:30:32 +00:00
5968c3ce84
- Added ImGui Input Handler class that allows to customize handling of the keyboard and gamepad input. - Added ImGui Settings to allow specify custom input handler implementation. - Added editor support for ImGui Settings. - Input handling in ImGui Widget is divided for querying the handler (more customizable) and actual input processing based on the handler’s response (fixed and simplified). - Removed a need for checking console state in different input handling functions in ImGui Widget by suppressing keyboard focus support when console is opened.
56 lines
1.5 KiB
C++
56 lines
1.5 KiB
C++
// Distributed under the MIT License (MIT) (see accompanying LICENSE file)
|
|
|
|
#include "ImGuiPrivatePCH.h"
|
|
|
|
#include "ImGuiInputHandlerFactory.h"
|
|
|
|
#include "ImGuiInputHandler.h"
|
|
#include "ImGuiSettings.h"
|
|
|
|
|
|
DEFINE_LOG_CATEGORY_STATIC(LogImGuiInputHandlerFactory, Warning, All);
|
|
|
|
UImGuiInputHandler* FImGuiInputHandlerFactory::NewHandler(FImGuiModuleManager* ModuleManager, UGameViewportClient* GameViewport, int32 ContextIndex)
|
|
{
|
|
UClass* HandlerClass = nullptr;
|
|
if (UImGuiSettings* Settings = GetMutableDefault<UImGuiSettings>())
|
|
{
|
|
const auto& HandlerClassReference = Settings->GetImGuiInputHandlerClass();
|
|
if (HandlerClassReference.IsValid())
|
|
{
|
|
HandlerClass = HandlerClassReference.TryLoadClass<UImGuiInputHandler>();
|
|
|
|
if (!HandlerClass)
|
|
{
|
|
UE_LOG(LogImGuiInputHandlerFactory, Error, TEXT("Couldn't load ImGui Input Handler class '%s'."), *HandlerClassReference.ToString());
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!HandlerClass)
|
|
{
|
|
HandlerClass = UImGuiInputHandler::StaticClass();
|
|
}
|
|
|
|
UImGuiInputHandler* Handler = NewObject<UImGuiInputHandler>(GameViewport, HandlerClass);
|
|
if (Handler)
|
|
{
|
|
Handler->Initialize(ModuleManager, GameViewport, ContextIndex);
|
|
Handler->AddToRoot();
|
|
}
|
|
else
|
|
{
|
|
UE_LOG(LogImGuiInputHandlerFactory, Error, TEXT("Failed attempt to create Input Handler: HandlerClass = %s."), *GetNameSafe(HandlerClass));
|
|
}
|
|
|
|
return Handler;
|
|
}
|
|
|
|
void FImGuiInputHandlerFactory::ReleaseHandler(UImGuiInputHandler* Handler)
|
|
{
|
|
if (Handler)
|
|
{
|
|
Handler->RemoveFromRoot();
|
|
}
|
|
}
|