Unfocus on Unhover for Button and Checkbox

This commit is contained in:
EmiStorrs 2024-12-03 17:47:04 -05:00
parent 2fa1f35b83
commit 75f38faa81
4 changed files with 59 additions and 2 deletions

View File

@ -109,5 +109,28 @@ void UFocusableButton::SlateHandleHovered()
void UFocusableButton::SlateHandleUnhovered() void UFocusableButton::SlateHandleUnhovered()
{ {
if (bLoseFocusOnUnhover)
{
Unfocus();
}
OnUnhovered.Broadcast(); OnUnhovered.Broadcast();
} }
void UFocusableButton::Unfocus() const
{
APlayerController* OwningPlayer = GetOwningPlayer();
if (OwningPlayer == nullptr || !OwningPlayer->IsLocalController() || OwningPlayer->Player ==
nullptr)
{
return;
}
if (ULocalPlayer* LocalPlayer = OwningPlayer->GetLocalPlayer())
{
TOptional<int32> UserIndex = FSlateApplication::Get().GetUserIndexForController(
LocalPlayer->GetControllerId());
if (UserIndex.IsSet())
{
FSlateApplication::Get().ClearUserFocus(UserIndex.GetValue());
}
}
}

View File

@ -95,5 +95,28 @@ void UFocusableCheckBox::SlateHandleHovered()
void UFocusableCheckBox::SlateHandleUnhovered() void UFocusableCheckBox::SlateHandleUnhovered()
{ {
if (bLoseFocusOnUnhover)
{
Unfocus();
}
OnUnhovered.Broadcast(); OnUnhovered.Broadcast();
} }
void UFocusableCheckBox::Unfocus() const
{
APlayerController* OwningPlayer = GetOwningPlayer();
if (OwningPlayer == nullptr || !OwningPlayer->IsLocalController() || OwningPlayer->Player ==
nullptr)
{
return;
}
if (ULocalPlayer* LocalPlayer = OwningPlayer->GetLocalPlayer())
{
TOptional<int32> UserIndex = FSlateApplication::Get().GetUserIndexForController(
LocalPlayer->GetControllerId());
if (UserIndex.IsSet())
{
FSlateApplication::Get().ClearUserFocus(UserIndex.GetValue());
}
}
}

View File

@ -38,6 +38,9 @@ public:
UPROPERTY(BlueprintReadWrite, EditAnywhere) UPROPERTY(BlueprintReadWrite, EditAnywhere)
bool bTakeFocusOnHover = true; bool bTakeFocusOnHover = true;
UPROPERTY(BlueprintReadWrite, EditAnywhere)
bool bLoseFocusOnUnhover = true;
// Simulate a button press // Simulate a button press
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
void SimulatePress(); void SimulatePress();
@ -56,6 +59,8 @@ protected:
void SlateHandleHovered(); void SlateHandleHovered();
void SlateHandleUnhovered(); void SlateHandleUnhovered();
void Unfocus() const;
virtual TSharedRef<SWidget> RebuildWidget() override; virtual TSharedRef<SWidget> RebuildWidget() override;

View File

@ -43,6 +43,10 @@ public:
UPROPERTY(BlueprintReadWrite, EditAnywhere) UPROPERTY(BlueprintReadWrite, EditAnywhere)
bool bTakeFocusOnHover = true; bool bTakeFocusOnHover = true;
UPROPERTY(BlueprintReadWrite, EditAnywhere)
bool bLoseFocusOnUnhover = true;
protected: protected:
FCheckBoxStyle FocussedStyle; FCheckBoxStyle FocussedStyle;
@ -54,6 +58,8 @@ protected:
void SlateHandleHovered(); void SlateHandleHovered();
void SlateHandleUnhovered(); void SlateHandleUnhovered();
void Unfocus() const;
virtual TSharedRef<SWidget> RebuildWidget() override; virtual TSharedRef<SWidget> RebuildWidget() override;
public: public: