mirror of
https://github.com/kevinporetti/UnrealImGui.git
synced 2025-01-30 12:50:33 +00:00
Acquire size of ImGUI canvas from game viewport (#27)
- WIP: Does not support multi-PIE. All instances get the same size. - Setting to enable/disable adaptive size.
This commit is contained in:
parent
73cdfe8d83
commit
174e38cfc6
@ -139,13 +139,17 @@ void FImGuiContextProxy::Tick(float DeltaSeconds)
|
|||||||
bHasActiveItem = ImGui::IsAnyItemActive();
|
bHasActiveItem = ImGui::IsAnyItemActive();
|
||||||
bIsMouseHoveringAnyWindow = ImGui::IsWindowHovered(ImGuiHoveredFlags_AnyWindow);
|
bIsMouseHoveringAnyWindow = ImGui::IsWindowHovered(ImGuiHoveredFlags_AnyWindow);
|
||||||
MouseCursor = ImGuiInterops::ToSlateMouseCursor(ImGui::GetMouseCursor());
|
MouseCursor = ImGuiInterops::ToSlateMouseCursor(ImGui::GetMouseCursor());
|
||||||
DisplaySize = ImGuiInterops::ToVector2D(ImGui::GetIO().DisplaySize);
|
|
||||||
|
|
||||||
// Begin a new frame and set the context back to a state in which it allows to draw controls.
|
// Begin a new frame and set the context back to a state in which it allows to draw controls.
|
||||||
BeginFrame(DeltaSeconds);
|
BeginFrame(DeltaSeconds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FImGuiContextProxy::SetAdaptiveCanvasSize(bool bAdaptive)
|
||||||
|
{
|
||||||
|
bAdaptiveCanvasSize = bAdaptive;
|
||||||
|
}
|
||||||
|
|
||||||
void FImGuiContextProxy::BeginFrame(float DeltaTime)
|
void FImGuiContextProxy::BeginFrame(float DeltaTime)
|
||||||
{
|
{
|
||||||
if (!bIsFrameStarted)
|
if (!bIsFrameStarted)
|
||||||
@ -156,6 +160,17 @@ void FImGuiContextProxy::BeginFrame(float DeltaTime)
|
|||||||
ImGuiInterops::CopyInput(IO, InputState);
|
ImGuiInterops::CopyInput(IO, InputState);
|
||||||
InputState.ClearUpdateState();
|
InputState.ClearUpdateState();
|
||||||
|
|
||||||
|
if (bAdaptiveCanvasSize) {
|
||||||
|
if (GEngine && GEngine->GameViewport)
|
||||||
|
{
|
||||||
|
GEngine->GameViewport->GetViewportSize(DisplaySize);
|
||||||
|
IO.DisplaySize = ImVec2(DisplaySize.X, DisplaySize.Y);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
IO.DisplaySize = { DEFAULT_CANVAS_WIDTH, DEFAULT_CANVAS_HEIGHT };
|
||||||
|
DisplaySize = ImGuiInterops::ToVector2D(IO.DisplaySize);
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::NewFrame();
|
ImGui::NewFrame();
|
||||||
|
|
||||||
bWantsMouseCapture = IO.WantCaptureMouse;
|
bWantsMouseCapture = IO.WantCaptureMouse;
|
||||||
|
@ -71,6 +71,9 @@ public:
|
|||||||
// Tick to advance context to the next frame. Only one call per frame will be processed.
|
// Tick to advance context to the next frame. Only one call per frame will be processed.
|
||||||
void Tick(float DeltaSeconds);
|
void Tick(float DeltaSeconds);
|
||||||
|
|
||||||
|
// Set the adaptive canvas size configuration.
|
||||||
|
void SetAdaptiveCanvasSize(bool);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void BeginFrame(float DeltaTime = 1.f / 60.f);
|
void BeginFrame(float DeltaTime = 1.f / 60.f);
|
||||||
@ -111,4 +114,6 @@ private:
|
|||||||
FSimpleMulticastDelegate* SharedDrawEvent = nullptr;
|
FSimpleMulticastDelegate* SharedDrawEvent = nullptr;
|
||||||
|
|
||||||
std::string IniFilename;
|
std::string IniFilename;
|
||||||
|
|
||||||
|
bool bAdaptiveCanvasSize = false;
|
||||||
};
|
};
|
||||||
|
@ -175,6 +175,7 @@ void FImGuiModuleManager::AddWidgetToViewport(UGameViewportClient* GameViewport)
|
|||||||
// Make sure that we have a context for this viewport's world and get its index.
|
// Make sure that we have a context for this viewport's world and get its index.
|
||||||
int32 ContextIndex;
|
int32 ContextIndex;
|
||||||
auto& ContextProxy = ContextManager.GetWorldContextProxy(*GameViewport->GetWorld(), ContextIndex);
|
auto& ContextProxy = ContextManager.GetWorldContextProxy(*GameViewport->GetWorld(), ContextIndex);
|
||||||
|
ContextProxy.SetAdaptiveCanvasSize(Settings.AdaptiveCanvasSize());
|
||||||
|
|
||||||
// Make sure that textures are loaded before the first Slate widget is created.
|
// Make sure that textures are loaded before the first Slate widget is created.
|
||||||
LoadTextures();
|
LoadTextures();
|
||||||
|
@ -103,6 +103,7 @@ void FImGuiModuleSettings::UpdateSettings()
|
|||||||
SetShareMouseInput(SettingsObject->bShareMouseInput);
|
SetShareMouseInput(SettingsObject->bShareMouseInput);
|
||||||
SetUseSoftwareCursor(SettingsObject->bUseSoftwareCursor);
|
SetUseSoftwareCursor(SettingsObject->bUseSoftwareCursor);
|
||||||
SetToggleInputKey(SettingsObject->ToggleInput);
|
SetToggleInputKey(SettingsObject->ToggleInput);
|
||||||
|
SetAdaptiveCanvasSize(SettingsObject->bAdaptiveCanvasSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,6 +161,14 @@ void FImGuiModuleSettings::SetToggleInputKey(const FImGuiKeyInfo& KeyInfo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FImGuiModuleSettings::SetAdaptiveCanvasSize(bool bAdaptive)
|
||||||
|
{
|
||||||
|
if (bAdaptiveCanvasSize != bAdaptive)
|
||||||
|
{
|
||||||
|
bAdaptiveCanvasSize = bAdaptive;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if WITH_EDITOR
|
#if WITH_EDITOR
|
||||||
|
|
||||||
void FImGuiModuleSettings::OnPropertyChanged(class UObject* ObjectBeingModified, struct FPropertyChangedEvent& PropertyChangedEvent)
|
void FImGuiModuleSettings::OnPropertyChanged(class UObject* ObjectBeingModified, struct FPropertyChangedEvent& PropertyChangedEvent)
|
||||||
|
@ -103,6 +103,10 @@ protected:
|
|||||||
UPROPERTY(EditAnywhere, config, Category = "Keyboard Shortcuts")
|
UPROPERTY(EditAnywhere, config, Category = "Keyboard Shortcuts")
|
||||||
FImGuiKeyInfo ToggleInput;
|
FImGuiKeyInfo ToggleInput;
|
||||||
|
|
||||||
|
// If true, the size of ImGui canvas will be adaptive to game viewport.
|
||||||
|
UPROPERTY(EditAnywhere, config, Category = "Canvas Size")
|
||||||
|
bool bAdaptiveCanvasSize = false;
|
||||||
|
|
||||||
// Deprecated name for ToggleInput. Kept temporarily to automatically move old configuration.
|
// Deprecated name for ToggleInput. Kept temporarily to automatically move old configuration.
|
||||||
UPROPERTY(config)
|
UPROPERTY(config)
|
||||||
FImGuiKeyInfo SwitchInputModeKey_DEPRECATED;
|
FImGuiKeyInfo SwitchInputModeKey_DEPRECATED;
|
||||||
@ -148,6 +152,9 @@ public:
|
|||||||
// Get the shortcut configuration for 'ImGui.ToggleInput' command.
|
// Get the shortcut configuration for 'ImGui.ToggleInput' command.
|
||||||
const FImGuiKeyInfo& GetToggleInputKey() const { return ToggleInputKey; }
|
const FImGuiKeyInfo& GetToggleInputKey() const { return ToggleInputKey; }
|
||||||
|
|
||||||
|
// Get the adaptive canvas size configuration.
|
||||||
|
bool AdaptiveCanvasSize() const { return bAdaptiveCanvasSize; }
|
||||||
|
|
||||||
// Delegate raised when ImGui Input Handle is changed.
|
// Delegate raised when ImGui Input Handle is changed.
|
||||||
FStringClassReferenceChangeDelegate OnImGuiInputHandlerClassChanged;
|
FStringClassReferenceChangeDelegate OnImGuiInputHandlerClassChanged;
|
||||||
|
|
||||||
@ -164,6 +171,7 @@ private:
|
|||||||
void SetShareMouseInput(bool bShare);
|
void SetShareMouseInput(bool bShare);
|
||||||
void SetUseSoftwareCursor(bool bUse);
|
void SetUseSoftwareCursor(bool bUse);
|
||||||
void SetToggleInputKey(const FImGuiKeyInfo& KeyInfo);
|
void SetToggleInputKey(const FImGuiKeyInfo& KeyInfo);
|
||||||
|
void SetAdaptiveCanvasSize(bool bAdaptive);
|
||||||
|
|
||||||
#if WITH_EDITOR
|
#if WITH_EDITOR
|
||||||
void OnPropertyChanged(class UObject* ObjectBeingModified, struct FPropertyChangedEvent& PropertyChangedEvent);
|
void OnPropertyChanged(class UObject* ObjectBeingModified, struct FPropertyChangedEvent& PropertyChangedEvent);
|
||||||
@ -178,4 +186,5 @@ private:
|
|||||||
bool bShareGamepadInput = false;
|
bool bShareGamepadInput = false;
|
||||||
bool bShareMouseInput = false;
|
bool bShareMouseInput = false;
|
||||||
bool bUseSoftwareCursor = false;
|
bool bUseSoftwareCursor = false;
|
||||||
|
bool bAdaptiveCanvasSize = false;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user