Fix some issues with new root canvas stuff
This commit is contained in:
@@ -18,33 +18,6 @@ UlxRootCanvasSlot::UlxRootCanvasSlot(const FObjectInitializer& ObjectInitializer
|
||||
SetOffsets(FMargin(0.0f, 0.0f, 0.0f, 0.0f));
|
||||
}
|
||||
|
||||
void UlxRootCanvasSlot::SetZOrderReliable(int32 Order)
|
||||
{
|
||||
if (SlotUnderConstruction)
|
||||
{
|
||||
PRAGMA_DISABLE_DEPRECATION_WARNINGS
|
||||
ZOrder = Order;
|
||||
PRAGMA_ENABLE_DEPRECATION_WARNINGS
|
||||
}
|
||||
else
|
||||
{
|
||||
SetZOrder(Order);
|
||||
}
|
||||
}
|
||||
|
||||
int32 UlxRootCanvasSlot::GetZOrderReliable()
|
||||
{
|
||||
if (SlotUnderConstruction)
|
||||
{
|
||||
PRAGMA_DISABLE_DEPRECATION_WARNINGS
|
||||
return ZOrder;
|
||||
PRAGMA_ENABLE_DEPRECATION_WARNINGS
|
||||
}
|
||||
else
|
||||
{
|
||||
return GetZOrder();
|
||||
}
|
||||
}
|
||||
|
||||
UClass* UlxRootCanvasPanel::GetSlotClass() const
|
||||
{
|
||||
@@ -70,16 +43,24 @@ UlxRootCanvasSlot* UlxRootCanvasPanel::AddChildToRootCanvas(UWidget* Content)
|
||||
return Cast<UlxRootCanvasSlot>(Super::AddChild(Content));
|
||||
}
|
||||
|
||||
int32 UlxRootCanvasPanel::GetMaxZOrder() const
|
||||
void UlxRootCanvasPanel::OnSlotAdded(UPanelSlot* InSlot)
|
||||
{
|
||||
int32 MaxZOrder = 0;
|
||||
for (UPanelSlot *PanelSlot : Slots)
|
||||
UlxRootCanvasSlot *Slot = CastChecked<UlxRootCanvasSlot>(InSlot);
|
||||
Slot->BringToFrontCount = ++BringToFrontCounter;
|
||||
Super::OnSlotAdded(InSlot);
|
||||
}
|
||||
|
||||
|
||||
UlxRootCanvasSlot* UlxRootCanvasPanel::GetTopWidget()
|
||||
{
|
||||
UlxRootCanvasSlot* Top = nullptr;
|
||||
for (UPanelSlot* PanelSlot : Slots)
|
||||
{
|
||||
UlxRootCanvasSlot *TypedSlot = Cast<UlxRootCanvasSlot>(PanelSlot);
|
||||
check(TypedSlot);
|
||||
MaxZOrder = FMath::Max(MaxZOrder, TypedSlot->GetZOrderReliable());
|
||||
UlxRootCanvasSlot* Slot = CastChecked<UlxRootCanvasSlot>(PanelSlot);
|
||||
if (Cast<UUserWidget>(Slot->Content) == nullptr) continue;
|
||||
if ((Top == nullptr) || (*Top < *Slot)) Top = Slot;
|
||||
}
|
||||
return MaxZOrder;
|
||||
return Top;
|
||||
}
|
||||
|
||||
TArray<UlxRootCanvasSlot*> UlxRootCanvasPanel::GetSortedUserWidgets()
|
||||
@@ -95,12 +76,33 @@ TArray<UlxRootCanvasSlot*> UlxRootCanvasPanel::GetSortedUserWidgets()
|
||||
}
|
||||
Result.StableSort([](const UlxRootCanvasSlot &A, const UlxRootCanvasSlot &B)
|
||||
{
|
||||
return A.GetZOrder() > B.GetZOrder();
|
||||
return A < B;
|
||||
});
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
void UlxRootCanvasPanel::UpdateZOrders()
|
||||
{
|
||||
for (UPanelSlot *PanelSlot : Slots)
|
||||
{
|
||||
UlxRootCanvasSlot *Slot = Cast<UlxRootCanvasSlot>(PanelSlot);
|
||||
check(Slot);
|
||||
int32 ZOrder = (Slot->ShowPointer ? 1000000 : 0) + Slot->BringToFrontCount;
|
||||
Slot->SetZOrder(ZOrder);
|
||||
}
|
||||
}
|
||||
|
||||
void UlxRootCanvasPanel::BringToFront(UUserWidget *Widget)
|
||||
{
|
||||
if (!IsValid(Widget)) return;
|
||||
UlxRootCanvasSlot *Slot = Cast<UlxRootCanvasSlot>(Widget->Slot);
|
||||
if (!Slot) return;
|
||||
UlxRootCanvasPanel *Panel = Cast<UlxRootCanvasPanel>(Slot->Parent);
|
||||
if (!Panel) return;
|
||||
Slot->BringToFrontCount = ++Panel->BringToFrontCounter;
|
||||
}
|
||||
|
||||
void UlxRootCanvasPanel::SetWidgetWindowManagement(class UUserWidget *Widget,
|
||||
bool ShowPointer, bool BlockInput, bool EnableEnhancedInput, bool BringToFront, UWidget *DesiredFocusWidget)
|
||||
{
|
||||
@@ -120,7 +122,15 @@ void UlxRootCanvasPanel::SetWidgetWindowManagement(class UUserWidget *Widget,
|
||||
Slot->ShowPointer = ShowPointer;
|
||||
Slot->BlockInput = BlockInput;
|
||||
Slot->EnableEnhancedInput = EnableEnhancedInput;
|
||||
Widget->SetDesiredFocusWidget(DesiredFocusWidget);
|
||||
if (BringToFront) Slot->SetZOrderReliable(Panel->GetMaxZOrder() + 1);
|
||||
if (DesiredFocusWidget)
|
||||
{
|
||||
if (!Widget->SetDesiredFocusWidget(DesiredFocusWidget))
|
||||
UE_LOG(LogLuprexIntegration, Error, TEXT("SetWidgetWindowManagement: focus widget must be a child of widget"));
|
||||
}
|
||||
else
|
||||
{
|
||||
Widget->SetDesiredFocusWidget(NAME_None);
|
||||
}
|
||||
if (BringToFront) Slot->BringToFrontCount = ++Panel->BringToFrontCounter;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user