UnrealImGui/Source/ImGui/Private/ImGuiInputHandlerFactory.cpp
Sebastian 5968c3ce84 Added ImGui Input Handler and ImGui Settings:
- 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.
2018-07-10 17:40:57 +01:00

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();
}
}