// Copyright Epic Games, Inc. All Rights Reserved. #pragma once template class TToolCompatibleMixin; template void TToolCompatibleMixin::Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime) { ToolCompatibleWidget::Tick(AllottedGeometry, InCurrentTime, InDeltaTime); if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { WidgetModeManager->Tick(nullptr, InDeltaTime); } } template FReply TToolCompatibleMixin::OnFocusReceived(const FGeometry& MyGeometry, const FFocusEvent& InFocusEvent) { FReply Reply = ToolCompatibleWidget::OnFocusReceived(MyGeometry, InFocusEvent); if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { WidgetModeManager->ReceivedFocus(nullptr, nullptr); } return Reply; } template void TToolCompatibleMixin::OnFocusLost(const FFocusEvent& InFocusEvent) { ToolCompatibleWidget::OnFocusLost(InFocusEvent); if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { WidgetModeManager->LostFocus(nullptr, nullptr); } } template FReply TToolCompatibleMixin::OnKeyChar(const FGeometry& MyGeometry, const FCharacterEvent& InCharacterEvent) { if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { if (WidgetModeManager->OnKeyChar(MyGeometry, InCharacterEvent)) { return FReply::Handled(); } } return ToolCompatibleWidget::OnKeyChar(MyGeometry, InCharacterEvent); } template FReply TToolCompatibleMixin::OnKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent) { if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { if (WidgetModeManager->OnKeyDown(MyGeometry, InKeyEvent)) { return FReply::Handled(); } } return ToolCompatibleWidget::OnKeyDown(MyGeometry, InKeyEvent); } template FReply TToolCompatibleMixin::OnKeyUp(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent) { if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { if (WidgetModeManager->OnKeyUp(MyGeometry, InKeyEvent)) { return FReply::Handled(); } } return ToolCompatibleWidget::OnKeyUp(MyGeometry, InKeyEvent); } template FReply TToolCompatibleMixin::OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) { if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { if (WidgetModeManager->OnMouseButtonDown(MyGeometry, MouseEvent)) { return FReply::Handled(); } } return ToolCompatibleWidget::OnMouseButtonDown(MyGeometry, MouseEvent); } template FReply TToolCompatibleMixin::OnMouseButtonUp(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) { if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { if (WidgetModeManager->OnMouseButtonUp(MyGeometry, MouseEvent)) { return FReply::Handled(); } } return ToolCompatibleWidget::OnMouseButtonUp(MyGeometry, MouseEvent); } template FReply TToolCompatibleMixin::OnMouseMove(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) { FReply Reply = ToolCompatibleWidget::OnMouseMove(MyGeometry, MouseEvent); if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { WidgetModeManager->OnMouseMove(MyGeometry, MouseEvent); } return Reply; } template void TToolCompatibleMixin::OnMouseEnter(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) { ToolCompatibleWidget::OnMouseEnter(MyGeometry, MouseEvent); if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { WidgetModeManager->MouseEnter(nullptr, nullptr, FMath::TruncToInt32(MouseEvent.GetScreenSpacePosition().X), FMath::TruncToInt32(MouseEvent.GetScreenSpacePosition().Y)); } } template void TToolCompatibleMixin::OnMouseLeave(const FPointerEvent& MouseEvent) { ToolCompatibleWidget::OnMouseLeave(MouseEvent); if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { WidgetModeManager->MouseLeave(nullptr, nullptr); } } template FReply TToolCompatibleMixin::OnMouseWheel(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) { if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { if (WidgetModeManager->OnMouseWheel(MyGeometry, MouseEvent)) { return FReply::Handled(); } } return ToolCompatibleWidget::OnMouseWheel(MyGeometry, MouseEvent); } template FReply TToolCompatibleMixin::OnMouseButtonDoubleClick(const FGeometry& InMyGeometry, const FPointerEvent& InMouseEvent) { if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { if (WidgetModeManager->OnMouseButtonDoubleClick(InMyGeometry, InMouseEvent)) { return FReply::Handled(); } } return ToolCompatibleWidget::OnMouseButtonDoubleClick(InMyGeometry, InMouseEvent); } template FReply TToolCompatibleMixin::OnDragDetected(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) { if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { if (WidgetModeManager->OnDragDetected(MyGeometry, MouseEvent)) { return FReply::Handled(); } } return ToolCompatibleWidget::OnDragDetected(MyGeometry, MouseEvent); } template void TToolCompatibleMixin::OnMouseCaptureLost(const FCaptureLostEvent& CaptureLostEvent) { ToolCompatibleWidget::OnMouseCaptureLost(CaptureLostEvent); if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { WidgetModeManager->OnMouseCaptureLost(CaptureLostEvent); } } template TOptional TToolCompatibleMixin::GetCursor() const { if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { EMouseCursor::Type EditorModeCursor = EMouseCursor::Default; if (WidgetModeManager->GetCursor(EditorModeCursor)) { return EditorModeCursor; } } return ToolCompatibleWidget::GetCursor(); } template int32 TToolCompatibleMixin::OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGeometry, const FSlateRect& MyCullingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId, const FWidgetStyle& InWidgetStyle, bool bParentEnabled) const { int32 OutLayerId = ToolCompatibleWidget::OnPaint(Args, AllottedGeometry, MyCullingRect, OutDrawElements, LayerId, InWidgetStyle, bParentEnabled); if (FWidgetModeManager* WidgetModeManager = GetWidgetModeManger()) { return WidgetModeManager->OnPaint(Args, AllottedGeometry, MyCullingRect, OutDrawElements, OutLayerId, InWidgetStyle, bParentEnabled); } return OutLayerId; } template void TToolCompatibleMixin::SetParentToolkit(TSharedPtr InParentToolkit) { ParentToolkit = InParentToolkit; } template TSharedPtr TToolCompatibleMixin::GetParentToolkit() { return ParentToolkit.Pin(); } template FWidgetModeManager* TToolCompatibleMixin::GetWidgetModeManger() const { if (TSharedPtr ParentToolkitPtr = ParentToolkit.Pin()) { return static_cast(&ParentToolkitPtr->GetEditorModeManager()); } return nullptr; }