Cleanup in SImGuiWidget:

- Removed mouse status update.
- Removed mouse notifications.
- Removed unused function to copy modifier keys on mouse events (key down/up versions are still in use).
This commit is contained in:
Sebastian 2019-06-23 15:21:43 +01:00
parent 2d728f1f26
commit 22c5b42387
3 changed files with 1 additions and 51 deletions

View File

@ -9,7 +9,7 @@ Dear ImGui is an immediate-mode graphical user interface library that is very li
Status
------
Version: 1.16
Version: 1.17 WIP
ImGui version: 1.65

View File

@ -130,8 +130,6 @@ void SImGuiWidget::Tick(const FGeometry& AllottedGeometry, const double InCurren
{
Super::Tick(AllottedGeometry, InCurrentTime, InDeltaTime);
UpdateMouseStatus();
// Note: Moving that update to console variable sink or callback might seem like a better alternative but input
// setup in this function is better handled here.
UpdateInputEnabled();
@ -239,32 +237,24 @@ FReply SImGuiWidget::OnAnalogValueChanged(const FGeometry& MyGeometry, const FAn
FReply SImGuiWidget::OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
{
InputState.SetMouseDown(MouseEvent, true);
CopyModifierKeys(MouseEvent);
return FReply::Handled();
}
FReply SImGuiWidget::OnMouseButtonDoubleClick(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
{
InputState.SetMouseDown(MouseEvent, true);
CopyModifierKeys(MouseEvent);
return FReply::Handled();
}
FReply SImGuiWidget::OnMouseButtonUp(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
{
InputState.SetMouseDown(MouseEvent, false);
CopyModifierKeys(MouseEvent);
return FReply::Handled();
}
FReply SImGuiWidget::OnMouseWheel(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
{
InputState.AddMouseWheelDelta(MouseEvent.GetWheelDelta());
CopyModifierKeys(MouseEvent);
return FReply::Handled();
}
@ -272,11 +262,6 @@ FReply SImGuiWidget::OnMouseMove(const FGeometry& MyGeometry, const FPointerEven
{
const FSlateRenderTransform ImGuiToScreen = ImGuiTransform.Concatenate(MyGeometry.GetAccumulatedRenderTransform());
InputState.SetMousePosition(ImGuiToScreen.Inverse().TransformPoint(MouseEvent.GetScreenSpacePosition()));
CopyModifierKeys(MouseEvent);
// This event is called in every frame when we have a mouse, so we can use it to raise notifications.
NotifyMouseEvent();
return FReply::Handled();
}
@ -395,14 +380,6 @@ void SImGuiWidget::CopyModifierKeys(const FInputEvent& InputEvent)
InputState.SetAltDown(InputEvent.IsAltDown());
}
void SImGuiWidget::CopyModifierKeys(const FPointerEvent& MouseEvent)
{
if (InputMode == EInputMode::MousePointerOnly)
{
CopyModifierKeys(static_cast<const FInputEvent&>(MouseEvent));
}
}
bool SImGuiWidget::IsConsoleOpened() const
{
return GameViewport->ViewportConsole && GameViewport->ViewportConsole->ConsoleState != NAME_None;
@ -548,29 +525,11 @@ void SImGuiWidget::UpdateInputMode(bool bHasKeyboardFocus, bool bHasMousePointer
}
InputMode = NewInputMode;
ClearMouseEventNotification();
}
InputState.SetMousePointer(bUseSoftwareCursor && bHasMousePointer);
}
void SImGuiWidget::UpdateMouseStatus()
{
// Note: Mouse leave events can get lost if other viewport takes mouse capture (for instance console is opened by
// different viewport when this widget is hovered). With that we lose a chance to cleanup and hide ImGui pointer.
// We could either update ImGui pointer in every frame or like below, use mouse events to catch when mouse is lost.
if (InputMode == EInputMode::MousePointerOnly)
{
if (!HasMouseEventNotification())
{
UpdateInputMode(false, IsDirectlyHovered());
}
ClearMouseEventNotification();
}
}
void SImGuiWidget::UpdateCanvasControlMode(const FInputEvent& InputEvent)
{
CanvasControlWidget->SetActive(InputEvent.IsLeftAltDown() && InputEvent.IsLeftShiftDown());

View File

@ -96,7 +96,6 @@ private:
void UnregisterImGuiSettingsDelegates();
FORCEINLINE void CopyModifierKeys(const FInputEvent& InputEvent);
FORCEINLINE void CopyModifierKeys(const FPointerEvent& MouseEvent);
bool IsConsoleOpened() const;
@ -107,18 +106,11 @@ private:
void TakeFocus();
void ReturnFocus();
// Update input enabled state from console variable.
void UpdateInputEnabled();
// Determine new input mode based on hints.
void UpdateInputMode(bool bHasKeyboardFocus, bool bHasMousePointer);
void UpdateMouseStatus();
FORCEINLINE bool HasMouseEventNotification() const { return bReceivedMouseEvent; }
FORCEINLINE void NotifyMouseEvent() { bReceivedMouseEvent = true; }
FORCEINLINE void ClearMouseEventNotification() { bReceivedMouseEvent = false; }
void UpdateCanvasControlMode(const FInputEvent& InputEvent);
void OnPostImGuiUpdate();
@ -149,7 +141,6 @@ private:
EInputMode InputMode = EInputMode::None;
bool bInputEnabled = false;
bool bReceivedMouseEvent = false;
// Whether or not ImGui should draw its own cursor.
bool bUseSoftwareCursor = false;