Skip to content

Commit ac845cb

Browse files
committed
Removed CanvasObject->AddToRoot(), fixed problem in UJavascriptEditorViewport::ProjectWorldToScreen/DeprojectSceneToWorld()
1 parent 256dcf5 commit ac845cb

File tree

4 files changed

+45
-39
lines changed

4 files changed

+45
-39
lines changed

Source/JavascriptEditor/JavascriptEdMode.cpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,28 @@ PRAGMA_DISABLE_SHADOW_VARIABLE_WARNINGS
99

1010
#if WITH_EDITOR
1111

12+
/** Util to find named canvas in transient package, and create if not found */
13+
static UCanvas* GetCanvasByName(FName CanvasName)
14+
{
15+
// Cache to avoid FString/FName conversions/compares
16+
static TMap<FName, UCanvas*> CanvasMap;
17+
UCanvas** FoundCanvas = CanvasMap.Find(CanvasName);
18+
if (!FoundCanvas)
19+
{
20+
UCanvas* CanvasObject = FindObject<UCanvas>(GetTransientPackage(), *CanvasName.ToString());
21+
if (!CanvasObject)
22+
{
23+
CanvasObject = NewObject<UCanvas>(GetTransientPackage(), CanvasName);
24+
CanvasObject->AddToRoot();
25+
}
26+
27+
CanvasMap.Add(CanvasName, CanvasObject);
28+
return CanvasObject;
29+
}
30+
31+
return *FoundCanvas;
32+
}
33+
1234
class FJavascriptEdToolkit : public FModeToolkit, public FGCObject
1335
{
1436
public:
@@ -364,4 +386,4 @@ void UJavascriptEdMode::Unregister()
364386

365387
#endif
366388

367-
PRAGMA_ENABLE_SHADOW_VARIABLE_WARNINGS
389+
PRAGMA_ENABLE_SHADOW_VARIABLE_WARNINGS

Source/JavascriptEditor/JavascriptEditorLibrary.h

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -102,28 +102,6 @@ struct FJavascriptExtensibilityManager
102102
#endif
103103
};
104104

105-
/** Util to find named canvas in transient package, and create if not found */
106-
static UCanvas* GetCanvasByName(FName CanvasName)
107-
{
108-
// Cache to avoid FString/FName conversions/compares
109-
static TMap<FName, UCanvas*> CanvasMap;
110-
UCanvas** FoundCanvas = CanvasMap.Find(CanvasName);
111-
if (!FoundCanvas)
112-
{
113-
UCanvas* CanvasObject = FindObject<UCanvas>(GetTransientPackage(), *CanvasName.ToString());
114-
if (!CanvasObject)
115-
{
116-
CanvasObject = NewObject<UCanvas>(GetTransientPackage(), CanvasName);
117-
CanvasObject->AddToRoot();
118-
}
119-
120-
CanvasMap.Add(CanvasName, CanvasObject);
121-
return CanvasObject;
122-
}
123-
124-
return *FoundCanvas;
125-
}
126-
127105
/**
128106
*
129107
*/

Source/JavascriptEditor/JavascriptEditorViewport.cpp

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -131,17 +131,17 @@ class FJavascriptEditorViewportClient : public FEditorViewportClient
131131

132132
if (Widget.IsValid() && Widget->OnDrawCanvas.IsBound())
133133
{
134-
// Create a temporary canvas if there isn't already one.
135-
static FName CanvasObjectName(TEXT("ViewportCanvasObject"));
136-
UCanvas* CanvasObject = GetCanvasByName(CanvasObjectName);
137-
CanvasObject->Canvas = &Canvas;
134+
if(Widget->Canvas == nullptr){
135+
Widget->Canvas = NewObject<UCanvas>(Widget.Get());
136+
}
138137

139-
CanvasObject->Init(View.UnscaledViewRect.Width(), View.UnscaledViewRect.Height(), const_cast<FSceneView*>(&View));
140-
CanvasObject->ApplySafeZoneTransform();
138+
Widget->Canvas->Canvas = &Canvas;
139+
Widget->Canvas->Init(View.UnscaledViewRect.Width(), View.UnscaledViewRect.Height(), const_cast<FSceneView*>(&View));
140+
Widget->Canvas->ApplySafeZoneTransform();
141141

142-
Widget->OnDrawCanvas.Execute(CanvasObject, Widget.Get());
142+
Widget->OnDrawCanvas.Execute(Widget->Canvas, Widget.Get());
143143

144-
CanvasObject->PopSafeZoneTransform();
144+
Widget->Canvas->PopSafeZoneTransform();
145145
}
146146
}
147147

@@ -621,15 +621,21 @@ void UJavascriptEditorViewport::DeprojectScreenToWorld(const FVector2D &ScreenPo
621621
{
622622
if (ViewportWidget.IsValid())
623623
{
624-
FSceneView::DeprojectScreenToWorld(ScreenPosition, ViewRect, ViewMatrices.GetInvViewProjMatrix(), OutRayOrigin, OutRayDirection);
624+
FSceneViewFamilyContext ViewFamily(FSceneViewFamily::ConstructionValues( ViewportWidget->EditorViewportClient->Viewport, ViewportWidget->EditorViewportClient->GetScene(), ViewportWidget->EditorViewportClient->EngineShowFlags ));
625+
FSceneView* View = ViewportWidget->EditorViewportClient->CalcSceneView(&ViewFamily);
626+
627+
FSceneView::DeprojectScreenToWorld(ScreenPosition, View->ViewRect, View->ViewMatrices.GetInvViewProjMatrix(), OutRayOrigin, OutRayDirection);
625628
}
626629
}
627630

628631
void UJavascriptEditorViewport::ProjectWorldToScreen(const FVector &WorldPosition, FVector2D &OutScreenPosition)
629632
{
630633
if (ViewportWidget.IsValid())
631634
{
632-
FSceneView::ProjectWorldToScreen(WorldPosition, ViewRect, ViewMatrices.GetViewProjMatrix(), OutScreenPosition);
635+
FSceneViewFamilyContext ViewFamily(FSceneViewFamily::ConstructionValues( ViewportWidget->EditorViewportClient->Viewport, ViewportWidget->EditorViewportClient->GetScene(), ViewportWidget->EditorViewportClient->EngineShowFlags ));
636+
FSceneView* View = ViewportWidget->EditorViewportClient->CalcSceneView(&ViewFamily);
637+
638+
FSceneView::ProjectWorldToScreen(WorldPosition, View->ViewRect, View->ViewMatrices.GetViewProjMatrix(), OutScreenPosition);
633639
}
634640
}
635641

Source/JavascriptEditor/JavascriptEditorViewport.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class JAVASCRIPTEDITOR_API UJavascriptEditorViewport : public UPanelWidget
3131
DECLARE_DYNAMIC_DELEGATE_RetVal_ThreeParams(bool, FOnMouseMove, int32, x, int32, y, UJavascriptEditorViewport*, Instance);
3232
DECLARE_DYNAMIC_DELEGATE_RetVal_OneParam(bool, FOnMouseLeave, UJavascriptEditorViewport*, Instance);
3333
DECLARE_DYNAMIC_DELEGATE_TwoParams(FOnViewportDraw, const FJavascriptPDI&, PDI, UJavascriptEditorViewport*, Instance);
34-
DECLARE_DYNAMIC_DELEGATE_TwoParams(FOnViewportDrawCanvas, UCanvas*, Canvas, UJavascriptEditorViewport*, Instance);
34+
DECLARE_DYNAMIC_DELEGATE_TwoParams(FOnViewportDrawCanvas, UCanvas*, Canvas, UJavascriptEditorViewport*, Instance);
3535
DECLARE_DYNAMIC_DELEGATE_RetVal_OneParam(FVector, FOnGetWidgetLocation, UJavascriptEditorViewport*, Instance);
3636
DECLARE_DYNAMIC_DELEGATE_RetVal_OneParam(FRotator, FOnGetWidgetRotation, UJavascriptEditorViewport*, Instance);
3737
DECLARE_DYNAMIC_DELEGATE_RetVal_OneParam(EJavascriptWidgetMode, FOnGetWidgetMode, UJavascriptEditorViewport*, Instance);
@@ -66,8 +66,8 @@ class JAVASCRIPTEDITOR_API UJavascriptEditorViewport : public UPanelWidget
6666
UPROPERTY(EditAnywhere, Category = Events, meta = (IsBindableEvent = "True"))
6767
FOnViewportDraw OnDraw;
6868

69-
UPROPERTY(EditAnywhere, Category = Events, meta = (IsBindableEvent = "True"))
70-
FOnViewportDrawCanvas OnDrawCanvas;
69+
UPROPERTY(EditAnywhere, Category = Events, meta = (IsBindableEvent = "True"))
70+
FOnViewportDrawCanvas OnDrawCanvas;
7171

7272
UPROPERTY(EditAnywhere, Category = Events, meta = (IsBindableEvent = "True"))
7373
FOnGetWidgetLocation OnGetWidgetLocation;
@@ -78,9 +78,9 @@ class JAVASCRIPTEDITOR_API UJavascriptEditorViewport : public UPanelWidget
7878
UPROPERTY(EditAnywhere, Category = Events, meta = (IsBindableEvent = "True"))
7979
FOnGetWidgetMode OnGetWidgetMode;
8080

81-
FIntRect ViewRect;
82-
FViewMatrices ViewMatrices;
83-
81+
UPROPERTY()
82+
UCanvas* Canvas;
83+
8484
UFUNCTION(BlueprintCallable, Category = "Viewport")
8585
UWorld* GetViewportWorld() const;
8686

0 commit comments

Comments
 (0)