From 35a28ba0a88628a36c5409ff56af2ec612e25612 Mon Sep 17 00:00:00 2001 From: Jan Kaniewski Date: Sat, 3 Feb 2018 16:01:24 +0000 Subject: [PATCH 01/51] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index af3872f..cf44f3f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ [![release](https://img.shields.io/github/release/getnamo/BLUI.svg?style=flat-square)](https://github.com/getnamo/BLUI/releases) ![BLUI-logo](https://cloud.githubusercontent.com/assets/1334174/5969395/201a1202-a7f1-11e4-98a4-12bc6793f830.png) +[![Github All Releases](https://img.shields.io/github/downloads/getnamo/BLUI/total.svg)](https://github.com/getnamo/BLUI/releases) ## Getnamo Fork Notes From 16bf33efb8f778ef3b581910ad4f1f74ad10506a Mon Sep 17 00:00:00 2001 From: getnamo Date: Sun, 18 Mar 2018 16:30:38 +0000 Subject: [PATCH 02/51] update for 4.19 -version bump -use tabs --- BLUI.uplugin | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index e0bc49b..ead342c 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -1,28 +1,28 @@ { - "FileVersion": 3, - "FriendlyName": "BLUI", - "Version": 3, - "VersionName": "3.2.4", - "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", - "Category": "UI", - "CreatedBy": "Aaron M. Shea", - "CreatedByURL": "http://aaronshea.me", - "DocsURL": "https://github.com/getnamo/BLUI", - "EnabledByDefault" : true, - "CanContainContent": "true", - "Modules": - [ - { - "Name" : "BluLoader", - "Type" : "Runtime", - "LoadingPhase" : "PreDefault", - "BlacklistPlatforms" : [ "HTML5", "Android", "iOS"] - }, - { - "Name": "Blu", - "Type": "Runtime", - "LoadingPhase": "PreDefault", - "BlacklistPlatforms": [ "HTML5", "Android", "iOS" ] - } - ] + "FileVersion": 3, + "FriendlyName": "BLUI", + "Version": 3, + "VersionName": "3.2.5", + "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", + "Category": "UI", + "CreatedBy": "Aaron M. Shea & Contributors", + "CreatedByURL": "github.com/aaronShea", + "DocsURL": "https://github.com/getnamo/BLUI", + "EnabledByDefault" : true, + "CanContainContent": "true", + "Modules": + [ + { + "Name" : "BluLoader", + "Type" : "Runtime", + "LoadingPhase" : "PreDefault", + "BlacklistPlatforms" : [ "HTML5", "Android", "iOS"] + }, + { + "Name": "Blu", + "Type": "Runtime", + "LoadingPhase": "PreDefault", + "BlacklistPlatforms": [ "HTML5", "Android", "iOS" ] + } + ] } From 14e55f833c77587e4bc1b27b72673f4699525377 Mon Sep 17 00:00:00 2001 From: getnamo Date: Sat, 21 Jul 2018 00:25:42 +0100 Subject: [PATCH 03/51] bump for 4.20 build --- BLUI.uplugin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index ead342c..b0e1861 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "3.2.5", + "VersionName": "3.2.6", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea & Contributors", From 8017e695c8ec0dffcb323ef8fd679342f848a0a3 Mon Sep 17 00:00:00 2001 From: getnamo Date: Sat, 10 Nov 2018 03:24:10 -0800 Subject: [PATCH 04/51] update for 4.21 - compile fixes mostly to do with IWYU --- BLUI.uplugin | 2 +- Source/Blu/Blu.Build.cs | 4 +- Source/Blu/Private/BluEye.cpp | 1 + Source/Blu/Private/BluJsonObj.cpp | 1 + Source/Blu/Private/BluManager.cpp | 1 + Source/Blu/Private/RenderHandler.cpp | 4 +- Source/Blu/Public/BluEye.h | 131 ++++++++++++++------------- Source/Blu/Public/BluManager.h | 1 + Source/Blu/Public/RenderHandler.h | 3 +- Source/BluLoader/BluLoader.Build.cs | 3 + 10 files changed, 81 insertions(+), 70 deletions(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index b0e1861..b576afc 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "3.2.6", + "VersionName": "3.3.0", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea & Contributors", diff --git a/Source/Blu/Blu.Build.cs b/Source/Blu/Blu.Build.cs index b8d9112..818dab6 100644 --- a/Source/Blu/Blu.Build.cs +++ b/Source/Blu/Blu.Build.cs @@ -15,12 +15,14 @@ private void stageFiles(String[] filesToStage) { foreach (var f in filesToStage) { - RuntimeDependencies.Add(new RuntimeDependency(f)); + RuntimeDependencies.Add(f); } } public Blu(ReadOnlyTargetRules Target) : base(Target) { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + PrivatePCHHeaderFile = "Private/BluPrivatePCH.h"; PublicDependencyModuleNames.AddRange( new string[] diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index 8085120..9352c1d 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -1,3 +1,4 @@ +#include "BluEye.h" #include "BluPrivatePCH.h" #include "RenderHandler.h" diff --git a/Source/Blu/Private/BluJsonObj.cpp b/Source/Blu/Private/BluJsonObj.cpp index dc56735..323926f 100644 --- a/Source/Blu/Private/BluJsonObj.cpp +++ b/Source/Blu/Private/BluJsonObj.cpp @@ -1,3 +1,4 @@ +#include "BluJsonObj.h" #include "BluPrivatePCH.h" #include "Json.h" diff --git a/Source/Blu/Private/BluManager.cpp b/Source/Blu/Private/BluManager.cpp index 78ac561..cf022b9 100644 --- a/Source/Blu/Private/BluManager.cpp +++ b/Source/Blu/Private/BluManager.cpp @@ -1,3 +1,4 @@ +#include "BluManager.h" #include "BluPrivatePCH.h" BluManager::BluManager() diff --git a/Source/Blu/Private/RenderHandler.cpp b/Source/Blu/Private/RenderHandler.cpp index 1041417..a3a5b2c 100644 --- a/Source/Blu/Private/RenderHandler.cpp +++ b/Source/Blu/Private/RenderHandler.cpp @@ -1,4 +1,6 @@ +#include "RenderHandler.h" #include "BluPrivatePCH.h" +#include "BluEye.h" RenderHandler::RenderHandler(int32 width, int32 height, UBluEye* ui) { @@ -89,7 +91,7 @@ FString ReversePathSlashes(FString forwardPath) } FString UtilityBLUIDownloadsFolder() { - return ReversePathSlashes(FPaths::ConvertRelativePathToFull(FPaths::GameDir() + "Plugins/BLUI/Downloads/")); + return ReversePathSlashes(FPaths::ConvertRelativePathToFull(FPaths::ProjectDir() + "Plugins/BLUI/Downloads/")); } diff --git a/Source/Blu/Public/BluEye.h b/Source/Blu/Public/BluEye.h index 9d1222f..1703419 100644 --- a/Source/Blu/Public/BluEye.h +++ b/Source/Blu/Public/BluEye.h @@ -1,4 +1,5 @@ #pragma once +#include "BluManager.h" #include "BluEye.generated.h" class BrowserClient; @@ -6,12 +7,11 @@ class RenderHandler; DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FScriptEvent, const FString&, EventName, const FString&, EventMessage); + struct FBluTextureParams { - // Pointer to our Texture's resource FTexture2DResource* Texture2DResource; - }; struct FUpdateTextureRegionsData @@ -61,50 +61,50 @@ class BLU_API UBluEye : public UObject //Event delegates UPROPERTY(BlueprintAssignable, Category = "Blu Browser Events") - FDownloadCompleteSignature DownloadComplete; + FDownloadCompleteSignature DownloadComplete; UPROPERTY(BlueprintAssignable, Category = "Blu Browser Events") - FDownloadUpdatedSignature DownloadUpdated; + FDownloadUpdatedSignature DownloadUpdated; //GENERATED_UCLASS_BODY() /** Initialize function, should be called after properties are set */ UFUNCTION(BlueprintCallable, Category = "Blu") - void init(); + void init(); /** The default URL this UI component will load */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - FString DefaultURL; + FString DefaultURL; /** Is this UI component current active? */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - bool bEnabled; + bool bEnabled; /** Should this be rendered in game to be transparent? */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - bool bIsTransparent; + bool bIsTransparent; /** Width of the view resolution */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - int32 Width; + int32 Width; /** Height of the view resolution */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - int32 Height; + int32 Height; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - bool bEnableWebGL; + bool bEnableWebGL; /** Material that will be instanced to load UI texture into it */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - UMaterialInterface* BaseMaterial; + UMaterialInterface* BaseMaterial; /** Name of parameter to load UI texture into material */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Blu") - FName TextureParameterName = "BluTexture"; + FName TextureParameterName = "BluTexture"; UFUNCTION(BlueprintCallable, Category = "Blu") - UBluEye* SetProperties(const int32 SetWidth, + UBluEye* SetProperties(const int32 SetWidth, const int32 SetHeight, const bool SetIsTransparent, const bool SetEnabled, @@ -115,11 +115,11 @@ class BLU_API UBluEye : public UObject /** Get the texture data from our UI component */ UFUNCTION(BlueprintCallable, Category = "Blu") - UTexture2D* GetTexture() const; + UTexture2D* GetTexture() const; /** Execute JS code inside the browser */ UFUNCTION(BlueprintCallable, Category = "Blu") - void ExecuteJS(const FString& code); + void ExecuteJS(const FString& code); /** * Execute a JS function/method by name with FString Array as params. @@ -129,87 +129,87 @@ class BLU_API UBluEye : public UObject * To pass as a string, place quotes around the param when adding to the array: "10.5" and "hello" are strings */ UFUNCTION(BlueprintCallable, Category = "Blu", meta = (DisplayName = "Execute Javascript With Params", Keywords = "js javascript parameters")) - void ExecuteJSMethodWithParams(const FString& methodName, const TArray params); + void ExecuteJSMethodWithParams(const FString& methodName, const TArray params); /** Load a new URL into the browser */ UFUNCTION(BlueprintCallable, Category = "Blu") - void LoadURL(const FString& newURL); + void LoadURL(const FString& newURL); /** Get the currently loaded URL */ UFUNCTION(BlueprintPure, Category = "Blu") - FString GetCurrentURL(); + FString GetCurrentURL(); /** Trigger Zoom */ UFUNCTION(BlueprintCallable, Category = "Blu") - void SetZoom(const float scale = 1); + void SetZoom(const float scale = 1); /** Get our zoom level */ UFUNCTION(BlueprintPure, Category = "Blu") - float GetZoom(); + float GetZoom(); //Not ready yet //UFUNCTION(BlueprintCallable, Category = "Blu Test") - void Test(); + void Test(); /** Download a file */ UFUNCTION(BlueprintCallable, Category = "Blu") - void DownloadFile(const FString& fileUrl); + void DownloadFile(const FString& fileUrl); /** Trigger a LEFT click in the browser via a Vector2D */ UFUNCTION(BlueprintCallable, Category = "Blu") - void TriggerLeftClick(const FVector2D& pos, const float scale = 1); + void TriggerLeftClick(const FVector2D& pos, const float scale = 1); /** Trigger a RIGHT click in the browser via a Vector2D */ UFUNCTION(BlueprintCallable, Category = "Blu") - void TriggerRightClick(const FVector2D& pos, const float scale = 1); + void TriggerRightClick(const FVector2D& pos, const float scale = 1); /** Trigger a LEFT MOUSE DOWN in the browser via a Vector2D */ UFUNCTION(BlueprintCallable, Category = "Blu") - void TriggerLeftMouseDown(const FVector2D& pos, const float scale = 1); + void TriggerLeftMouseDown(const FVector2D& pos, const float scale = 1); /** Trigger a RIGHT MOUSE DOWN in the browser via a Vector2D */ UFUNCTION(BlueprintCallable, Category = "Blu") - void TriggerRightMouseDown(const FVector2D& pos, const float scale = 1); + void TriggerRightMouseDown(const FVector2D& pos, const float scale = 1); /** Trigger a LEFT MOUSE UP in the browser via a Vector2D */ UFUNCTION(BlueprintCallable, Category = "Blu") - void TriggerLeftMouseUp(const FVector2D& pos, const float scale = 1); + void TriggerLeftMouseUp(const FVector2D& pos, const float scale = 1); /* Trigger a RIGHT MOUSE UP in the browser via a Vector2D */ UFUNCTION(BlueprintCallable, Category = "Blu") - void TriggerRightMouseUp(const FVector2D& pos, const float scale = 1); + void TriggerRightMouseUp(const FVector2D& pos, const float scale = 1); /** Move the mouse in the browser */ UFUNCTION(BlueprintCallable, Category = "Blu") - void TriggerMouseMove(const FVector2D& pos, const float scale = 1); + void TriggerMouseMove(const FVector2D& pos, const float scale = 1); /** Move the mouse in the browser */ UFUNCTION(BlueprintCallable, Category = "Blu") - void TriggerMouseWheel(const float MouseWheelDelta, const FVector2D& pos, const float scale = 1); + void TriggerMouseWheel(const float MouseWheelDelta, const FVector2D& pos, const float scale = 1); /** Javascript event emitter */ UPROPERTY(BlueprintAssignable) - FScriptEvent ScriptEventEmitter; + FScriptEvent ScriptEventEmitter; /** Trigger a key down event */ UFUNCTION(BlueprintCallable, Category = "Blu") - void KeyDown(FKeyEvent InKey); + void KeyDown(FKeyEvent InKey); /** Trigger a key up event */ UFUNCTION(BlueprintCallable, Category = "Blu") - void KeyUp(FKeyEvent InKey); + void KeyUp(FKeyEvent InKey); /** Trigger a key press event */ UFUNCTION(BlueprintCallable, Category = "Blu") - void KeyPress(FKeyEvent InKey); + void KeyPress(FKeyEvent InKey); /** Trigger a character key event */ UFUNCTION(BlueprintCallable, Category = "Blu") - void CharKeyPress(FCharacterEvent CharEvent); + void CharKeyPress(FCharacterEvent CharEvent); /** Trigger a raw keypress via a character */ UFUNCTION(BlueprintCallable, Category = "Blu", meta = (AdvancedDisplay = "2")) - void RawCharKeyPress(const FString charToPress, bool isRepeat, + void RawCharKeyPress(const FString charToPress, bool isRepeat, bool LeftShiftDown, bool RightShiftDown, bool LeftControlDown, @@ -221,7 +221,7 @@ class BLU_API UBluEye : public UObject bool CapsLocksOn); UFUNCTION(BlueprintCallable, Category = "Blu", meta = (AdvancedDisplay = "2")) - void SpecialKeyPress(EBluSpecialKeys key, + void SpecialKeyPress(EBluSpecialKeys key, bool LeftShiftDown, bool RightShiftDown, bool LeftControlDown, @@ -234,31 +234,31 @@ class BLU_API UBluEye : public UObject /** Close the browser */ UFUNCTION(BlueprintCallable, Category = "Blu") - void CloseBrowser(); + void CloseBrowser(); /** Check if the browser is still loading */ UFUNCTION(BlueprintCallable, Category = "Blu") - bool IsBrowserLoading(); + bool IsBrowserLoading(); /** Reloads the browser's current page */ UFUNCTION(BlueprintCallable, Category = "Blu") - void ReloadBrowser(bool IgnoreCache); + void ReloadBrowser(bool IgnoreCache); /** Navigate back in this web view's history */ UFUNCTION(BlueprintCallable, Category = "Blu") - void NavBack(); + void NavBack(); /** Navigate forward in this web view's history */ UFUNCTION(BlueprintCallable, Category = "Blu") - void NavForward(); + void NavForward(); /** Resize the browser's viewport */ UFUNCTION(BlueprintCallable, Category = "Blu") - UTexture2D* ResizeBrowser(const int32 NewWidth, const int32 NewHeight); + UTexture2D* ResizeBrowser(const int32 NewWidth, const int32 NewHeight); //This cropping function doesn't work atm //UFUNCTION(BlueprintCallable, Category = "Blu") - UTexture2D* CropWindow(const int32 Y, const int32 X, const int32 NewWidth, const int32 NewHeight); + UTexture2D* CropWindow(const int32 Y, const int32 X, const int32 NewWidth, const int32 NewHeight); CefRefPtr browser; @@ -266,33 +266,34 @@ class BLU_API UBluEye : public UObject void BeginDestroy() override; - protected: - CefWindowInfo info; - CefRefPtr g_handler; - CefBrowserSettings browserSettings; - RenderHandler* renderer; +protected: + + CefWindowInfo info; + CefRefPtr g_handler; + CefBrowserSettings browserSettings; + RenderHandler* renderer; - void ResetTexture(); - void DestroyTexture(); - void ResetMatInstance(); + void ResetTexture(); + void DestroyTexture(); + void ResetMatInstance(); - // Parse UE4 key events, helper - void processKeyCode(FKeyEvent InKey); + // Parse UE4 key events, helper + void processKeyCode(FKeyEvent InKey); - // Helper for processing key modifiers - void processKeyMods(FInputEvent InKey); + // Helper for processing key modifiers + void processKeyMods(FInputEvent InKey); - // Store UI state in this UTexture2D - UPROPERTY() - UTexture2D* Texture; + // Store UI state in this UTexture2D + UPROPERTY() + UTexture2D* Texture; - UMaterialInstanceDynamic* MaterialInstance; + UMaterialInstanceDynamic* MaterialInstance; - CefMouseEvent mouse_event; - CefKeyEvent key_event; + CefMouseEvent mouse_event; + CefKeyEvent key_event; - private: +private: - FBluTextureParams RenderParams; + FBluTextureParams RenderParams; }; diff --git a/Source/Blu/Public/BluManager.h b/Source/Blu/Public/BluManager.h index 72f85f2..5952bf9 100644 --- a/Source/Blu/Public/BluManager.h +++ b/Source/Blu/Public/BluManager.h @@ -9,6 +9,7 @@ #undef OVERRIDE // cef headers provide their own OVERRIDE macro THIRD_PARTY_INCLUDES_START #include "include/cef_app.h" +#include "include/cef_browser.h" THIRD_PARTY_INCLUDES_END #pragma pop_macro("OVERRIDE") #if PLATFORM_WINDOWS diff --git a/Source/Blu/Public/RenderHandler.h b/Source/Blu/Public/RenderHandler.h index 85009bf..a64940e 100644 --- a/Source/Blu/Public/RenderHandler.h +++ b/Source/Blu/Public/RenderHandler.h @@ -17,8 +17,7 @@ THIRD_PARTY_INCLUDES_END #include "HideWindowsPlatformTypes.h" #endif -#include "../Public/BluEye.h" - +#include "BluEye.h" class RenderHandler : public CefRenderHandler { diff --git a/Source/BluLoader/BluLoader.Build.cs b/Source/BluLoader/BluLoader.Build.cs index f7df2b2..27b66c8 100644 --- a/Source/BluLoader/BluLoader.Build.cs +++ b/Source/BluLoader/BluLoader.Build.cs @@ -6,6 +6,9 @@ public class BluLoader : ModuleRules { public BluLoader(ReadOnlyTargetRules Target) : base(Target) { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + PrivatePCHHeaderFile = "Private/BluLoaderPrivatePCH.h"; + PublicDependencyModuleNames.AddRange( new string[] { From 0352bff375ef545c994c6ad49e96fd9a8c618b03 Mon Sep 17 00:00:00 2001 From: getnamo Date: Sun, 18 Nov 2018 13:45:47 -0800 Subject: [PATCH 05/51] build.cs warnings update --- BLUI.uplugin | 2 +- Source/Blu/Blu.Build.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index b576afc..04f12d3 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "3.3.0", + "VersionName": "3.3.1", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea & Contributors", diff --git a/Source/Blu/Blu.Build.cs b/Source/Blu/Blu.Build.cs index 818dab6..fb862a3 100644 --- a/Source/Blu/Blu.Build.cs +++ b/Source/Blu/Blu.Build.cs @@ -41,7 +41,7 @@ public Blu(ReadOnlyTargetRules Target) : base(Target) PrivateIncludePaths.AddRange( new string[] { - "Blu/Private", + Path.Combine(ModuleDirectory, "Private"), }); if(Target.Platform == UnrealTargetPlatform.Win64) From 2040d8ce3cd5b3208cb2aca4b6d85335187cea76 Mon Sep 17 00:00:00 2001 From: getnamo Date: Tue, 2 Apr 2019 14:24:05 -0700 Subject: [PATCH 06/51] 4.22 update --- BLUI.uplugin | 2 +- Source/Blu/Private/BluEye.cpp | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index 04f12d3..33d9094 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "3.3.1", + "VersionName": "3.4.0", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea & Contributors", diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index 9352c1d..d37c5c4 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -139,9 +139,8 @@ void UBluEye::TextureUpdate(const void *buffer, FUpdateTextureRegion2D *updateRe RegionData->Regions = updateRegions; - ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER( - void, - FUpdateTextureRegionsData*, RegionData, RegionData, + ENQUEUE_RENDER_COMMAND(UpdateBLUICommand)( + [RegionData](FRHICommandList& CommandList) { for (uint32 RegionIndex = 0; RegionIndex < RegionData->NumRegions; RegionIndex++) { From 0742058834c05aecfa7c06ec014a7340d4621284 Mon Sep 17 00:00:00 2001 From: Jan Kaniewski Date: Sat, 24 Aug 2019 20:19:15 -0700 Subject: [PATCH 07/51] add demo project links --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index cf44f3f..7f809eb 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,16 @@ Instead of ticking in your level bp, I prefer to use a simple actor to do the ti ## //End Fork Notes + +## Demo Project + +Thanks to @oivio we have the Demo project updated to the latest release. See https://github.com/getnamo/BLUI/releases/tag/3.4.0 for the 4.22 Demo project release (BLUI-v3.4.0-UE4.22-DemoExamples.7z) + +Video of Demo project + +[![Demo Project](https://img.youtube.com/vi/PRxO0yCO3Kk/0.jpg)](https://youtu.be/PRxO0yCO3Kk) + + ## HTML powered UI and HUD for Unreal Engine 4 (Hit up the wiki for a quick start guide!) From ede97a4d8c06573425d106848b09eac299773fb5 Mon Sep 17 00:00:00 2001 From: Jan Kaniewski Date: Sat, 24 Aug 2019 20:24:07 -0700 Subject: [PATCH 08/51] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7f809eb..78053bc 100644 --- a/README.md +++ b/README.md @@ -66,17 +66,17 @@ By default the actor has a BLUI resolution of 1000x1000, you can change this by Instead of ticking in your level bp, I prefer to use a simple actor to do the ticking. Other convenience blueprints may spawn this as necessary so if you use those, you don't ever need to use this directly. -## //End Fork Notes - - ## Demo Project Thanks to @oivio we have the Demo project updated to the latest release. See https://github.com/getnamo/BLUI/releases/tag/3.4.0 for the 4.22 Demo project release (BLUI-v3.4.0-UE4.22-DemoExamples.7z) -Video of Demo project +### Video of Demo project [![Demo Project](https://img.youtube.com/vi/PRxO0yCO3Kk/0.jpg)](https://youtu.be/PRxO0yCO3Kk) +Click on image to take you to video. + +## //End Fork Notes ## HTML powered UI and HUD for Unreal Engine 4 (Hit up the wiki for a quick start guide!) From 1747ce5f78e45a3d1b948f296e84e2946ec43ccc Mon Sep 17 00:00:00 2001 From: Jan Kaniewski Date: Sat, 24 Aug 2019 20:35:00 -0700 Subject: [PATCH 09/51] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 78053bc..33535d6 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Instead of ticking in your level bp, I prefer to use a simple actor to do the ti ## Demo Project -Thanks to @oivio we have the Demo project updated to the latest release. See https://github.com/getnamo/BLUI/releases/tag/3.4.0 for the 4.22 Demo project release (BLUI-v3.4.0-UE4.22-DemoExamples.7z) +Thanks to @oivio we have the Demo project updated to the latest release. See https://github.com/getnamo/BLUI/releases/tag/3.4.0 for the 4.22 Demo project release ([BLUI-v3.4.0-UE4.22-DemoExamples.7z](https://github.com/getnamo/BLUI/releases/download/3.4.0/BLUI-v3.4.0-UE4.22-DemoExamples.7z)) ### Video of Demo project From 3436657f2bc7bf7f11df1e2e4ff2fc4c94023788 Mon Sep 17 00:00:00 2001 From: getnamo Date: Sat, 28 Sep 2019 13:15:02 -0700 Subject: [PATCH 10/51] Update BLUI.uplugin --- BLUI.uplugin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index 33d9094..a737dbf 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "3.4.0", + "VersionName": "3.5.0", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea & Contributors", From a2e1385e11890cafb15812a601dc2eaf382f8bdd Mon Sep 17 00:00:00 2001 From: getnamo Date: Thu, 12 Mar 2020 14:07:23 -0700 Subject: [PATCH 11/51] 4.24 fix --- BLUI.uplugin | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index a737dbf..2bdc263 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "3.5.0", + "VersionName": "3.6.0", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea & Contributors", @@ -16,13 +16,13 @@ "Name" : "BluLoader", "Type" : "Runtime", "LoadingPhase" : "PreDefault", - "BlacklistPlatforms" : [ "HTML5", "Android", "iOS"] + "BlacklistPlatforms" : ["Android", "iOS"] }, { "Name": "Blu", "Type": "Runtime", "LoadingPhase": "PreDefault", - "BlacklistPlatforms": [ "HTML5", "Android", "iOS" ] + "BlacklistPlatforms": ["Android", "iOS" ] } ] } From 7419b234bbc292994b9f2d5d762342f1b789ef40 Mon Sep 17 00:00:00 2001 From: getnamo Date: Thu, 12 Mar 2020 14:37:20 -0700 Subject: [PATCH 12/51] first pass changes --- Source/Blu/Private/RenderHandler.cpp | 18 +++++++----------- Source/Blu/Public/RenderHandler.h | 9 +++++---- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/Source/Blu/Private/RenderHandler.cpp b/Source/Blu/Private/RenderHandler.cpp index a3a5b2c..d897784 100644 --- a/Source/Blu/Private/RenderHandler.cpp +++ b/Source/Blu/Private/RenderHandler.cpp @@ -9,10 +9,9 @@ RenderHandler::RenderHandler(int32 width, int32 height, UBluEye* ui) this->parentUI = ui; } -bool RenderHandler::GetViewRect(CefRefPtr browser, CefRect &rect) +void RenderHandler::GetViewRect(CefRefPtr browser, CefRect &rect) { rect = CefRect(0, 0, Width, Height); - return true; } void RenderHandler::OnPaint(CefRefPtr browser, PaintElementType type, const RectList &dirtyRects, const void *buffer, int width, int height) @@ -54,19 +53,18 @@ void BrowserClient::OnBeforeClose(CefRefPtr browser) } } -bool BrowserClient::OnProcessMessageReceived(CefRefPtr browser, CefProcessId source_process, CefRefPtr message) +bool BrowserClient::OnProcessMessageReceived(CefRefPtr browser, CefRefPtr frame, CefProcessId source_process, CefRefPtr message) { - FString data; FString name = FString(UTF8_TO_TCHAR(message->GetArgumentList()->GetString(0).ToString().c_str())); FString type = FString(UTF8_TO_TCHAR(message->GetArgumentList()->GetString(2).ToString().c_str())); FString data_type = FString(UTF8_TO_TCHAR(message->GetArgumentList()->GetString(3).ToString().c_str())); - + if (type == "js_event") { - + // Check the datatype - + if (data_type == "bool") data = message->GetArgumentList()->GetBool(1) ? TEXT("true") : TEXT("false"); else if (data_type == "int") @@ -75,15 +73,13 @@ bool BrowserClient::OnProcessMessageReceived(CefRefPtr browser, CefP data = FString(UTF8_TO_TCHAR(message->GetArgumentList()->GetString(1).ToString().c_str())); else if (data_type == "double") data = FString::SanitizeFloat(message->GetArgumentList()->GetDouble(1)); - + event_emitter->Broadcast(name, data); } - + return true; - } - //The path slashes have to be reversed to work with CEF FString ReversePathSlashes(FString forwardPath) { diff --git a/Source/Blu/Public/RenderHandler.h b/Source/Blu/Public/RenderHandler.h index a64940e..dffb997 100644 --- a/Source/Blu/Public/RenderHandler.h +++ b/Source/Blu/Public/RenderHandler.h @@ -28,7 +28,7 @@ class RenderHandler : public CefRenderHandler int32 Height; // CefRenderHandler interface - bool GetViewRect(CefRefPtr browser, CefRect &rect) override; + virtual void GetViewRect(CefRefPtr browser, CefRect &rect) override; void OnPaint(CefRefPtr browser, PaintElementType type, const RectList &dirtyRects, const void *buffer, int width, int height) override; @@ -76,7 +76,8 @@ class BrowserClient : public CefClient, public CefLifeSpanHandler, public CefDow return this; } - virtual bool OnProcessMessageReceived(CefRefPtr browser, CefProcessId source_process, CefRefPtr message) override; + virtual bool OnProcessMessageReceived(CefRefPtr browser, CefRefPtr frame, CefProcessId source_process, CefRefPtr message) override; + void SetEventEmitter(FScriptEvent* emitter); //CefDownloadHandler @@ -102,8 +103,8 @@ class BrowserClient : public CefClient, public CefLifeSpanHandler, public CefDow CefWindowInfo& windowInfo, CefRefPtr& client, CefBrowserSettings& settings, - bool* no_javascript_access) override - { + CefRefPtr& extra_info, + bool* no_javascript_access) { return false; } From e506be8bec1a896954a9c407842d4d9dcb2e282f Mon Sep 17 00:00:00 2001 From: getnamo Date: Thu, 12 Mar 2020 14:54:23 -0700 Subject: [PATCH 13/51] second pass --- Source/Blu/Private/BluEye.cpp | 11 +++++++++-- Source/Blu/Public/BluManager.h | 13 ++++++++----- Source/Blu/Public/RenderHandler.h | 18 ++++++++++-------- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index d37c5c4..2a195de 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -46,7 +46,7 @@ void UBluEye::init() info.height = Height; // Set transparant option - info.SetAsWindowless(0, bIsTransparent); + info.SetAsWindowless(0); //bIsTransparent // Figure out if we want to turn on WebGL support if (bEnableWebGL) @@ -60,7 +60,14 @@ void UBluEye::init() renderer = new RenderHandler(Width, Height, this); g_handler = new BrowserClient(renderer); - browser = CefBrowserHost::CreateBrowserSync(info, g_handler.get(), "about:blank", browserSettings, NULL); + //browser = CefBrowserHost::CreateBrowserSync(info, g_handler.get(), "about:blank", browserSettings, NULL); + browser = CefBrowserHost::CreateBrowserSync( + info, + g_handler.get(), + "about:blank", + browserSettings, + NULL, + NULL); // Setup JS event emitter g_handler->SetEventEmitter(&ScriptEventEmitter); diff --git a/Source/Blu/Public/BluManager.h b/Source/Blu/Public/BluManager.h index 5952bf9..86b5e24 100644 --- a/Source/Blu/Public/BluManager.h +++ b/Source/Blu/Public/BluManager.h @@ -5,18 +5,20 @@ #include "AllowWindowsPlatformTypes.h" #include "AllowWindowsPlatformAtomics.h" #endif -#pragma push_macro("OVERRIDE") -#undef OVERRIDE // cef headers provide their own OVERRIDE macro +//#pragma push_macro("OVERRIDE") +//#undef OVERRIDE // cef headers provide their own OVERRIDE macro THIRD_PARTY_INCLUDES_START #include "include/cef_app.h" #include "include/cef_browser.h" + THIRD_PARTY_INCLUDES_END -#pragma pop_macro("OVERRIDE") +//#pragma pop_macro("OVERRIDE") #if PLATFORM_WINDOWS #include "HideWindowsPlatformAtomics.h" #include "HideWindowsPlatformTypes.h" #endif + class BLU_API BluManager : public CefApp { @@ -32,6 +34,7 @@ class BLU_API BluManager : public CefApp virtual void OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr< CefCommandLine > command_line) override; - IMPLEMENT_REFCOUNTING(BluManager) + IMPLEMENT_REFCOUNTING(BluManager); + +}; -}; \ No newline at end of file diff --git a/Source/Blu/Public/RenderHandler.h b/Source/Blu/Public/RenderHandler.h index dffb997..c0f199d 100644 --- a/Source/Blu/Public/RenderHandler.h +++ b/Source/Blu/Public/RenderHandler.h @@ -1,24 +1,24 @@ #pragma once +#include "BluEye.h" + #if PLATFORM_WINDOWS #include "WindowsHWrapper.h" #include "AllowWindowsPlatformTypes.h" #include "AllowWindowsPlatformAtomics.h" #endif -#pragma push_macro("OVERRIDE") -#undef OVERRIDE // cef headers provide their own OVERRIDE macro +//#pragma push_macro("OVERRIDE") +//#undef OVERRIDE // cef headers provide their own OVERRIDE macro THIRD_PARTY_INCLUDES_START #include "include/cef_client.h" #include "include/cef_app.h" THIRD_PARTY_INCLUDES_END -#pragma pop_macro("OVERRIDE") +//#pragma pop_macro("OVERRIDE") #if PLATFORM_WINDOWS #include "HideWindowsPlatformAtomics.h" #include "HideWindowsPlatformTypes.h" #endif -#include "BluEye.h" - class RenderHandler : public CefRenderHandler { public: @@ -37,7 +37,7 @@ class RenderHandler : public CefRenderHandler // CefBase interface // NOTE: Must be at bottom public: - IMPLEMENT_REFCOUNTING(RenderHandler) + IMPLEMENT_REFCOUNTING(RenderHandler); }; // for manual render handler @@ -114,5 +114,7 @@ class BrowserClient : public CefClient, public CefLifeSpanHandler, public CefDow // NOTE: Must be at bottom public: - IMPLEMENT_REFCOUNTING(BrowserClient) -}; \ No newline at end of file + IMPLEMENT_REFCOUNTING(BrowserClient); +}; + + From 8d823560b6dc856b1a65271cd80eba0829ef9363 Mon Sep 17 00:00:00 2001 From: getnamo Date: Thu, 12 Mar 2020 21:10:30 -0700 Subject: [PATCH 14/51] fix key --- Source/Blu/Public/BluEye.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/Blu/Public/BluEye.h b/Source/Blu/Public/BluEye.h index 1703419..d292143 100644 --- a/Source/Blu/Public/BluEye.h +++ b/Source/Blu/Public/BluEye.h @@ -26,7 +26,7 @@ struct FUpdateTextureRegionsData UENUM(BlueprintType) enum EBluSpecialKeys -{ +{ backspacekey = 8 UMETA(DisplayName = "Backspace"), tabkey = 9 UMETA(DisplayName = "Tab"), enterkey = 13 UMETA(DisplayName = "Enter"), @@ -43,7 +43,8 @@ enum EBluSpecialKeys insertkey = 45 UMETA(DisplayName = "Insert"), deletekey = 46 UMETA(DisplayName = "Delete"), numlockkey = 144 UMETA(DisplayName = "Num Lock"), - scrolllockkey = 145 UMETA(DisplayName = "Scroll Lock") + scrolllockkey = 145 UMETA(DisplayName = "Scroll Lock"), + unknownkey = 0, }; DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDownloadCompleteSignature, FString, url); From 167b1d07f25069e7db23667b73925a0b794bb7d7 Mon Sep 17 00:00:00 2001 From: getnamo Date: Thu, 12 Mar 2020 21:46:25 -0700 Subject: [PATCH 15/51] working build - copy memory before passing on render command --- BLUI.uplugin | 2 +- Content/BluiWorldWidgetActorExample.uasset | Bin 83496 -> 88158 bytes Source/Blu/Private/BluEye.cpp | 12 +++++++++--- Source/Blu/Public/BluEye.h | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index 2bdc263..8cbadbb 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "3.6.0", + "VersionName": "3.7.0", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea & Contributors", diff --git a/Content/BluiWorldWidgetActorExample.uasset b/Content/BluiWorldWidgetActorExample.uasset index 01f10431b58b38c6f2a21194ad2a6edbb2373656..eb76cd7d29d5bba83e3def54ec6dbd4dcd5a98de 100644 GIT binary patch literal 88158 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 BUp)W- literal 83496 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 = (FTexture2DResource*)Texture->Resource; RegionData->NumRegions = regionCount; RegionData->SrcBpp = 4; RegionData->SrcPitch = Width * 4; - RegionData->SrcData = (uint8*)buffer; + + //We need to copy this memory or it might get uninitialized + RegionData->SrcData.SetNumUninitialized(RegionData->SrcPitch * Height); + FPlatformMemory::Memcpy(RegionData->SrcData.GetData(), buffer, RegionData->SrcData.Num()); RegionData->Regions = updateRegions; + + ENQUEUE_RENDER_COMMAND(UpdateBLUICommand)( [RegionData](FRHICommandList& CommandList) @@ -152,7 +158,7 @@ void UBluEye::TextureUpdate(const void *buffer, FUpdateTextureRegion2D *updateRe for (uint32 RegionIndex = 0; RegionIndex < RegionData->NumRegions; RegionIndex++) { - RHIUpdateTexture2D(RegionData->Texture2DResource->GetTexture2DRHI(), 0, RegionData->Regions[RegionIndex], RegionData->SrcPitch, RegionData->SrcData + RHIUpdateTexture2D(RegionData->Texture2DResource->GetTexture2DRHI(), 0, RegionData->Regions[RegionIndex], RegionData->SrcPitch, RegionData->SrcData.GetData() + RegionData->Regions[RegionIndex].SrcY * RegionData->SrcPitch + RegionData->Regions[RegionIndex].SrcX * RegionData->SrcBpp); } diff --git a/Source/Blu/Public/BluEye.h b/Source/Blu/Public/BluEye.h index d292143..a777668 100644 --- a/Source/Blu/Public/BluEye.h +++ b/Source/Blu/Public/BluEye.h @@ -21,7 +21,7 @@ struct FUpdateTextureRegionsData FUpdateTextureRegion2D * Regions; uint32 SrcPitch; uint32 SrcBpp; - uint8 * SrcData; + TArray SrcData; }; UENUM(BlueprintType) From 264055a7b133cc6e64c8d51a48a62568643cd93e Mon Sep 17 00:00:00 2001 From: getnamo Date: Thu, 12 Mar 2020 23:03:35 -0700 Subject: [PATCH 16/51] misc fixes --- Content/BluiWidget.uasset | Bin 197275 -> 219608 bytes Content/BluiWorldWidgetActorExample.uasset | Bin 88158 -> 93175 bytes Content/InteractableBluiWidgetActor.uasset | Bin 0 -> 68529 bytes Source/Blu/Private/BluEye.cpp | 20 ++++++++++++++++---- Source/Blu/Public/BluEye.h | 2 ++ 5 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 Content/InteractableBluiWidgetActor.uasset diff --git a/Content/BluiWidget.uasset b/Content/BluiWidget.uasset index 4fb109cfdf2f3d849230f2db8db37fd4ae59b4b0..51453655491e22967938c7ac67e9e0aa522badff 100644 GIT binary patch literal 219608 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

gWQdAPCgKWbzu z%Erb1D`psF=kA9@!`>@1OxsARpu*>x;s2d=uX{ms-bDn}!7&^22FT=@h|;B#TPAd9 zAC!8oS@5`d^{6{Hje-cdpMj%cmNw%3fiLdY^HBJL3tm}9(SBJfXiZE-(a3VrmM9MwTaA&ilxxIGZXIe5NUJa(jYr?$8mb3 z>krd|XjsV`?vl$J5y(jUhL$ni<=Qm~Tb8HTbG}pI77;ih4?v_pSM=^>T$$oFTPu%@ zUVlGbgv1n!)i7E2@6g*>i-#wRncE7f1d0dk*6XoGzL?6M)pzpa3Z-I!G>h28w zc^$w{X*lfIe-b25pA)NAR!Bn6yX%gMw+>u=zW*sNe4JWf(}Mih@?CT`anMtrWor^D zTb-@P$i&4;-gK2r{$L&;nNqggm9LmLThzz&(%t$mZGQo<|pT@L?%#=ya~6*SD!HW_u3Yg>`ug7h4DKbF$&=QXlK zzu8rPt&#N0{zw{TDVvNuBbmbY_7R7lJ`#2iZSO2OGb(D;Ipmv*5xv7WbGwWsV_T4C zBz&*2@tfYR)+?$6Y_NBz7k*>M0mMy_>ENq*!=_Xo8nm(MkuP5MIj{p|;$r{nwijjQ zzFk1WK6u-E6Sab+FW`)=Ix0y^7Aps5Wk!Fx2;_4J;&TY$bLh_JfJ>>7t9*&~ z|rHx^hW=Bh7WkRVklDUyZ%C#zWN1@O|p-?4gaHX~ymUF9w>UbqA z*_LbNQU$Em*2c#Pqf}}PB3BC&B2<7VsN2cBUH=2iI=N^b#Mk=wDMS3OD@;8 z(ZGUoMkGi^En^atYJ>?gg`y+gFhIL@UwMQC`UZNlnGhNS5#kTBN*M`p#>J~;kTyyb zq0+?4wDJgHd|V`~yu%!jE2D)96(*A?R3#|EKe$M3go&znW;MG~g&ap=4AO`QnMMPG zB?_5rg=is?NQMiI7A}G3C^n!1GExO;#bEr5*pVukM%hLylnsfKMQAbC!(~jygUq^u z5$fc|lw+ld!U(lgqbo$V-1H**>arRZ<14jHdK&3q8I$``4P-178I(S(DwM^kAs0Yu z$Yq9y2q_dfNWjLeQVM0bkYB2mtCXM?y;+&H@oFV3-H&1<3s%d-Dp=01jt8!Dy+i&o zDSpMMhtQK0JEX4#nKAzvcP~cggb+&<6d|aChABE*!8x7&3UKl|I6hnt_`Md6eU?U{ z6-CvG2Lq*6B%+Pbpe0T`1A4Eum~JmMmrRvaD$;nGN2EN`}fK z2H_iBpfI|I9+WL;uuQF%W6P`*f_};eLs>^CuxZiQ2*cyGLa8D_ny71=86APwyHMBU zv7lP9aHVTc^v#t!zWx;}6n0JYmSLNyP85b>w;>MtF%XwR1-*($w#T98gK2w6NMEI= zOre#Ag4PO!Au{NtpaKiykSEg100yB|1#xuRWq$L58$pz0c32T<%*zK7%B(zK)WJjx zwah>r*lL8;7^=5UBha)cRnSRNMuXYXx8tA_(3?P8!8DSL`BKX?s(3Y&Dp(ch2x`@; zM8~bYuDZV{gKNCRo+B*`x?vvC+%BP`0U7#33yV8&wZVuD2>p-;*(i{& zG7jt{`lO|R0co)wLk9yYo>(^+#E6&3dP^4555n=@#OCAUi1Xu!6NbbeN1P=xsq%5e z$qXn;VD{wWi1Xu!Q`hW$9C0$UhD961Gg)b3m*L}xlRBaKam1;AX7O>vS!_e>k0VYn zO&>>`)GQ#QQ8JD#`4MLt6b6oC3ptt5j1%09$qXSUs40^f<2Ydon#{m_G?dPy$qaa% zhgot%3Zoj_WBWjPy8Cf%E>c)>O+z6pC2rMg?nD%JH~A)_s(_o}RFI+FGMtD)9WnGr zDzM>1R1F?KhLyY#kDm>I6PgScn3m}iT64?}f%)+S4y5LAIE&pp#h$Kij*b$sy{n7F z&CRZpsFSOUo!D6<^6;|PudTxX7#L@+kZ$Tu0%q$q{SAQVN!Jb-c)9{F^5^%&_{@zd z+Z0du=6L>?u=vbPE`KZ>ez+dW>D+S}=6Xod$s^BGAXgs8&mGB>G1@Hs&NLC=WnuI9kEc7LGP>VA9rb zT!90L1iru~LteXLCc23y0xoAgIq1UX|F>azzrZ>X-We7UYsY#ZG2$CvNDFkQ{QumY zojY(Mz*TcdYTYUS{~Z=0g>Kev7R0)foyo9!#1IO`eSp)DWvwIYhv{4ju<`Pjw&vhW;}}vaJ?SVS=~ur_)hFS zDHZ0Hc*+BUODEQIzEd=dkj&E82gC`Fyc$A2IAykma6idqwuZE0`6eu~x49=?2k^qx z5TeimzMk|)EzxCc;k1N&l-g`9;eNLJ-_;WR)*l57)jldqQIzHX*eYzcvT(oaVz#mr z>8(qyNx|U=Lnf?o_^2?ttTJj{g4z5eeIFb4o;0k?xCuK>NPToCeFH`YlQ;{4^t0}y zZ%Yre&7Qv5#F-4@iGb5tPZ~CGzLRc+O72_m^;sV^*v>(|00hTo2euIRR7(@O!#Y9% zuKPnGDU)7BM-o8iocmvUrSpL={C+!7n)Q&vIpCT^>EY2(SFLKQ!0)(T`AXM4PG?X9<38W&?em#yb4J}~yat+?d5 z#3i}V(Z_{aW-Gvv#DSv2sfUdz0KbmbF;z!#wk?=^_0Vh{!}bpl1x(B|#$&FM&R}`U zH{!*yGR{IHbq bO2%izvXgt_nVGUfk7)7@W8F8Z-TeOtP()}K literal 197275 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 VBqT7a!!V#X{2RwyoY`&J{{szD2Y&zn diff --git a/Content/BluiWorldWidgetActorExample.uasset b/Content/BluiWorldWidgetActorExample.uasset index eb76cd7d29d5bba83e3def54ec6dbd4dcd5a98de..5b8cb20cb4dd1c733aa01bb194169826fc1cc3c7 100644 GIT binary patch literal 93175 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�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 literal 88158 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 BUp)W- diff --git a/Content/InteractableBluiWidgetActor.uasset b/Content/InteractableBluiWidgetActor.uasset new file mode 100644 index 0000000000000000000000000000000000000000..8b4e052d627e6e6bb790c6ecd644b51b65d0c187 GIT binary patch literal 68529 zcmeHQ2Ygh;*1wA&Mer$tf^`E*FG)y3KorswN(dw%pcppEO|r7t4Z9m4V4))xLN3YJu5^O<-Qzp$DS$6M-ZytZoJJ0WFa~i=qy)z|v$r^^4@EP0itHKRP=ToaZ>pDs;d0!avH|b_y==cwJ?( zG_BO{@n%hTR8_lltYdF5T!(G|(pYb3cD}pwB2Z`$Q?zvPznD zXpLS9OTEr&KZw>QZ!eunaxla6YOmAn&+$5{E4AJ4Uzpj>RGi`Q>SIQhT%ecwwO{gj zpZzyeS(dxPNxHFM$o#yvCUBm+y2g)oT2a6KZ<_Is8Ihx^(ynB)X6ue|AUVzF^OQOre!VQG##yGVEuVD-h)ApPdq(S}x^t>7sMhZK zVDdoJFG+K`Jkv5sk^D}NTigHr(O<(B2<+E-c0Tq-ag$M1rs*GCRoEUS8J?;t-R)1W zDIswZwQjvko6_fu;m3y+j&=H+R7V?i`k+Cen3}qMHC2j&A74*z0ydOn_`NP|=HoA( z2{x2uP1j3n{Q5bSy1T$pH_!45ZR35F}fPQVdm?6ZEYVsUze@3OlT|oj=g35E3d$cDv zA2+sZaBa{YXp=`Ylh~c^3Nf5l7GK^CRvbW=qr1s;NSYZghtH>Vzp1)6IBAqa$ged& zaSVJ_04hX0Os|DlE2wq4(_Ka=w9jYT@9P*`ku1~gaEU+yC0?Qm9p;m zZ9o@Djan$*Qk3;yOU}jU0wo0wFEm+k=c((KFA%y^sJqHZoBaB8zgDvA!Ur+9lEO-7 zxnDcUwdIzU;H z1`avU=?KSUeJuGpk2f(hsOF}UEg3MB3`ezZxTkcoZ=_rMG}ZPMM3~_q3v)PKWRw|A z&U+J#$RPEq@OW#re_y=xSqzo|`Hm`GTbwek^)V)3p~vfoBDOpB)NSBeh{+6h`utk? zaaaBV0!k|#UNT27xP1PX_c`G!q!sw5O}`o%raY1MQpZgz;mZP?m(>#f+&e~4#0E+h zp}k(%t350%P?xoYyraikrfoT6>1b$Apu9+@8I1<1y>(Bgr=g$H`vl5EEcn&)b1#R% zXX@pS8kfIVi1nO^>bz^@);U4dqs(%o{a^2$_yIgtp!Z=;UzP43;qX@ucb0e^B!|qq zFZdcBUsVy4UB0JG*VcdX#Z*&4VJW$m(H@Uq+jPY(%`h<4B2ZAAla*gQHf?lXTKe!T z?f#4B<--4m))IXWEO_E`XhWHDINHB|zws*Yo;;A>QAn(Hm-)1(i)J1H$*TEHXvmCZ zU!-H^$gFics+^_D7NrLJG{?MaZh|zj!sf3xN4HrAPK1>V99Teer|yl{E}b@aEz~5d zOwRaCJ?kfe0qVZ6v{J8f6c0<(9)0TiHkf-bSXZTida|;^{!!AS4Thy#FJ7hG=Up890!bEvV5RT>Ix+Fybt? z-&(|tOt>6~;WS8Rj;@8t25cB{hK@)GcO@tu}cGCQ-lY1`JwL4euS__}A z)6zh@aL*qnLaMl-b%N$x{@Fdf(MH~nDbc+ZSl|^$u_W!hBfr}wa8LJp9oa5Ng-_cw zD!UV0Ou5VB@N4aASG=W|mB4d=dPxzxf`U;uy7ql2xgz>6rLRHXVheO5k+?Bdl zE~)}PFxTNObLn2qdFq4DbrW@}X>pr1)n8m#?I_jL9bPgss5J?NmdxabrNMla8t)Ql z#6r3f{`cIq?VE$eTv2m7UY!Mp&4AD~&7#M*cgK7hp`2#u7e;&oQE~-|dfA5$ESJNH zyf^7H^ISh1V-!sypM1i}n|H!7idwXm8td>nVR6E}owdK!J}5pF2DIq*H&cdUh)&;V zy;>(_dwa#Wa)?y%i05dbVgFu!+bi%2rZTx|VFl8ft?b_e%BE^4M~bOh`>5R!zra4j zi;C04?x9$%Cziccx(M8`s8~{{Ryxz#=6nrjq3TFB`sPnK34>QaCQA4i?WQ-I^?+{= zDIBf)XlB&T)Zh3HYXeov;?WjZb6X;Zvq--QSvm|HFxA!E=C5Ykg{y*CD{+dbywWM46sxZmo4n z?f0M@FtULv(tZJd;fSpj2Atfi$0gxQa=SnSQC}=01+?S)r)(2YkE3j)nlx?b&lLZDIn9*Sy)^>Ttzq z;?o}c^ClNum10QRuK98Un$p(}dbrh`FJ5E4O$4{kpf4o*zTIxTrIg$WOy?WGR2 zqSb?Lgicp`eA>#F|NKo5gH&|xay`^fE+w`7 z8!w-R!O4J6q2F6Wv7}+`=Uoc66lN3_L!q^VH@814h{-5q*Ck9fv&D$+&~qQ{KDFZ2 zR}K}GjIF4^_(bY87h&03Sm~*8m0?v}s5`u+m3i)|h>VP(NXn=WZeI;47djD&6HyTm zLi#D`(%SVLZ5QM8l>1F9+DmSI|5ib$nzFTlkKg<{M(6WW)T~15a^JA_5GRd`)lEC| zDevj33dXuL?m7{Kl0y&Fiq~%b16Eb!pwNn6E-4c?bp)%5XpbGJ_sl^525^APlwu7J zZl4AB7|ij9hWC3IN>@ZX{vv0!_V+!_H$!!byv~XW-77q@3)*@7mvfH7AVZAlROhl( zOzFX3WqJWZX4a&BimAe=#S6Xx`#<@dyA{jK0`dty?ZnQj`@u%R|A|>=BqPdz)tLqN zM?5@912c@po7U#*i>87ZtPa9WuD$N!_do*!4LAMc<(b0Jc>Au6iFdVx6x3w?TlVdb zVmgzz!3(>`@{e7N@yjv_IjE3maF}W8E2}y}`(!P{6rS8WVr~lUlcHDX^|;rZG$7W8n5>IQ!8dphAp z@|y5qh^)h+FysqmR(QTQ;el=xt9Ga#r>;xyP#1N~tnmC`!UG;URbRlfOkK}w1UzPa zgB`K{0uSq3$2%3mI%ahlPc8KY9QX`X{hr+jc)m074ffq#^=%%{rHz0mR6br4o`==- zeT{(U$B^+{YQoc5T~E48UDPqNlFx1v9{6uv^#z@HTV2mJ;bGaSBFn5Uc$ja%!|WP& zx6xf=;rUQ?2|Vn-_csEbuS|S{o$|T{=^cn00icQbXlqg$H^EJSVl0ou9s5A)%}>@ie3UfM+2t zC=Gr}=J;+*JeVJV=V=U#(sR$r9N&$B2W*0T;0J)`N2L&#zDzeNH5AWpA$l;M`a@s9 zbBY?z%xwyZDnog+WTkIbcrXm$X{F?IJ#SnH)|lggIs;Ezg=h5+x>2by@E}HF=G$Cl zKkNU&SQU`|-f>>Ui+ZFU-zO_~Q*8JB4$Mcg359G7hgr~d0)A5gkgXe1M7Jlb8 z<*(BNmfUbX_?Kxsp!xxPQ38rl&Bdkmg-t00-8NL;%fD?He5 zby3&ofr``9!dxU*;IgI-~$@Iy$0On6Wh3#*l0e`dndhx&M4 z^#eR#&<82kghxW6e_P@C)Px7}d4)ba9>@r(PskJI5*qp23XeH{0Dq9GngbWx={W}h z&y^N}LK9J*| zD5Qik!c!3}B;+B--)0IBm=mUL0 z9PK?Iq=Y)}(}zF;j#E!OOmZ@PaJ+^y_zv`mqtCJQX-gj*)8ga{cyON3o<4YZrZau) z^yx$&(0m$wa6}5)deR5@5-3LkFVG+GbDwB~Yrs(sJd79k&=2x|P#cut9=L%Q_;C*$ zpdaJldyE6);d_h+?*F1iV#ZDi< z(SIk(QI4@;94KeFovwK-o#`6*F(%4Hve7r{s@s5^`5rmy^iX+k08|3bSI`+HTw5iy zg}w&PEX7EpJesAQog^`WBhl&w_X-`yCxAzsR|`l%(fEQaI>h%@Ib1>)^KinBr(EOS%7AN*1Q2^wk?%HPz8CoND2S0ixCr$6C|5)xCB`X|sYsZf^Z!xK>A zM-i~TY=_II3tyS-Oc&2aO?i3${v$}E@wb>P3i&PKTf*?&GH~BPUFFbugoomuL+Lw1 ztJ0=w<=Pa@C!jT2zE(o;60MS;K5EfgwHift)l?7A8me2a`D2zgQEd;Dh9gx!W3^I6 zRXBwC&{()e5)a&j%|@P2a?^k`4I9_d3NoBH;}`8}v?8sHPBY5su7pZYQ8jXjeM&D)_Qz5b1$oLJ+TsBOkg|<@x9rJ~XPkDSmP6L)A--em z7%OYV#Z;TEiFGYfT^p^1m`WRYAbCAjDf1qPvT3EAkN!}Nb-q~nfA*l&3VGkUc{!XgxK>DR_7U^ITMJoo9E+vz!lC%{1 z&Y}Ah0ZA8knOZvCWstAQ&<4;aRX`2hF6IWkV&LvQKlsWh)ZgLJBawIlNBR8mEMvP}); zSh>Z~oKhm-sNI)ljV!Sms-%)?t%CmI$hI)E02?dv$8JWEFA9+wml%{4SCe8|6FOrMeS zJc>0~FsFG1&X&^9bqKc~N?MvubYnda+9SbFZDig7FIHp~^zqRL>qW?yc^j!*?hlRG z#NZiUvF4Z4tb=u;O|vW7xkl_&FMD>#79OC8G*RvvL)WVY|3^_>Ig%P$Z8qjQII^Db zYSL=O8mC4bxi#BE@QRVgY#vYesCl&(xp%HHfb=VY)@@kPC5TmBrj|)L)^jLJqB$v* zR(7b9F4l4b>23hsCsUhj8bxO{64p(F=k;5A^E`_+9QG#I2N>%));x1*oT>cunEd1w zMeLo%8LF?kYb4Wd?6m$0`!Ke=$onv(#L(daAsHXp9byc|I;$>qyTp_d>t%n^ux!%4 z9MZll(zs;0%OTB7BzOk>rHDO6KZ0Oykw|%ex=Nz&Ow!8?!qYV-F4n06(l95 zQP?P6FEt>t74fdT+O+SrQH)=N1W#^_J#e)0c(IHZ-O*hUSzq%|-m+HHZP>U07sGVQFWO z)DlQ~h-pY^XOax1YzLBbA@L+CLkuKc_$}$LAnkP03>$^>V_7Bdq2)@xhWu=t*gKce z8WwvW#LyB{FC3HBY)uq|BXbF2FKHv1V&P*iP(ePuTFkyS(oD90ng92!%EG0e6q7?N z{cPeUtQ#{xZ5sQ5iI3Al=)jW-Mv2*AKRJLswH& z560}m>r9-s$X(!Yn$2biJ>k7d5tWpPReT2JKI(&886|N-!bD4h>45+Xr#!P zp6Al|ii(*m6>l;6g_RBl- zH?OJ9r*wU(9rmfl+6?;9mnaB6i5W`#g=}m>o1^358B4|u;p>xy^~l(vj2i+98{v3j zZ|e7Ky6a0m$qbDYH_VJVTGn|fXG6;HbkXT&FUM`-=-1XbrNEgmbSyh&4;*Xa9?b10 z5wC5;-&jv9Mvd@iHm8JJ{XbfN@_DIW;>qW5vz+6(LBV+5L>Znqg89B z#8^EVYeB@;Fo)TwZ7dz+xuul+7tTg(v|f$XhNU=ya8!s{qDY(q$m=ZXXS(o(V`BDX zM0PG9-Z-Q5H8y5nypJ%b!l?$%Iq+->P8$r$&WYKZVe1BEk^37Lvp?25gF4JCGV0I# z8XvP4K0z!bkIVcD?`J~Heyn+glOaB%F?e-u%-$mL%DTVvV)ndy<@quDV{e^GzBiG4G~%o{QBNkHoJiN$GhqFZ zBUZgwqhJpK82mPTHg*$9gr_(rF1Cwc+L>}Q-IHSW#p}#b#6v&TcEoJKbL%<8F{~SL z{?d;|U?X|N@(t{TaNZ6-1TR#oT7~;8#uPfo*r>I{WPJ1LvaZjnSgq&q{2C&LBS`M0 zG%C#AGiaR;xQl2FA2C}T*N6+M6Q}s1$K(rZk6fo_kd9#H#{Lu0_#C>%eg!+FfdoY~ z6tPgu?^*OgG+*wrY=WcU3VUILLwv>OV3GDpJQkd}^WMOCo}eP;Sa|)${e*K3^IUWq zSr_2*oT@g%j5&?BL(^MiAqe5))TPRl|^&`6-#c)SvkT->_P* zYA5CM-xT|=uZ|!>hQG*K$MVc1ZYBsh_9v;yomVo+5we9m;e`|EgLxc(h+N4zAJWA> z7d9Im7e5O!mg-{t5lPd7^}Hr#zdQy>QGcRG#z3%l#JMl-pnq7KKtH9nBK9p$JaE>A z5!=YS$uSt;%<;O;wCrWf`*@7gP5KV6BA-`2llGYKt;`8?ZSy&p;a6q-xIl~GNCQ@a z#_5`k&NgGof_a8h9J#~Bsz%PhIM>O#mV+^u zToSWSjsbGpIP!}nBz>&+u@;^cvj>ii1l#cJnC*Byo=!SuM5lv2gH4;G`jNb;%WTLR zBJEW^Va7UWe(qI9#V@2N4&pgn!>pyeJ`AoAT|b!{!FoA2CO5406026M+4$K@IVKzZ zmy}q#!g`4(GE&6{GlyK`UqJ$MYUl@}L zYpGruvmHlgLgk3PN$7KZi&Sr{b;j&jzh}7EuFxuj_QTNg5|T3Z%O%1yR}v=1(uscA z$u+YGep$>hbyhW`2R8qv49}KBU-5e=*4R9vLZ?6IKsG&Zh~GgWQiJDtZQA8AvGL9b z<8ad|0V^-_b9XlSj~cObh<%*753JJU@7!$Kl`(r@pJMKTJqCW07mEU`_Qr2Qu8P^7 zcfjdXb4i_RXHds%YBHP_U+Hgx6Mn6+7YrQ+F%D$;p)0Yq}~>?t&0Y0N%YpG)a< z3hNQh#zIs+5)=+oStH5iuFIDO!9dq><4fPg}7!m z)rPmvp+Cs%dWB1B>|bX-4L;$!p&lH=^9k5L;UrnE|FIjy^Ne^J1iM0@Az&D&i zrw|NJhUE~R8)M>PFK;#f1@H20+D$QgV-1!gHcmrtj@j~TRl~gY2=~%hLts8e%v4&B zL3cNLGAe^&s$=QQ6IY0sT@Z9C+}9F{s8ct>zCuyJV`%6c#{M#V&EO{t(MxC2j22Iy zf!ev+MEc(mok+&=4kd}=x)aH^lPF74_sQx$MckiDdncoAe^r($$~uvL$hHXz4=@0S z#KjnJvdb{Wf~Oc5CNZHc_m5}VKq+91BQbyjD;e1q5$5m_;i*P0XMFGw3}bwVPBTp6 zE2onL7wLm8Mt~hNdXLvGqI)wR%)Ld!&`;0|ZXkYvz9M6o7={ILbx9v{1G{($F*uH> z2*VCO$MIyolni_cbI)1|Mme`J^NpoYA0GW@qyS1GLzV(-q*(^6NtlZyfBs+V>!S6+ z5=9h%bt<~fundv{UIFn0Zd-p_!!JvMrEFzuN&g{RL)@0f_TOV`hmY*pQ$@CLL{6my z{@=o}X280lZu45Ol(FLEmTcikCadRJ0qc9NSAT0x4$#LEwX$aH91fjKjhPcqY4h0r zTdny}$(h$aEN7f`u}tOKw-c>X*uJCNE}p*SwycMBUz0Kp>oqAN;4E|2`^H@j;n|#n zjlr-<9z#mN(h>#tux7{8ypj@QcEY9 zGWErZ^O?G04d1sQjv!k{lNMs@vQ~7fL_~+{MUxhO<-#$4@Ye&OuJ&?R02%cnl1ZpYFvS&p^IfoPbu zE}1#aBQ(QUkLt6o4xdRdTGm+Ri&g9g^;n0abEUEOAHd9#J#?H3wm3828&ekHS|5zp z*eP4-boeeGyt3A4w&dutLwojce`Ss4wJ>Y6)#?aiWe*aaD|OZAy2d|%nSGJ9Mjyz2 z6k}l>h<%D0tZ&dB))ZrAF>Al!b$A5Ex(1ke#*K~H$`?s)n9mN;C;KO<+wzoKQYSsH zTw_|tuF#&n$6rIEgC$~6A4?t$m${5Y2Jf)Vcnz5!2oAQ%SmUtPE2Fiv>B!Fo1oIE_ zXDhEi=K4evt@W8l!=4DUEpySV&&IP0pqOKn;gIEMVT_ddExEvVq2-}clc!wKa7k$!)(xEK72`4N!Z-mn?8?}En(fLs*^FgZ zvRukojt667zhj(onCEWjI_4v@x0F-{?>@}slK;VN7@y%AVp~rzPyW}=Ot2^5wT7Vs z2LFO}!0?!c4q5qDJPXS^KbDEL4m8ZS8mF!G_pJwV&VaE%v+Iwwels9@R%?$UeMNo! zIrnKuS)Na`ufeZsqxml`XN%)@?8hT}O15svd81w9czNg*PI>Vh7G{6YY2c84Ju+>w zT<-S}4MtyxjHR0TsM}1?n{eY7%~)sSya>KE(bS8zEDcI!IjF~Z1FRDCU@S%*X-knu zBg@TRUrN29^TkA=?NWZh(IolIf_%dFB6?>M-j*g``jp|Rs`j|)y-)n!CcG>y@M@-z z(nReJD&>UNera~QxDCKxqxXc35+M0LI$Yvibx3#1OruAV<%{p|QbHsyz)Q_U>ODR3J z@S7p;y{zDio1FN46aRff*DXz1`nO94FZ)2jlUH{As`Hkf!&d$@`o`n@TYu@U;4`1= zyXx0vyE3{mNnqSDEJM4Aes~2KIc?7fY;Iob-`gTeUQ+uU5k0z zKdG+?0wUiQr!Ip;i2in}0vp^Z1nlr(8bs-YH%S|M1I9lD)|6r1d8?00JVG_l# z`K5$&RHc9};B{hA73CkQ1zvxM#B?wk!6CdOQNDZ3&`ZFO0u_M@uaiShQPuA(s({2O zVKhjq#5aARCmwd00$!tXZWND7l$i12-GW?+fxkn%l*Y;|{QDdQ;s$sDAkwQc3;%}9 zk?@AYF+Sa!;c@%?-kMTBy_~I3yroTh66KV*Pv+<+5*+#aDOKcBc|eGoHfu2RBa~uh zUQCKXMvm^s3+?Jp;=E6`r7yi_Q$~YG1h0@{l8E=yWlbe_n&Wj;SJt1(XR>E(ZSvdg zb))hfL6f1s0dDuAf+>*-p>=rsBvNmgnZ7%zYZg5ld5x(~&}F%;#q682UmE(TzGBv@ ziDO%`lu^li4Lx3}S_a^O3sn&5ZKd<69B)C)7w$~I{Ei~WD?E`-{)n20#?)li;NvGWJ*v<)YnCX(mzgL_s<%;lb0suF zMZ8P32Yo=v`4i4B!+TW)aKic7N7CgfaLoc8j2&=5f&ZZXZdZkE zR4%wl*IZeU#;;ceRv0N18*+}L4;DFX>4Vp$!pGnqDO~COvLN8^Vk-TL9mUznd(O>U zc*NX}#UEYPF)$|Ts9u9&ZUqK)B=rFO!5cF1PFJ{dJAGi6^(J%Sjt`b>x_;j9yQW`s z^Tw%{zu90iEoVx8Rc#~kwfV03!0s)g#F;p*1N?p2pzs0h>k7gXUYl}jH$ zH^US_8mKWR$JEgaR`po;((2@lD}Mj#?k|>p*Nl0YtvY17d7)!h@UZM`1!2Y~t9$N1 z+;XKLAeBH#EK^4X4Yx)nl=Fxp!n?X7iYS5lXHhUw2T4Sqs-e_dM2}3Up1pIT;I>GG|7xOXt5sp0iR;^; z$-)<=WaZAkv2~{zO&`>m1oU%+>I^e&@y^+ok1l*7ZRL+&xi0x6=^ZQBi>kh0S#!D> zmYDA;)5Th}$lq9+4JZ3 zoYpq(*2{jjf_38tlm`%m(Y=r6GE>FiT}V)Y#f@l5N+(iV`mUMSr|ryL-wwTLYwPh} zw|qr7NjRGRZ}i&fdg$w%zYpm$wdb;F6=)D`oS{aWjRuq=8tu)pJg`U)7!1Z2(W3vZ zTCuDmn%yxp$cSc#1t2d}lT?rFG|pA`+Ii}t-u7Aa=h~6on_fTU{^Egqb`9_QI@5~& z5Hmso>tDY3oU5CjaeKxsGe3SIC40tRD_EtdEx&~9j-=~WS=04WjsE3}Oy>R-C`Lh0 zEqN29QqcsB>Y(&7&v);+U2lw7{ZNn3c5eH5v=!`a*|+!(q2BhNr9M>cL47EU9bDaf zqn&z?9V+xu+mB2nVxCx!)0u|2E#b|)g(+vIc0y=4O33oyJ-7EA6UV*gpLi{!qLu(%ENtd z57ulRJ@n7XnK!&W_|%`?>Xnbdg~FDF4(>z(2*FXz-S73d4qMT=&hzGdHT#YHH7lps z<0oA5Iz|@?+Z;MN#Nwpr4)@_DzIuE0v{!5MF26}T`Im3|o`Kr>ZFI%;@lj4TwkDRgAmwo1Vr&O^(0Iy+SMotL*@>%8x-m|uDn zh87B28agzS#Z^@~++~NY#l7S_>xxpH;;zD2pLWc*7%Wzct?87~!lYRD)ht({1h_*)WDyHyKCF0g- z9j&t>ZjFvPLZkm#Ces|12exKdpw)Xj)MiUN?~OZ78@eH9|K3lJ-nWeDL+8yD2JARL z9nf#drp_JG=ItJK^zvi&9&ZIZwA&#J7b%WD$)D^UnsH`X=1n7hSiI(;^@2qx=Q^kt znlOUVdF@^tk@SB0>SirE4;}Gqb1T^4xlID4p-})U*#E>f2?O8OZ1{(#zP@PWhU*7C zK6vq_zE-e@OgbP|;Lx1{kFV8O+6j8R_QXs(ZIkE`iW;wO?^aT4_v+;ou6jc?W7~Kg zF&?vOae=9OacQo@Wdbi3v?J)g&yHSId&B18>#yC`cF!~8A3#Nva~<4s;xGsXcVm|& z51+LDt@K4Ne6qLnh^NlAf<4U*DHn(lS1BxYxb#-pE{}r_A}6aFk%ka)Zw2yN(kG!$ zyhy<}s@J-2r0O1U&Q^WbKX&y+wAj`4s#|76L8sNH_7M($ zrG2=w#Ov_Z)*(a!mV(ScGSeOahFttZH417ON#)rLFxbo98MJZyuV3aZe?qHH`p&+_ z3ihQ5nLq%W8F#?yj$Wbe@qLn|xkWPl#9WfNf)Daa<*>!Scj`dw{pX+T8(f_)_rz|J+aI_ zRl4b!<9gZ0(<>@0{jv#3MBinu!`Ff$RyM220~I4FDas;yFl=6s!q2A~Z}EvU^qV9a zZI#M-wxEA;D-#=MMBf%QF5jTzu(#&4{P%>Xr=>3`m>YNZtG6#@5zDg*)1luLto{6NRd{k%UN^GSj>OcjuN5eP78e#NRDBn!I`yBLX&8~!cZ2HoMwM?@`7tW5QF&PQ!>ZG! zZynZd=={gNJ!|*iZa=WFBkKPP)Wvw!%_Nnx6-`w4+WG3@R+Yc5@^M_Dh%SmMoj$vp z4r}d{mpOfo5|>_PN91Cf)8(QPzr94a(@KoMeOhID9Tj#@dAYsX>GmOJUsB_AmD$T{ z+~RRwhs)`&?Nk4S#SxvGU3S@)t;6qcR-4eL>GhBC_(A9qidt;WXMXw3Ou{_iS#1 zYO(AKw0FB<_vVxA*~6|HeEQZ;pWJze73^(vrcz)$|G{%F(75ilHII$%HaB}w?rHgx z-}$(U6|51Q;5P^CG?;ObgaP;=at@CuTI%f_{8?9S?Vnnnv3|z*%3X6_{EAgLs&k0A z@P`xlFY+Ammz+28qZuo+XWwJ5?UOgHFEawG>R~H;> z1v}K90}HX8^Lo5~^!?A~-?O>;w|D+nk^s6RDJ#m5K>J;*2d}!d*Auy$-uiRoX5aMn zRW`mnsOZ?Pxz=HkOD(0 zuk$kL%vpDo9rxVLLpH~Me(!f*wr$VG-Y`$NidgYq~QmhpmBZCnQPj6n&+=OHv7xhQgg4f zg8ijDAqH^lw@;p*Ikz}{-TZMSJ31F$Vg(yX^*9-xu)*^&YCc4>9H&$e&4w22k$P`j4X zh_13bOP^Yvb7Jn|m1n)R=d|MHpgWq>Q4ZQuezYyU|A|+#H(dPaH#eNs;&Ut5;pSRE z;|+y7FBsEF&t27H+PYtsf7sLt_Lp%jZ$cWB?v`0#F4OSjbwoXn8X%lS0lj(~!95!* zevf-CJAHBdq_ZBbefkr#5ge&#JCX8|+tRL_nf6-#!bxfOPnxmjRV&z`HiA=$u90Pn z_g?eHDH&J17XR*z)lc^U$+3(8w6|GwM`7Nyh1vJ_+woHGhqiuW1v^wmz^>d*blv#M zvJN}f-!yV{=bpW1e>*>!Ky@0=gKwQ>EBd``9N@PToi<$649AT#yAh? zsbTJp^FX%%M4}t;a@B%&W!dV!{;_gwW+NW;Y*5{@8x{VDVBu#^<5kT`DsQ3kusAo) z@{q#2fSw|Sm)t4~G=#;F#>tH0;&gFX#Ku=9ZC|o%OY*P>{#g6dmJN??W`==K)?37& z2VVW~+dCe5V8q;C``_2~_?ahL!PcUYN&$ti-sThxi9XWZT@ zc5Veb)bk7C*`a3*bs0~&8rVU$9S$Y4z#`kuZHk~dD(66e(D(mw!`k`pPbY0W=8yab zUwCL-PuJY%n44e~?`jZ5Yxc>Chqt}ED0|DI_qvqsvyZZZHPEnFkV-mHvw9hpRcP4? zcBl;tkh`EXvxM8jkc=>Rx*qo}6nXzQdmv3R_b&ULe*g7+jYj zA0l7!C}^R?+TQ?QvWlelKkiH7A8r2F)pzX~e)rnckM79ZIE1+g&ay8-{Hfb#+tw{g z?mA>y%h!Hy-G1L~R}hIBNwv)V>6<#n50j1|G|ofcDThpcO1E zPKotprtb1P?1g%%$6e-A&$rnQe(Vxs4UMf5DCSr%KqX3H^FOT}PYw-kc9(S{|JeE_ zRbiFNc_kkBSAeYcSi>QOueT!xY^q6Y5mzf8(?WN(?6U6vGs#|Zozutp@AgO8%wuCMVgI9lvcRzIs)8gR#QA9kwq@|r8I@u$5w(HOHS-~Dwlp+i0%Rz{zLm!Ziqfh7$0RfMuFDM7?6YhMeqUY!i zBko>2=7D8<&+=Ho9!F)B4(50mN1f>Y`wbtxnLl8}`d^A#ZU1fG96@&o%&cPu-Jw5E zz`q-1%py07KB$0h@Y~CL`iI`e1=k4bBiaadsTOPz3)Ox77cH>sh>O&&s@oew&>f@h zYg8VVT|4)~%2^4grf+^iU-E0g#uJzw{4e2>R0}rD67Hc?U93_09F;fa3iz39M60z^ z;c8WrSre1i@sFIIykcj{&}Dx=`N+N<=ike;q91rfq)zk+^`=%ZW*FK8gc%koslNwA ze=3P?p&Lkc`h?CtfJf6El!Nxr(-|w+i>ORV$f-G9)cwDdF&pbYaR`j^D`>C{nW94t zB|~){(NH4V!l$ZbyvoBjYCPgKs>U3Z8@k&hitY|+i0&?|onCowuZ@|P9e35lC3ltl zok;*@LMBpY`VRdyixuosRUcVo-EF*I*|aA-p+5}*?pV4D+Pe-PpZsczyE0d-Ov-q; z_LmM;utv~b@{IvbfV99mP29xz3Thc?P=K3-_BXmejXr=6r4JJ33;OA@E+mSAE`U-B z6d-tD*#f6BmIa6eTNWVpYFU7Ik7WS@EtUm{3Ro7{BNY%_vZ4mRcL)Yh*))f1GW|C& zyVFg-HFDVLUxQUt=-xh}`)uNij(>gclRWc?|C8pkS30JmhY}b46A!d4Whx`!sC4@M zsOJDSS1-Fy*X><%o&K(>cZqEXQLEdH_mkK?ZhHw0K#7KaFGYi~%Mr;#hN>E$UlLQ2 zqq}vl!>^B&V;79^5h6c+LIrC;UZE;6hs@{=k+&tji~fb&Rfi1_{ScDWK@`xT6V885 zFv1edhTNYZh9S$}%t4Cu3-xl?U@yC~-0pWuwIqYq-SXFVCX0rN6;X`_NECCqlxUqX zixB|j>Eg=dgxNREqXHTd433oFcyWi_C*IuAOK3fLt5TuDzG}xbHyIqi;z#_Bu*{>( zg7m$nT3C}^3N4>_Vz2Sh?+u-9dxn?(Wu6{*6Hwqcg+OhnKVtAfbf`Co)Zh2{LVIfX zi0UyKF(cfsxE)7%e0oM=Qbxa&q{Ot;0RuAQ<5RMeljBp<`X^*&q$Xsh2TiDCvw;+t zXt4kf+)%NsBsU`gI2Nvf8&zqR>Mj7UQ&0FMZ=gjqbo~^mk=K@}P`6rUgz2i^yHySg z6e;R|(CRemoveFromRoot(); @@ -116,6 +119,7 @@ void UBluEye::DestroyTexture() Texture->MarkPendingKill(); Texture = nullptr; + bValidTexture = false; } } @@ -128,7 +132,7 @@ void UBluEye::TextureUpdate(const void *buffer, FUpdateTextureRegion2D *updateRe } //todo: remove debug address hack - if (Texture && (int64)Texture != 0xdddddddddddddddd && Texture->IsValidLowLevel() && Texture->Resource) + if (bValidTexture) { if (buffer == nullptr) @@ -320,10 +324,14 @@ UTexture2D* UBluEye::ResizeBrowser(const int32 NewWidth, const int32 NewHeight) renderer->Width = NewWidth; renderer->Height = NewHeight; + bValidTexture = false; + Texture = UTexture2D::CreateTransient(Width, Height, PF_B8G8R8A8); Texture->AddToRoot(); Texture->UpdateResource(); + bValidTexture = true; + // Let the browser's host know we resized it browser->GetHost()->WasResized(); @@ -350,10 +358,14 @@ UTexture2D* UBluEye::CropWindow(const int32 Y, const int32 X, const int32 NewWid renderer->Width = NewWidth; renderer->Height = NewHeight; + bValidTexture = false; + Texture = UTexture2D::CreateTransient(Width, Height, PF_B8G8R8A8); Texture->AddToRoot(); Texture->UpdateResource(); + bValidTexture = true; + // Now we can keep going bEnabled = true; @@ -582,7 +594,7 @@ UTexture2D* UBluEye::GetTexture() const { if (!Texture) { - return UTexture2D::CreateTransient(Width, Height); + return UTexture2D::CreateTransient(Width, Height, PF_B8G8R8A8); } return Texture; @@ -621,7 +633,7 @@ void UBluEye::ResetMatInstance() return; } - MaterialInstance->SetTextureParameterValue(TextureParameterName, GetTexture()); + MaterialInstance->SetTextureParameterValue(TextureParameterName, Texture); } void UBluEye::CloseBrowser() diff --git a/Source/Blu/Public/BluEye.h b/Source/Blu/Public/BluEye.h index a777668..3d0b548 100644 --- a/Source/Blu/Public/BluEye.h +++ b/Source/Blu/Public/BluEye.h @@ -297,4 +297,6 @@ class BLU_API UBluEye : public UObject FBluTextureParams RenderParams; + FThreadSafeBool bValidTexture; + }; From d35216be4daa88c87cb2a436fb19faf12b658144 Mon Sep 17 00:00:00 2001 From: Jan Kaniewski Date: Thu, 12 Mar 2020 23:44:23 -0700 Subject: [PATCH 17/51] some readme cleanup --- README.md | 29 +++++------------------------ 1 file changed, 5 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 33535d6..a9ab6fa 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,11 @@ ## Getnamo Fork Notes -Fork made to support small additions and changes for certain use cases. +A fork of BLUI that is kept relatively up to date. -To install check out the latest releases https://github.com/getnamo/BLUI/releases and drag and drop *Plugins* folder into your project root folder - -### Download and Fullscreen Support - -Contains changes to allow downloading of files via the inbuilt browser. +Latest release is updated to [CEF 80.0.3987.132](https://github.com/chromiumembedded/cef/tree/3987). -Updated CEF build to 3.2556 to support fullscreen videos. +To install check out the latest releases https://github.com/getnamo/BLUI/releases and drag and drop *Plugins* folder into your project root folder ### Convenience Blueprints @@ -76,14 +72,6 @@ Thanks to @oivio we have the Demo project updated to the latest release. See htt Click on image to take you to video. -## //End Fork Notes - -## HTML powered UI and HUD for Unreal Engine 4 -(Hit up the wiki for a quick start guide!) - -Do you use BLUI in your project? I'd really love it if you credit me and it! You can even use the [logo right here!](https://res.cloudinary.com/aaronshea/image/upload/v1423576170/BLUI-Transparent_eu582n.png) - -License: MIT What is it? --------------------------------------- @@ -108,21 +96,14 @@ Re-generate your project's Visual Studio file and load up the editor. Then check Updating the CEF event loop --------------------------------------- -~~You must call the `BluManager::doBluMessageLoop();` method every tick in order for the CEF process to update properly. To do this, override the default GameMode's Tick function and include the `Blu/Public/BluManager.h` header file. You can then call the appropriate method.~~ - -As of now, you no longer need to do this. You can simply call a blueprint node to Tick the CEF loop every tick of the level blueprint. +Some actor or level blueprint needs to call [RunBluEventLoop](https://github.com/getnamo/BLUI/blob/master/Source/Blu/Public/BluBlueprintFunctionLibrary.h#L18). Loading Local Files --------------------------------------- -Set your default URL or use the "Load URL" node/method to load a URL that starts with `blui://` this will point to the directory root of the project or the game (if packaged). So if you wanted to load an HTML file from `YourProject/UI/file.html`, set the URL to `blui://UI/file.html` +Set your default URL or use the "Load URL" node/method to load a URL that starts with `blui://` (or `local://`) this will point to the directory root of the project or the game (if packaged). So if you wanted to load an HTML file from `YourProject/UI/file.html`, set the URL to `blui://UI/file.html` HUD Example Blueprint --------------------------------------- Within the release, you'll find an ExampleHUD blueprint file, place this into your project's blueprints directory to try it out! (It's a simple UMG widget pre-configures to accept keyboard and mouse input, with a BluEye instance hooked up to a canvas) - - -Shipping Your Game (Linux) ---------------------------------------- -Copy all contents of the Linux shipping files into your packaged game's `GameName/Binaries/{Linux}`, these are the required files for the Chromium process. From fc0c126f2839351bdca71bd2a99968463f79da15 Mon Sep 17 00:00:00 2001 From: Jan Kaniewski Date: Thu, 12 Mar 2020 23:46:18 -0700 Subject: [PATCH 18/51] expand contributors --- LICENSE | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 64e9bae..6a308b6 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,7 @@ The MIT License (MIT) Copyright (c) 2014 Aaron M. Shea (AaronShea) +Copyright (c) 2016-present, Jan Kaniewski (Getnamo) & Contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +19,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file +THE SOFTWARE. From f29419f517af8c5a9c9eb67838cfdae194bcabd1 Mon Sep 17 00:00:00 2001 From: getnamo Date: Fri, 13 Mar 2020 13:02:56 -0700 Subject: [PATCH 19/51] enable webgl, move things into settings, set 60fps --- Content/BluiWidget.uasset | Bin 219608 -> 227043 bytes Source/Blu/Private/BluEye.cpp | 65 ++++++++++++++++----------- Source/Blu/Private/BluManager.cpp | 2 +- Source/Blu/Private/RenderHandler.cpp | 5 +++ Source/Blu/Public/BluEye.h | 44 ++++++++++++------ Source/Blu/Public/BluManager.h | 10 ++--- Source/Blu/Public/RenderHandler.h | 2 + 7 files changed, 84 insertions(+), 44 deletions(-) diff --git a/Content/BluiWidget.uasset b/Content/BluiWidget.uasset index 51453655491e22967938c7ac67e9e0aa522badff..d617083b4582a66df774eca1a168ce2cfdd4fe95 100644 GIT binary patch literal 227043 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

gWQdAPCgKWbzu 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 bO2%izvXgt_nVGUfk7)7@W8F8Z-TeOtP()}K diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index 86425ef..af14dbc 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -2,17 +2,23 @@ #include "BluPrivatePCH.h" #include "RenderHandler.h" -UBluEye::UBluEye(const class FObjectInitializer& PCIP) - : Super(PCIP) +FBluEyeSettings::FBluEyeSettings() { - Texture = nullptr; + FrameRate = 60.f; Width = 800; Height = 600; bIsTransparent = false; - bEnableWebGL = false; + bEnableWebGL = true; + bAudioMuted = false; +} +UBluEye::UBluEye(const class FObjectInitializer& PCIP) + : Super(PCIP) +{ + Texture = nullptr; + bValidTexture = false; } void UBluEye::init() @@ -20,9 +26,8 @@ void UBluEye::init() /** * We don't want this running in editor unless it's PIE - * If we don't check this, CEF will spawn infinit processes with widget components + * If we don't check this, CEF will spawn infinite processes with widget components **/ - Texture = nullptr; if (GEngine) { @@ -33,7 +38,7 @@ void UBluEye::init() } } - if (Width <= 0 || Height <= 0) + if (Settings.Width <= 0 || Settings.Height <= 0) { UE_LOG(LogBlu, Log, TEXT("Can't initialize when Width or Height are <= 0")); return; @@ -44,14 +49,14 @@ void UBluEye::init() browserSettings.web_security = STATE_DISABLED; - info.width = Width; - info.height = Height; + info.width = Settings.Width; + info.height = Settings.Height; // Set transparant option info.SetAsWindowless(0); //bIsTransparent // Figure out if we want to turn on WebGL support - if (bEnableWebGL) + if (Settings.bEnableWebGL) { if (BluManager::CPURenderSettings) { @@ -60,7 +65,7 @@ void UBluEye::init() browserSettings.webgl = STATE_ENABLED; } - renderer = new RenderHandler(Width, Height, this); + renderer = new RenderHandler(Settings.Width, Settings.Height, this); g_handler = new BrowserClient(renderer); //browser = CefBrowserHost::CreateBrowserSync(info, g_handler.get(), "about:blank", browserSettings, NULL); browser = CefBrowserHost::CreateBrowserSync( @@ -71,6 +76,9 @@ void UBluEye::init() NULL, NULL); + browser->GetHost()->SetWindowlessFrameRate(Settings.FrameRate); + browser->GetHost()->SetAudioMuted(Settings.bAudioMuted); + // Setup JS event emitter g_handler->SetEventEmitter(&ScriptEventEmitter); @@ -90,10 +98,12 @@ void UBluEye::ResetTexture() // Here we init the texture to its initial state DestroyTexture(); + bValidTexture = false; Texture = nullptr; + // init the new Texture2D - Texture = UTexture2D::CreateTransient(Width, Height, PF_B8G8R8A8); + Texture = UTexture2D::CreateTransient(Settings.Width, Settings.Height, PF_B8G8R8A8); Texture->AddToRoot(); Texture->UpdateResource(); @@ -146,10 +156,10 @@ void UBluEye::TextureUpdate(const void *buffer, FUpdateTextureRegion2D *updateRe RegionData->Texture2DResource = (FTexture2DResource*)Texture->Resource; RegionData->NumRegions = regionCount; RegionData->SrcBpp = 4; - RegionData->SrcPitch = Width * 4; + RegionData->SrcPitch = Settings.Width * 4; //We need to copy this memory or it might get uninitialized - RegionData->SrcData.SetNumUninitialized(RegionData->SrcPitch * Height); + RegionData->SrcData.SetNumUninitialized(RegionData->SrcPitch * Settings.Height); FPlatformMemory::Memcpy(RegionData->SrcData.GetData(), buffer, RegionData->SrcData.Num()); RegionData->Regions = updateRegions; @@ -317,8 +327,8 @@ UTexture2D* UBluEye::ResizeBrowser(const int32 NewWidth, const int32 NewHeight) bEnabled = false; // Set our new Width and Height - Width = NewWidth; - Height = NewHeight; + Settings.Width = NewWidth; + Settings.Height = NewHeight; // Update our render handler renderer->Width = NewWidth; @@ -326,7 +336,7 @@ UTexture2D* UBluEye::ResizeBrowser(const int32 NewWidth, const int32 NewHeight) bValidTexture = false; - Texture = UTexture2D::CreateTransient(Width, Height, PF_B8G8R8A8); + Texture = UTexture2D::CreateTransient(Settings.Width, Settings.Height, PF_B8G8R8A8); Texture->AddToRoot(); Texture->UpdateResource(); @@ -351,8 +361,8 @@ UTexture2D* UBluEye::CropWindow(const int32 Y, const int32 X, const int32 NewWid // Set our new Width and Height - Width = NewWidth; - Height = NewHeight; + Settings.Width = NewWidth; + Settings.Height = NewHeight; // Update our render handler renderer->Width = NewWidth; @@ -360,7 +370,7 @@ UTexture2D* UBluEye::CropWindow(const int32 Y, const int32 X, const int32 NewWid bValidTexture = false; - Texture = UTexture2D::CreateTransient(Width, Height, PF_B8G8R8A8); + Texture = UTexture2D::CreateTransient(Settings.Width, Settings.Height, PF_B8G8R8A8); Texture->AddToRoot(); Texture->UpdateResource(); @@ -383,13 +393,13 @@ UBluEye* UBluEye::SetProperties(const int32 SetWidth, const FName& SetTextureParameterName, UMaterialInterface* SetBaseMaterial) { - Width = SetWidth; - Height = SetHeight; + Settings.Width = SetWidth; + Settings.Height = SetHeight; bEnabled = SetEnabled; - bIsTransparent = SetIsTransparent; - bEnableWebGL = SetWebGL; + Settings.bIsTransparent = SetIsTransparent; + Settings.bEnableWebGL = SetWebGL; BaseMaterial = SetBaseMaterial; DefaultURL = SetDefaultURL; @@ -594,7 +604,7 @@ UTexture2D* UBluEye::GetTexture() const { if (!Texture) { - return UTexture2D::CreateTransient(Width, Height, PF_B8G8R8A8); + return UTexture2D::CreateTransient(Settings.Width, Settings.Height, PF_B8G8R8A8); } return Texture; @@ -646,8 +656,13 @@ void UBluEye::BeginDestroy() if (browser) { // Close up the browser + browser->GetHost()->SetAudioMuted(true); + browser->GetMainFrame()->LoadURL("about:blank"); + //browser->GetMainFrame()->Delete(); browser->GetHost()->CloseDevTools(); browser->GetHost()->CloseBrowser(true); + browser = nullptr; + UE_LOG(LogBlu, Warning, TEXT("Browser Closing")); } diff --git a/Source/Blu/Private/BluManager.cpp b/Source/Blu/Private/BluManager.cpp index cf022b9..88702ef 100644 --- a/Source/Blu/Private/BluManager.cpp +++ b/Source/Blu/Private/BluManager.cpp @@ -52,4 +52,4 @@ void BluManager::doBluMessageLoop() CefSettings BluManager::settings; CefMainArgs BluManager::main_args; -bool BluManager::CPURenderSettings = true; \ No newline at end of file +bool BluManager::CPURenderSettings = false; \ No newline at end of file diff --git a/Source/Blu/Private/RenderHandler.cpp b/Source/Blu/Private/RenderHandler.cpp index d897784..1f14b7b 100644 --- a/Source/Blu/Private/RenderHandler.cpp +++ b/Source/Blu/Private/RenderHandler.cpp @@ -53,6 +53,11 @@ void BrowserClient::OnBeforeClose(CefRefPtr browser) } } +CefRefPtr BrowserClient::GetCEFBrowser() +{ + return m_Browser; +} + bool BrowserClient::OnProcessMessageReceived(CefRefPtr browser, CefRefPtr frame, CefProcessId source_process, CefRefPtr message) { FString data; diff --git a/Source/Blu/Public/BluEye.h b/Source/Blu/Public/BluEye.h index 3d0b548..4d39295 100644 --- a/Source/Blu/Public/BluEye.h +++ b/Source/Blu/Public/BluEye.h @@ -47,6 +47,36 @@ enum EBluSpecialKeys unknownkey = 0, }; + +USTRUCT(BlueprintType) +struct FBluEyeSettings +{ + GENERATED_USTRUCT_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BluSettings") + float FrameRate; + + /** Should this be rendered in game to be transparent? */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") + bool bIsTransparent; + + /** Width of the view resolution */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") + int32 Width; + + /** Height of the view resolution */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") + int32 Height; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") + bool bEnableWebGL; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") + bool bAudioMuted; + + FBluEyeSettings(); +}; + DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDownloadCompleteSignature, FString, url); DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FDownloadUpdatedSignature, FString, url, float, percentage); //DECLARE_DYNAMIC_MULTICAST_DELEGATE(FDownloadComplete); @@ -81,20 +111,8 @@ class BLU_API UBluEye : public UObject UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") bool bEnabled; - /** Should this be rendered in game to be transparent? */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - bool bIsTransparent; - - /** Width of the view resolution */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - int32 Width; - - /** Height of the view resolution */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - int32 Height; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - bool bEnableWebGL; + FBluEyeSettings Settings; /** Material that will be instanced to load UI texture into it */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") diff --git a/Source/Blu/Public/BluManager.h b/Source/Blu/Public/BluManager.h index 86b5e24..c88e568 100644 --- a/Source/Blu/Public/BluManager.h +++ b/Source/Blu/Public/BluManager.h @@ -24,12 +24,12 @@ class BLU_API BluManager : public CefApp public: - BluManager(); + BluManager(); - static void doBluMessageLoop(); - static CefSettings settings; - static CefMainArgs main_args; - static bool CPURenderSettings; + static void doBluMessageLoop(); + static CefSettings settings; + static CefMainArgs main_args; + static bool CPURenderSettings; virtual void OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr< CefCommandLine > command_line) override; diff --git a/Source/Blu/Public/RenderHandler.h b/Source/Blu/Public/RenderHandler.h index c0f199d..b5b0e60 100644 --- a/Source/Blu/Public/RenderHandler.h +++ b/Source/Blu/Public/RenderHandler.h @@ -112,6 +112,8 @@ class BrowserClient : public CefClient, public CefLifeSpanHandler, public CefDow void OnAfterCreated(CefRefPtr browser) override; void OnBeforeClose(CefRefPtr browser) override; + CefRefPtr GetCEFBrowser(); + // NOTE: Must be at bottom public: IMPLEMENT_REFCOUNTING(BrowserClient); From b78015743ff964355b3750edf863dcc7e900b5bd Mon Sep 17 00:00:00 2001 From: getnamo Date: Fri, 13 Mar 2020 16:13:43 -0700 Subject: [PATCH 20/51] bump for changes --- BLUI.uplugin | 2 +- Source/Blu/Private/BluEye.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index 8cbadbb..067784f 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "3.7.0", + "VersionName": "3.7.1", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea & Contributors", diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index af14dbc..1b2ee0d 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -142,7 +142,7 @@ void UBluEye::TextureUpdate(const void *buffer, FUpdateTextureRegion2D *updateRe } //todo: remove debug address hack - if (bValidTexture) + if (bValidTexture && Texture->IsValidLowLevelFast()) { if (buffer == nullptr) From 1b594776ef192ffdd107648971942cb18ceff8f6 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Sat, 4 Apr 2020 07:11:16 -0300 Subject: [PATCH 21/51] adapted some includes to fit IWYU's pattern --- Source/Blu/Private/BluPrivatePCH.h | 4 ++-- Source/Blu/Public/BluManager.h | 20 +++++++++---------- Source/Blu/Public/IBlu.h | 2 +- Source/Blu/Public/RenderHandler.h | 10 +++++----- .../BluLoader/Private/BluLoaderPrivatePCH.h | 4 ++-- Source/BluLoader/Public/IBluLoader.h | 2 +- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Source/Blu/Private/BluPrivatePCH.h b/Source/Blu/Private/BluPrivatePCH.h index e0d387c..8b38657 100644 --- a/Source/Blu/Private/BluPrivatePCH.h +++ b/Source/Blu/Private/BluPrivatePCH.h @@ -1,6 +1,6 @@ #pragma once #include "CoreUObject.h" -#include "Engine.h" +#include "Engine/Engine.h" #include "Engine/Console.h" #include "Runtime/UMG/Public/UMG.h" #include "Runtime/UMG/Public/UMGStyle.h" @@ -10,7 +10,7 @@ // You should place include statements to your module's private header files here. You only need to // add includes for headers that are used in most of your module's source files though. -#include "ModuleManager.h" +#include "Modules/ModuleManager.h" #include "IBlu.h" DECLARE_LOG_CATEGORY_EXTERN(LogBlu, Log, All); diff --git a/Source/Blu/Public/BluManager.h b/Source/Blu/Public/BluManager.h index c88e568..f2a82ba 100644 --- a/Source/Blu/Public/BluManager.h +++ b/Source/Blu/Public/BluManager.h @@ -1,9 +1,9 @@ #pragma once #if PLATFORM_WINDOWS -#include "WindowsHWrapper.h" -#include "AllowWindowsPlatformTypes.h" -#include "AllowWindowsPlatformAtomics.h" +#include "Windows/WindowsHWrapper.h" +#include "Windows/AllowWindowsPlatformTypes.h" +#include "Windows/AllowWindowsPlatformAtomics.h" #endif //#pragma push_macro("OVERRIDE") //#undef OVERRIDE // cef headers provide their own OVERRIDE macro @@ -14,8 +14,8 @@ THIRD_PARTY_INCLUDES_START THIRD_PARTY_INCLUDES_END //#pragma pop_macro("OVERRIDE") #if PLATFORM_WINDOWS -#include "HideWindowsPlatformAtomics.h" -#include "HideWindowsPlatformTypes.h" +#include "Windows/HideWindowsPlatformAtomics.h" +#include "Windows/HideWindowsPlatformTypes.h" #endif @@ -24,12 +24,12 @@ class BLU_API BluManager : public CefApp public: - BluManager(); + BluManager(); - static void doBluMessageLoop(); - static CefSettings settings; - static CefMainArgs main_args; - static bool CPURenderSettings; + static void doBluMessageLoop(); + static CefSettings settings; + static CefMainArgs main_args; + static bool CPURenderSettings; virtual void OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr< CefCommandLine > command_line) override; diff --git a/Source/Blu/Public/IBlu.h b/Source/Blu/Public/IBlu.h index a22403e..ecdaa4d 100644 --- a/Source/Blu/Public/IBlu.h +++ b/Source/Blu/Public/IBlu.h @@ -2,7 +2,7 @@ * (c) Aaron M. Shea 2014 */ #pragma once -#include "ModuleManager.h" +#include "Modules/ModuleManager.h" class IBlu : public IModuleInterface { diff --git a/Source/Blu/Public/RenderHandler.h b/Source/Blu/Public/RenderHandler.h index b5b0e60..3f71cb9 100644 --- a/Source/Blu/Public/RenderHandler.h +++ b/Source/Blu/Public/RenderHandler.h @@ -3,9 +3,9 @@ #include "BluEye.h" #if PLATFORM_WINDOWS -#include "WindowsHWrapper.h" -#include "AllowWindowsPlatformTypes.h" -#include "AllowWindowsPlatformAtomics.h" +#include "Windows/WindowsHWrapper.h" +#include "Windows/AllowWindowsPlatformTypes.h" +#include "Windows/AllowWindowsPlatformAtomics.h" #endif //#pragma push_macro("OVERRIDE") //#undef OVERRIDE // cef headers provide their own OVERRIDE macro @@ -15,8 +15,8 @@ THIRD_PARTY_INCLUDES_START THIRD_PARTY_INCLUDES_END //#pragma pop_macro("OVERRIDE") #if PLATFORM_WINDOWS -#include "HideWindowsPlatformAtomics.h" -#include "HideWindowsPlatformTypes.h" +#include "Windows/HideWindowsPlatformAtomics.h" +#include "Windows/HideWindowsPlatformTypes.h" #endif class RenderHandler : public CefRenderHandler diff --git a/Source/BluLoader/Private/BluLoaderPrivatePCH.h b/Source/BluLoader/Private/BluLoaderPrivatePCH.h index d51e888..9aaa50d 100644 --- a/Source/BluLoader/Private/BluLoaderPrivatePCH.h +++ b/Source/BluLoader/Private/BluLoaderPrivatePCH.h @@ -1,9 +1,9 @@ #pragma once #include "CoreUObject.h" -#include "Engine.h" +#include "Engine/Engine.h" #include "Engine/Console.h" -#include "ModuleManager.h" +#include "Modules/ModuleManager.h" #include "IBluLoader.h" DECLARE_LOG_CATEGORY_EXTERN(LogBluLoader, Log, All); diff --git a/Source/BluLoader/Public/IBluLoader.h b/Source/BluLoader/Public/IBluLoader.h index e8137ca..79ec63a 100644 --- a/Source/BluLoader/Public/IBluLoader.h +++ b/Source/BluLoader/Public/IBluLoader.h @@ -2,7 +2,7 @@ * (c) Aaron M. Shea 2014 */ #pragma once -#include "ModuleManager.h" +#include "Modules/ModuleManager.h" class IBluLoader : public IModuleInterface { From 213186abaae6f50fb6fbf50a00b3ce3b4f1a9828 Mon Sep 17 00:00:00 2001 From: GTNardy Date: Sat, 4 Apr 2020 07:19:22 -0300 Subject: [PATCH 22/51] Removed tabs my editor added that for some reason --- Source/Blu/Public/BluManager.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/Blu/Public/BluManager.h b/Source/Blu/Public/BluManager.h index f2a82ba..95ab30b 100644 --- a/Source/Blu/Public/BluManager.h +++ b/Source/Blu/Public/BluManager.h @@ -24,12 +24,12 @@ class BLU_API BluManager : public CefApp public: - BluManager(); + BluManager(); - static void doBluMessageLoop(); - static CefSettings settings; - static CefMainArgs main_args; - static bool CPURenderSettings; + static void doBluMessageLoop(); + static CefSettings settings; + static CefMainArgs main_args; + static bool CPURenderSettings; virtual void OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr< CefCommandLine > command_line) override; From af12d4900d351206c954497f35f5ef0753fa1889 Mon Sep 17 00:00:00 2001 From: getnamo Date: Fri, 17 Apr 2020 23:07:25 -0700 Subject: [PATCH 23/51] potential fix for #39 --- Source/Blu/Private/BluManager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Blu/Private/BluManager.cpp b/Source/Blu/Private/BluManager.cpp index 88702ef..a93e7d7 100644 --- a/Source/Blu/Private/BluManager.cpp +++ b/Source/Blu/Private/BluManager.cpp @@ -39,6 +39,7 @@ void BluManager::OnBeforeCommandLineProcessing(const CefString& process_type, command_line->AppendSwitch("disable-web-security"); } + command_line->AppendSwitchWithValue("enable-blink-features", "HTMLImports"); // Append more command line options here if you want // Visit Peter Beverloo's site: http://peter.sh/experiments/chromium-command-line-switches/ for more info on the switches From aa1d8dade228d6d89dd71709e9f0c3a54b3ce984 Mon Sep 17 00:00:00 2001 From: getnamo Date: Sat, 18 Apr 2020 02:38:28 -0700 Subject: [PATCH 24/51] update usability - key pass through (fkey->fcharacterevent) - add more events to listen to - enable autoplaying videos (a la desktop) - youtube working - fullscreen generally requires sending fullscreen input key (e.g. f in youtube) - some debug examples in widget actor --- BLUI.uplugin | 2 +- Content/BluiWidget.uasset | Bin 227043 -> 227240 bytes Content/BluiWorldWidgetActorExample.uasset | Bin 93175 -> 186021 bytes Source/Blu/Private/Blu.cpp | 1 + .../Private/BluBluprintFunctionLibrary.cpp | 10 +++++ Source/Blu/Private/BluEye.cpp | 36 ++++++++++++++++-- Source/Blu/Private/BluManager.cpp | 9 ++++- Source/Blu/Private/RenderHandler.cpp | 29 ++++++++++++++ .../Blu/Public/BluBlueprintFunctionLibrary.h | 5 +++ Source/Blu/Public/BluEye.h | 20 +++++++--- Source/Blu/Public/BluManager.h | 1 + Source/Blu/Public/RenderHandler.h | 23 ++++++++++- 12 files changed, 123 insertions(+), 13 deletions(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index 067784f..9d79a1d 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "3.7.1", + "VersionName": "3.8.0", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea & Contributors", diff --git a/Content/BluiWidget.uasset b/Content/BluiWidget.uasset index d617083b4582a66df774eca1a168ce2cfdd4fe95..a5470bf8b25510177706d1ece3d8ee1c113c57b8 100644 GIT binary patch literal 227240 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 z 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 MZ<*_!VJ+tUKP^!cJI*>4!rW$ty{Ow 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 z zK-0rMj*|Ra^P0AnV|{D&yY+kc?6nfN(H;@!ur1J*#7!qf`#lUN^^n1zYzZ}V>Bql21UT|^+-TA(cIUIvmaUBDG32sz zS!GVkubahBmdld&y{#*2)-cf?kB)rk8RMDZ*a=HIKnMKYHD7oge*vgv9d$s66Wp_prG?_RD+F$ zc)FMNGQixP3MxhOXY)Y@mEz?VmVoD+Wfyte51ymOTD;^U7w%eH|H4+R&5NcVMj5X^ z5CeftL0cZBeUwX|_jc3ev3T|Frsj%<;N@9pI9{HsXuKF_^NyEiEgCONBGVZ(V7_B+ zLLSdjL&vM1H`92T0*sS;#`qe`z0gMP+B_B;TCtblHah4?w^fzZ7my>2j_PPzX!RiM zS5^9XvBVz4|MIHJ?sto|KV-EqdLKJ6HPD7HTJ=UXt*i(4xnpmr(pXSrL zL9cAIEMV7#Eo5R@NdA{_l3n`&x7MK3ip z1JE;tT()h|bH&y@@m!&Oa(e6Ujm$^Wf=BFZ-y6Gr0zKG2X&&h8={Q5@`C#7!ed1Pb zd=pJ4v_uPVT=Mvm#TCDL1Fx};u=1#WcF@YB`i)wNc@!`iYU*uk^YK#iL1rzI`ZmtZ_jrK1<4aUHV#f+EYf3Q6F?hJ#Hgs->ywEPZsJmqPyPLb=|eR zuDh+TJ;BxNooZRI*Ws`~(vM9n3(c|i)K4hb>+#0uMDP+zx0@D;){DulJ)5c*?KD@i zC!uf#gFV#5v!!?P66>w)C!wIXlF?DpD@u)q+I|wsjQHj93kU(_JSH4VQD_d&^y}WmX;E7!xWbDB;QS$ zTof*P4&!^CI@pb|A<5d0*&_avn%KTvwQEW?|J!&mtMJ%TrPJUmW9^Jp9L}vZbo~v9 zg)YXP8)E0OU&)^Cgp|XVflq<;rf%=pDNBL-S_V;HoUFv2KO!?&lX7eK)s2(^XdPh2*=$G?w@*%n zuxlt|%76oDZio!=$x6m4b)h{iWtmm#;ynYs4seqnMDvr8A2~Lz$-3I^X^Y0i10-Z; z&wyhQ(qDy^kuBWTIkQt}r{wIg#MsRam&s>Jxqfm!_V$=CEY05^6P6qUsTgg{67Qat zIf$xDO%#0&23nA<73xTR!x9aP$kGza!)Tc-A4hwQz{8$@!*HTD`<(8wbF^U?yHc9u z4f__DS%KQRfZz0oLq-eA9B6c+znL}lW?j(d566@aHg@q)vHFP1v@~%S$-idn)~zR~ z3VW#U9o6@)+!)^nP|8plT+m8YGy-%n)2R^ovz!WBQ(+HPxJ7|mroMMj`334*WbZ(K z&r}tz?eh7aue`Q3KZtDP{Ic|AEAUI^dU>tL7yI`gb(`IX~z?dkE!2hiyVTbzVT%p zTT8k>T)|-CGgIuV@-0o}B?DlhPOx+WH9WCYMz0qI>cjPAX8-a)t--T2Lc)vu^>||E zjpsSOX6(%K2)Q%e7%HZK#KxC%l()97#+>e}s4~MD<>5fE-=GLBct~i3(X=vl6muEL zf02k8xlxr?pf-IX`H>5mFE|5SybmSxXCb8^rTLWVD1|63pfrmFd=;UcWT5t(9G>ki zGh5G~qB%3?%xr@T57=mC2Q(4ws-K}=4Y->Aq)|@#^T?;qz%FyTcJ+V-!A9$-*n>Yz zp?#jF8__-j-^;uvy1K`lBkbA(*j)gIKceDHFY~JyUV?UaqaFT;iae|iAcCMo^}{Fw zZ3J<;%&C5eGWHN=L)y~D9Wy|P7eyr2}6vjax2;pv&Xzp?${Q zp&DR2SB^p@v_6m$#!cWWFjA4psNSYp5|vaKC~r6_>aT&phAACFsW&B{6O)933b3&# zX2g|lh|vI_IO?oMrl3wkx(v>@5+9&Jq4t!l6oTA|Oz!A@bkFDa%u2Ciz>I50xw%%c;wpQbCpKC#j7ZF97Xt9N47^AVK8n4d^yVE_$VA@_3jT@rleB z-C;QViR6R$ksB&il>{q9^5Kf@qe|lZpiKm!zk<6_eMg)mh)zNe>IemP57m-;&S-?k z2PTD#uThn_G87>`k;*XQn1^&qX_Q*WKwqrDvw;^@hAVMqj;aJvxBXNosO+mnqk^A|8%#QyX>vWkh0LG{$%j28MoQ|piPuWVEl&HE~5S6KJZdc#zFmQK;j|GPz zO}YxkVX9)0!p74sbgob<6MdmtGhAF=ZPt24ZnjzJt*;43U3XW_XRGfB{dQ37caSQG zBQTHRKvf}2b%-IHuI`O;b9e z>?}5zOJbeL26IWiq6T+Sk4RlP7EpOCmoUwRcQ`dz^A~W3?Bze3JI1LwYA|=iE*Kij z9mCz2pds8r22g&WyNjy>^)(e~8TH{nTCwR3mRG0c`xkg?d=+W`48~#Eh-eT@Vys$O zq$uL3Rw`A6IJGxb@kEuXz&;L&qNU>nd|>_x0^W+WfIqD`>;3_{ z?f*54a`3FdEE*ea`+HebtaHGlh~(t>y=66KTDDnMUzIk|T$Gj@2rl#nE4K40C`6xa zTb&lmP8#f)?yv4y`3tuSOFVqo@?IftjcWD%mHK8NSy*q;Ct`jah-ReAIqE)U-`WJ%1N}KQ;cYeaL*UxS2>)30aMb};<4ld+AFX*kSZg?+iUg)&p%F>Y=9D7NTi$j^V zQ`7|TB0DkxHPnlBiqLU|Uu9|kxe=}94n}9XhSvpw!}MV7v7Wx?%q$i8 zT|FR2TS}<4&jSRe%N!9T5>5JxbvTM-9zcxD6Gb!I^hQsRGjmR4zg$xQK2ne;z^eTb(5&V zU5n5>9#LbeY$Q5FKst@-IjS^LjW&*Nf1$#5st|L7&kFga!%WcCQz=cOR6;4A5?FdL zCAi{4DGj4^IHj4CCQ&M)G=LITSpz9eq%@t<3`*lDL0BkaD5AB8(l=r)Qz%WQ1Y6OY zQU)c&nEF%dOQ|0vC};HNK1%o`EmHYkzTM;Np$`r4f`6SH%a{(Vqqn3*mf&^u;WSfjwT6rxRokS+b6oWiB@-^o$vLN8)gfO_ z@AkZP2tevM4D8Q34&#yEwr*|jG{${tHg<9<+(bBI3BWTZcCkvTDezDcFhl-c;k1Q; z;Jma&CdGXlI_~2iT6yppo--$&m$hWfZF4v57d!3^7(9JgIlmZ#K-e*^#MHh_Rq89- z#{YdxWpRUN)jj9OwfH2a0ptrG&X;$Vznj%H`}gbs8@H$e9w>|eKJl6{P2}5^z>UQx zzRf{B&+Td3bqd!$)+=xdjaNHk9VVp}99fh$Y zZN4>FKB`{H|McW2%d{_2@m-r2khcL81H&cm0u_@NegPo8>i{#6g&@^+VJTkmd{ zcY_)qzL*e(ah=MwLbg=2P&+Eu{ziah;*X;`lfL`??a<({8FyT=KCSoOUbr`cdAJVl zV?XG7my5dZR9t^;{;fy+5&Gq+myff{JIn$kG9FL!jR!v2@U7jCJ8Aux+^ctfpzm|V zCmfHyqZ^j4AS>#FzMon2%~wC4dwRho5B@Udj!_$SvdbHzfC!OnLyaa5o)oAsg{92& zhRnjOY_rC!@`lY~v!=4h=bz-QHN^?65^s>s_DH0$dxPNYsO~sUbW|;Q6E&akPd9pN zvbT&rcJd`Voa4XmlAm@$wPeQs!-B5C*FS1kc+<@9?!MS}$6*+MY~Er3qfhMkyHXyF zHaF-q{S`Hfm!_a|A(Nk4{d8i{$wk>Wy_0!fe&M69T=~{o z?gDzm`pHgi?DGC<{RAG2)idaKq8UXw`o6fs+qW#~IH~aBH&={Yz0aBXc6oo5enOw{ zNv7Wem%sApkl*hech~F1AMEw-y|$v?v3c9N9>V&#F?tANo&D5?!}HASN!LBI?B)9o zUHY3{-e01Jex%OWeO&cW2DRE^)}OO)%k>2hWzTEzQ|6?H04UMy_f(i-9Wsw`hbm!D zI9J_AbSB^PH`|gp59+N%9#j|AoYjM)hWa3phN>ed4fdcGpLgCf2TwRM_v(lD>ae2A zs;{{V=uu16Ex7Zmrhh(e&ZkQ<@9cQp+OcQ$_1Wb)Nd}CyvcZ;10X)_mgG>sm{Id2Z zs=#uCgK@ZxYUwoL%t08y%+)WwyGP|8lb8Q7b%zBD($?7J6>@_p1hM_b$uW_*ewJoyG(psS~}|6Nz5B>LZWOQS_EkMMvjg?jKvXc2Yx+T{@nl@{RM<#aZh6 zV)e~4cs^HL!3C;stbIDFe8-J}#cTIj_fe0HlP>MCaqAyH_WXbcg?2ls#s|`Ow>9H` zys&lGyxU&#_joU$yd;g=pHSG%$3C@bP1(4U z&s{m>!X=x|NAF|v8m3?o7?*0dtvrdCR=g+_Hfz%gd}Tpza8cUivLns%aM~2J(hQpZ za+986Q5?sN1JS_%A|Eb@WY}EX(-?J(;U2QX?HB%X@5h;!?0d;M>$m)|!Y!)oh3Iy?yjIFU~>qvOg^EuAKqJByLL6#DnqmyiE!^6H!p zg&hwZ`mtT!(+r)y1p+u=`8at)4|i3yRbOpOs?9XoQ>HAOWU2{NrO{I~R551uEWqSt zqVYix#+x-Y0r9|+ykY>ND?FA%Dfi8aFQ4o5)ajY$1%J7sN6A9rI62XPfndB(AJd^* z?^bsep3?ikL+gk2{oXDQ`w9FJh$qlp5gu;CU}*>4H2rNe1A!XT>u=k3dbJs@rU-K& znC1_N8sa&)G|B`~5O$_kxC@Dva?c6y9f{#sK#g{wM4S1hz5pnElHv!};28Hq6Al?w znDg_*)A#*whd+Fo58CC87NF%Hfgqc%BeW<8R5gYW#4prDqPBYY`k6h|*hNL2dtPn#Nos`4W^M^CV(`Ri-TNMslKYHHHxYzdu+rwt-f zW8Mm((MVP!aKpY@Gp#Zhs1+hi(^ToJA~N5qI_fwZjs?^Zp3q=58__okYVxw2Iwv(@ zgnj=Qu5@%#;e;MPb4cWT&=odiQ^6K-Q`bNB(g0KEWY&c{ix~_|jsR`an9Pagt^(M<3r>QMLQo z^?wweQT+8&k1lz8ja^=xuL}TwqnC?5zL2-IMW>nt1?OKBy6XA0@1J9r*Dx;^gNpN8 zQy0}QBIu2YreR=N%hp_R_0+YKA2_x2l(F+`3+?izqx^C~^o(*#kdFA(2wHQNeUcYU89!|aXm0ykvzMFUQk6TW=Z0K!QVGOZ(|J}yt zVOE#nv3dQs@p;(gk9)ga_r~h%`(C)_j!m&yvM+!3^Wpv0ZR&}B zqnzvDKK6sY|M|@q554oke!1(1RrlL`^RwOU^0qa{9({b~g^TZ;8T$8xTTWhb>#SBC z&bG_jrX2g3)ak}J_88c&XN-UR%&U78+%T)=nKmoe=G)~VM#UekI%4BXS2ZNQ#NhZ_ zfMtfl@%IUB&i?iFbH6V*@zbKKsZ%g?#@6}hV6o~wOSiLv zp^A=y4QQVRE0|8dwYX)H@!yHp?lAU;{hqvh9CraUiDxKUAgX# zKChl>m)9`H2DR0`3_WO-MoGTAEiJd+FP;)>zy=MdiylWl)?q|4V=n$wjiOpQ@rjxt z@pwhXO%Hsxx%E90F8yk+&%QsrBppx+=(Ivj|bEu&7uG}4Tx*o35;D{+=h7_L6~Avh}oYu%}bNlHmlkj^p=Myq$!Tt z=~1?AOA*TjW-v@)&Z_zvicwSGE6v1tJUo_88x!T!RA!_ttoG5X0O);aY2{vjT7Afr zg>@7m4H=&1Qyg~63p7eZztpLRgmKRs)m$-CJF15|+Lv)u4@ESRti@T&)W$OZz4VbiI(3WCH9`#gt2cY(MufO`pNMp$KbBAv-6R_Ewx;jCNwnUAPno>FYcD84 zf3PhUs`HkcW!_-J-Ko06S9k_o`u^lI$DZ`Ux|{pHYNwzMx70{4c?tEJ1=+ixz!dq>2srpW5ui+sI`z(RkozG+Kv4W-v>^pL?v_xY!2p)^`2 zIeJ~=Xd;u>LLJ2H(4UbM6W_PGUBC2%t1IfWR)6u@=(q3b z8}(E?yg7UZQ5yQ~jFr1w`clS~=bU)gX!dmqti?&G`X z-gMeiYwq`5buCb$oa^8|_Jh6$H+P=hw!`A_C!O%=5$z|;$+gRiQ*Z$EH>x)D@uO!x z2+ZGQ*NG<={9k+50T9LU^|5yY_7**3?5MzjKx`aW=tZ%{dcYw>1ck$HG>RH~Z?U0b zuh>vgj4>KpEYWB_lh|7{8e@z875(1Z+qqljW{?X*w30Z%^DlXF8AZVz_d&M^scjKc3<;@ zJC<%v13A>IYmswFX~BDHjXxfm@>y-iu`jK}P<+l0K6i$hj7lz2!;a+Yg`JXJKPF8R&itdbyEDMJrD<0&e{0P5AA? z8%)BL=)gCQZHv1ppw8w$g4HF0{}4|4!|FZo0wNw30hIKQi;jl1H4|gVClt0F-ky5V zv+{{)PVz}%8@s;UweTF_8Og!+h`|m1zBt!$Y2?u{zKhRH%E@#-aGix2c`=5^n!oX( z3@HuXaK-2Ir}IKKUv+4b)n?i-7G~tL7^p7*&xKbpZjHA6ZI*dWEA~~;;`(b-pAT=x zwL6R_Y2ef-AP0BbZVY`=vz#L1M*Yv)Ug))yg<0m&NFdk0@nH>Tyjb(FhK%oe_Is;{ z;JT`1!7eT$wMd!S5}-vO|5g|CCd)Xx#9Fh~tf{o5{zj$Xw;^3uFJU z(-ZmR%AU`ccD(U53-b_U!WE29rx8)=c#ZCRl6-v2fjOgTCtud&zJLfWaD|c!F|IIv z8=r`LZL1RAM9zgrlCu-fB6%0*VDbrcD4zwXF;UY#z|tH-Uf<39J_ zHzM{`T)7F$2?pJ_@k`>3tP>l*8LDc6y%4&s9UrR#nMgHD8?i05jO@lJJRBh zpaXZMnTg+28onQfxVv@pzkj{MRKn?)xQnF_vkL2#)_T=<^@z{^GMY>*n*v zm1ovQ5zv@rh8j!$8y`K9f#|j`g8Z`HhHZGVDreoLXFe<}fp45htwB%!zDG}_aZ}bN z>C-o(0vG25$g|65EM{Q^kG`=1*J5su6tf*-zb9)25lLbEi%L3OwS%1S$BLBAG{okP(E=L$9E-Y^8iDq#uQfP|PtJ%tAP01^`b;&STctAnSmRU8_yFQ#zVg&95Xvao-RyN=AI z$NV{I;`~(KRW-|WuTkO*$1sikbKLa?z!8RmoV)xJ^h|Gb#W)x(d-{rxAO=v>K$~>r zM}u*&*pWXmqW`&j3k!#)ohkP^rF-R2LIP4moZ$#zCmT{%3*HI#)} z*4{auY3~We#6^%FAw2}6k9+u=a@{Fr#E9ue20oa-vGvwwQ+>0K{S_KjtEVRmOC&cy zdP4#E8brj22_7zFZ3o_e!uPSdU?>Hy#n>Q;k>r4!2Cm(Z&jI*F0O*G=?f8y2=2 ztBDVWmX^*V!kkGe?kF0OE0ylTkS$!B(g;kBG}6;-SeTJ3h&TU@P9V}qPq1NOHs}=c zKNXo6KWit@AY=3d8Wv_Wfd(rne{XqrKnD4pDd_2eGX=|)wk)5N0lDWJl3XI=Q+jhB zo-}I6z18X6U(?XJVJt5Ag-h!sY3eq#)wIM^PJZx1Dv(^0qo_+&k57@qAIVUxBY!Qr z@Zpk{E$6XP6Baj4dc&N2G)^=rwr!kO-j=_o zE<8oH{rorMx_x{j*LUWmae9IL)sHVoifr(eFZRw{F8z5}It#ORcKXSsZG|)cW&-cb>gNYwOE+F8Yiz<+;&)hR{eSOt@AEE zGkE41@qap^%Q(q@8Tyep<81h47q~&prZwW}i?;wGvxUw zcceWRbNN{@X7&8I#PeYj4*k$GuuI92$PbN?miNv#+6Krq1Qduc6ykOyM8r6T?wwWS zMq(1lH93-g--%BE&Z;ipMrWdabta#Pv=dS1_You%?O($o(qiW~uE?aXGW;flt?pUn z`s=klIuH_&A~Ifs6FFNC8hdz1yoYL1`kyJ?%ccaduzaWjDHg?qMe75J&;uq;xI0PB z^nipP7njdkx%Yto_;Q<%ITzM`iT7eWNrTsPK*pS3{+9K>9#a49MFSs(Z@BdV3u6zO z(L=9iZN`r;&~?qf(&6d5KMb4~_R&Q*uluu+c2oS&>N^2%z#t|7B6}nCU1mysvvrv| zSlo&Axv;Rwy!+0ftJ1H=J$;$s;#R zLIScxUYFuj?1_7;o&F@Fj6B0hi;eCLFwZUU-!#6Rr!NXP8r9L zZW^pM>~*DDqhr-njA-y0QVNV5@-8d=nxm3rAIPnff_ zE;40GMKB&2qnio~W4jUs*MwPS1nD)!5A8}=?+O2G%9YrObU+}wBdWe>K&+@IAb}h# zR^OPDkMA`(zE-(u*^bh?)@yyD(+1nHF z1G?6pyr%uqy>IZWq&wfwtJm~vfK1jX#v|>0icXn*z0(-kic=dM1D~C$&cf{F37`gI zz+tk%KF%o%M=keFt&o&7s_)zVh?~+-j7Qq%E4EdLxHBF)_X%D;`>j zTA&(Zk@`R)^Z?@|i@zz?onlN8VITwFjy%3twY6fv{87^~hm2~`o`ofl8z8-*0Q!l< z?5{Wlx#>AEWDAfvbeEazaa_LZh;n}PN1vR#fBGcSO=A`G*$e6J#-l{6SFDjYZu^G$ zm_;`s18Jmpcw=Fe1rpL1P>7Z{xAPpy8jpk_AtrXtWlM^I?@Ww##KRlK>H*`#Jr&y- z^ot;5(V-1|M!`V17B%QwA(6O2hyB|uHt5#}KkhN(uhhW(b#@$`mbJA3ApyxD<1%gG z{OE}#FJ^lk^xLyQ)-!v5^+XnC1Ahd?ghlIvkRClqo$R(mfr+9Z1Aj<6`7FP6&1YY* z!%wvjD=V=u^4b>5G>}$su68>pC+R|=tLsM0_1kglP*CS0=|NbwDFw!Or2TMp^_!Np zIx1%D8#({wvGaXcSanRy2Yc~zVfl`PKNoIR%o(sK*}ZP*`dGX<{LnjeAwM+6_6rNH zesIendKa|3_|aej2u9N{EArYX+NQs@W<&YbUvD^fqSuDt@mHU%@K+TrCu~EcO{1F8 zTV1oTs-(R@dcC?78jjpR5az5y;1?fb2xBxU`b2^gE?ZJeLx`X^4ac;3sSDCh@43jr z?CqqXy3jjSn#&Ju29O^bOT*0gzzGu13l*IDvrHscBo>P&A^~Zq%>WBqCb-{T{Lp3- zNid~vsNiXs2tvLj%?XTfod29e%}hNVt>UhOgEeM`p06Y{24pD12TJbOqWpuvwFkqN zHeBHOReIweS(ue(hA>8x!tIwD~31l4Bg#pBJk z9r~Sx*}EY{0bSDUi0s*yV|^!umi+1drA3pGUUT@#INzpF$5+u|*|8;GKKvoPF7iWT zI5mL;LqkgEA)yH+skozPM6Oi23w^eDX%5}=%XFlh#y;Si0p@8afF9y8dq@qlp#zsK zDTX!C0B!P_7h)i(LGm zUj1Il`|Emlz73o_c6YIA4_kD^q~`F`;eVe#o9y5uTTt~)`c?qyh8zm26gY0rgEqglYxI~DjwKZ4i;=_e`n;VFxAh+9 zKjxZyt5Jv6$FVRgoE{Vi;hQhb0vKP}KkSfh_V|eRZym8xz`Gn@?e^=k!*{UHOy_XoNb(!Uot0u;@2# zgbk~Ot0Utz(Gqn+v~J^T+^s$mmRN%&Dm2l}ODmGpePM~U7zym1oQzwGM5e^WM@wS( zErHbWaoVBHEq8*n%BhDuy<+4$hINa*Hs;t}B26T;2v4m7j(&%GFZ*J8)1a9jpWk-n z#1z^6MVCun17=ElJk>O%trMX|@T|tccTQqN&i9QImKo5$X zPy{DBoG6)en3+dwLkR~wTDixd%QbnYU(e0IlS-zCi_N-HRQ-C5YX zW*d;kQ|TVw!}gXATohU4nBwvEmMmgd-F69ky>0gBSvih;lS`;gR(Nqd~m&Kw>2aqDU7EJpc@?;jLz6cR8eq3;@1rSUI> zVk8DS07~7trTUE*dp`A@S+VvG|JLhUv9Q$w9t^#7I*$r-79=z=e3C1b?t;sfhz=)p zocpP0%EtOm@~pyNI+ofM8imR75--v|``aac56V6D*<9oKjSgO=hOw|{%#05Pe)2Wy zQw*}xCZ%Y&Z$7w_Tm=x$@VW7Scb-j~^@o%H+>0AV*UX;Hd1B^pM(;R{oY5FjczRwU zo4f*8sDv=;48+k}ccVniVYEZ%=0khc9T+m}S}n!k2bDiTMrmvcW(I*~v^Zcf>iA?0 zH|17$hUp4`Rm>KHDV9VVyo)t$+NII9@Xs4%E55A1{;}JOF>+zcBW)T#Kc&C1W?}Yj z)A$HSf0Le<^e`T2e;IqXQ1uU5hwhoyzFD}krhQ>hr%rEooUnf^)CIzH8NrjqiNmxO?i80rF{G$?Y@cG)k2U_8vBQ| z=|jjf1TqHFSa<1glRp|AZt;lGQ2cs6g0y2%Yk^-T+SWbjAL>=%k@if;oG;U-Kk|cc%qla7i)PAJA?K7N3_MBJI%`yX!cPxgDCi|4iqe&g)`X zSYuKUq%TN*kY)_#&|O}c>~?TaQCK0pWW}{RHf15*G$vF)1KmM9H>8Fw+J_ze25tv- z{Rt9`L01r29I&yj8#D^D^kV7gJx7((E$WM$>8k%fK> zTJPmEvso2wHsa>g!_@zaA2W2F+HZny2bb3&T~8oCG*%8XNMqKUJDPrz z4+L&p^wZP1m5=RZVV@$we9+VF(2Yk(4POEGfTZG%BqA3`U0C(?AJVvPar@2FH~NOI zxzTJ*>7lz?vM^_2H6Xp7G^1C$gakch=Fm+N>$63`96cE_Z2zuGTZ)D3c=oO2%i5vt zNH>isSadtkUgm0Raa-12Ibm1v4+nQI#kr4&JAU(Q^fd=*z@$~L z53~-d1LG<>Lp*NC$Q!S^#D(n{=kay(D}@(}@lV)cmBGT4`k~$$d2FTznFr!F1Yn6w$yF%gS?&>O6ct~a5p598O!rKeVQ+c|2xN=)^ z1t&(Sac34N1p=)Jt1Qt3l&6cc1pjk=0y*b$hM!y-jUd(#t)YSn!X&u@rl&QAg{cIY zyc@MFb5r^%lwKb0E=m_q-4tK|-fS`)Rr=AEl$y8UA<)0p2oSIY`_rJJ{VONF~srgUv7 zm3ly%_VV;yB#r)v)b1Wzc0|8>TSMloXsUF5 zaq%h(t0u_APyjuD{E8(U=xN|j4A}x8MmHHrK^miX7aHR;PbuG(mHFGiVt>wOVc!W# z;R7a>$<;fGGG^I-$QW$SN_oJmuT0dkJ#Y>%x zBc&2<1hqjR?kGBE1wY8akfS^32f>IuMMtKFA8C>Ha_%+7fkPo5I)!{Vv@M^3@njdG z#-a~nkAP~?hcO9A$>PVTj4uddKqFGF{TjzcPaVT zAT&`WPqXF|-h{&?d-onRD0t1_Yi&0E`gEtT5=ae&fgEWiXJPhM@(7^I8YM^CX(eZ2 z|5zoT01R?Ltf`acWAyR?Es&_0cj0rj*v!u!dpUNrYi-}`{hAps!?UUqC2PymM~{zv z#TVqTh(EE;>OX>EG>ff%+KuOxqz|Ni(>{v5`t8H3xdzWjgFx#_Z?Db5h`^8wB60^K zt8cq4W|~4dr~Td*t`t8gc=r6{v{Mpim-oRvom|;zWP&fPE_5*5d*z}G? z#t;1C`AA`fk=jJXqk97uX7Anr2Vkd$Kf3?d%*nwE_rGYf&HHdEfJAi%<1nxq5(~3I zgRot1z_LKdj95d#xc_cLG5H)Z+M0&qcH(-ObjKfpCzc&M;9U6w#aImm{dKyburPZ! zltw_8%lLB#rLT7T?7R?hwZ?-QoUt{fJE%Xb=MNV4PBj$PgBvnqidnj$SU*xU6^nvk z@gu~_DtD`$`|+(THA8iE#D%s2`4}lmgYre)CP#P~XYn&b?fp*bn+}2F4>FMP9Glyx_qV z#jYMt7CL_(AIidP&=80?u~;q$4GqD>j(T}w0x_l#x1GWhFW6#*x8cy}8Q@4%;qlFd z#R?z#c+JjfC1)sCY^WBWSt>G2SP7(tIzg%Qa{>z^5`yFcg{KGqZRaU;hH~hKT`XHn zA21FB(oR1ou&{rulK*#}6HGP;+&stP2C;nY)BTzSv4L6Lt5@pO{l!&QgFwZj-5(Za zFZYKuR5zgOZrhEaPimG^WZbC#S=$S}mIB1>Gyb#Jh{F-nwLzIjr2!S{eWpS@uZF^E zU@XiA4aIg=fn}NUV)ozFON4{xBic*&fU;QJC{)r1<+ODg3ibX-Nc-W~@(WZ}&|CXXy;X7;P<==fS zG^TyB^7QcVuBUXb41{NER1_vL=|=Q7=zSAjTBp zw8E2#K-^8N+(qXm#bS04@}aL1xZSq;`u(EF_5qCVyBm&0S+w=z9 zEQ~M+$p!jK50lz%H_uO?9C|l%EL*HPF%ARL-Y~eE$M+@IDwZsBmv0~Xq8bZ(ucM5$ zsELAz&Uf2ta*zh<#$ubgY;yOtsY!K17PdVTJ-6z{T>E(v9qkEqO7HB-!tAZ1t${9j zn_PhM)KR4UvHLgc+716jImhArYsVK&JF>8Utd3g$g0>fLM{`h)5Xi>?j=D>Sef-hr z;IXXX-FgR_1}%Hq;j4<;Lof1Sh|^%+rnn)tM#&pI_b7C#=OLfW-xNPreiYn?v@_&_ zD0we9r+2t!V!VX#UVTSbfV-Wvf^z8Hzp-p2LqG~bxdPJuSD6k^YiK-!H$=7%_;l&3 zxh(8IsN_Dp+$>h|X@zV2Sy;O%aO<3wb3Pc=Zf;v%;-0xAkM%+{Ow^L&`a_~hp7z#? zEtd`)Xe@uzqIbZTk0TtK)LA!&kbtxiCGQRAUKN+rJk>$wzw|p*&NOLE8Ve&5!g~!$ zj$?foggNUF{#P^t;?16g5DAIvpXu+i_d)NFv2!+D{{4rNyDhg$H>yE zaS=1JI@es9$-@4F3QxwxELM0M&O+E~%Bnwty0h4INe-Lav&47b zhEYMQHNQS-T2Gd1duF2KYRGuy-YKVBubdjXY3*x|S-n1P#lnb$Ah|%v^R*osW+e>z z&H}-_lo@G^UA}CV*B|9WR!lvdRxx$jEEe{URptVES=tT-3&CP@e){O>BVBqbd>6IP z*|yF3$ZXPI=l?@2M^n}vA08}L{82l+R%SGs6}sqVeD%M6NyxQi9DekS0bPYbYm_@8 zA2kYCnrR3WaUoQ?(kU;CTZfw7KJ(U?( zo%)wJKfMj!gYhH{Uef_-Z+pls;q=9o0b{Sk`yc9DG?azeYZW6xEB00s_f|XoNk$oY zhR@EX<%cxjR`oQ8AKH~eerSv+G|IzJKlX7q(M6WRW-_ido}$;!dg$93qn;L)yV zln0I3z?j?44a0_7rrnaR6R#Fh?msqS($I;`A0xM>n574;Q}G52f{NAw{O=q7XtXje zaXKxw<2H259ZfxlT4lI1lX84cf7sY>$H8Z@-c?n%g;tapZj?K{lO_wZx8e2$y6Bxp zvGz>q1I8omw83X#_BPzu0O<}A={1KRdPhp+hsKBoW1a@XU2u<0SU>b`omjRx{Lt+j z`Ju6bH`WCw8NTzc`r9@vr%Zlp0A81BMIk1z;rgAiw(8}tie z#VQFAIhU0W>=mhz z;0l50)kK3^BatU*z?Ja@?`J?#T!L1=Pb8*q;V_z~rxF}<(GkJX;ZOvt2tsZ6lgF!* zlQqdL{BQxnB={MenAEQYx3ysNSci^$O04KyIa$w<1>7KwYz4%KqVPu~-yF_C@)G4B zkfdaAtR_K%YbU}En|*OVO<2+pWDomrs&V7Q=0X|aie0{#Djd>VA(@77zj>uXLY>aE z=gu4)uxNQ=e0*Fou8v4p=?o%AR0r$CYUriFHS*2jbNeMX9sC=Bv61gR}k|nX~L6}2i zd}0)LZxo?Yq>R`&trp8rV`=fu;A?9n4gKS^4f))4rRi#3Zcun=8IiyMUp25ZD*E&~ zj&yrl_D@OH>WGQ-(Ep;&gIY5JD;Hy zRqq2eRe%*_zsmXhDu!zb!iJ15gbWQiirXC*YcXl4BnGXMvm_3l_TqGE2@P74pxakh zVD-=}cZ3vH)Tj&Gs;g16OXfI0D@pexMF30VVs$_H>2)x#(R^Oj;i%-emMAolDSahD znxPWVmBH$yXl_joOot1lDl{?blz6Q}C*Foj0R!QwB`HbqxF>O30z5v)MZ@EAtU94D zJS}rg2_KZzNl~$qB+bASO|lkq6NrYCN1l^Q9ime01M#Ltj zz^2Hu6lm%ZIw}KnOh`H<#TOJ6=n{;EKMbg0dHSh;QUHEhNc6akoxVyW{MyI2=#Rb zUJNL%2zf-VAqL@ND}IZPp{nk{rNdJ~2d4=M07UZHn>|zhv$Q4?j<4{LPkD8B-R(IK ziyh}nFnT?#8?-P}9Qfsrs5pi|5&08`#a!|~r!i`k>@wXcZZW%;=!If(GQUn_jh7-Dj@$X&e7V)n? spX&lX3Au3vxn(7P(uhw;S{SM17#=6-^~di|o@_(@gbW@W+hpng15PF1(*OVf literal 93175 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�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 diff --git a/Source/Blu/Private/Blu.cpp b/Source/Blu/Private/Blu.cpp index 17d8839..5e4d505 100644 --- a/Source/Blu/Private/Blu.cpp +++ b/Source/Blu/Private/Blu.cpp @@ -13,6 +13,7 @@ class FBlu : public IBlu BluManager::settings.windowless_rendering_enabled = true; BluManager::settings.no_sandbox = true; BluManager::settings.remote_debugging_port = 7777; + BluManager::settings.uncaught_exception_stack_size = 5; #if PLATFORM_LINUX ExecutablePath = "./blu_ue4_process"; diff --git a/Source/Blu/Private/BluBluprintFunctionLibrary.cpp b/Source/Blu/Private/BluBluprintFunctionLibrary.cpp index 7b9a433..94629d1 100644 --- a/Source/Blu/Private/BluBluprintFunctionLibrary.cpp +++ b/Source/Blu/Private/BluBluprintFunctionLibrary.cpp @@ -57,6 +57,16 @@ FString UBluBlueprintFunctionLibrary::JSONToString(UBluJsonObj *ObjectToParse) } +FCharacterEvent UBluBlueprintFunctionLibrary::ToKeyEvent(FKey Key) +{ + FModifierKeysState KeyState; + + FCharacterEvent CharEvent = FCharacterEvent(Key.GetFName().ToString().ToUpper().GetCharArray()[0], KeyState, 0, 0); + + return CharEvent; +} + + FString UBluBlueprintFunctionLibrary::GameRootDirectory() { diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index 1b2ee0d..584fa4b 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -12,6 +12,7 @@ FBluEyeSettings::FBluEyeSettings() bIsTransparent = false; bEnableWebGL = true; bAudioMuted = false; + bAutoPlayEnabled = true; } UBluEye::UBluEye(const class FObjectInitializer& PCIP) @@ -21,7 +22,7 @@ UBluEye::UBluEye(const class FObjectInitializer& PCIP) bValidTexture = false; } -void UBluEye::init() +void UBluEye::Init() { /** @@ -47,7 +48,8 @@ void UBluEye::init() browserSettings.universal_access_from_file_urls = STATE_ENABLED; browserSettings.file_access_from_file_urls = STATE_ENABLED; - browserSettings.web_security = STATE_DISABLED; + //browserSettings.web_security = STATE_DISABLED; + //browserSettings.fullscreen_enabled = true; info.width = Settings.Width; info.height = Settings.Height; @@ -65,6 +67,9 @@ void UBluEye::init() browserSettings.webgl = STATE_ENABLED; } + //NB: this setting will change it globally for all new instances + BluManager::AutoPlay = Settings.bAutoPlayEnabled; + renderer = new RenderHandler(Settings.Width, Settings.Height, this); g_handler = new BrowserClient(renderer); //browser = CefBrowserHost::CreateBrowserSync(info, g_handler.get(), "about:blank", browserSettings, NULL); @@ -76,11 +81,14 @@ void UBluEye::init() NULL, NULL); + //browser->GetHost()->PrintToPDF() + browser->GetHost()->SetWindowlessFrameRate(Settings.FrameRate); browser->GetHost()->SetAudioMuted(Settings.bAudioMuted); // Setup JS event emitter g_handler->SetEventEmitter(&ScriptEventEmitter); + g_handler->SetLogEmitter(&LogEventEmitter); UE_LOG(LogBlu, Log, TEXT("Component Initialized")); CefString str = *DefaultURL; @@ -508,7 +516,7 @@ void UBluEye::processKeyCode(FKeyEvent InKey) key_event.windows_key_code = InKey.GetKeyCode(); } -void UBluEye::CharKeyPress(FCharacterEvent CharEvent) +void UBluEye::CharKeyInput(FCharacterEvent CharEvent) { // Process keymods like usual @@ -526,6 +534,26 @@ void UBluEye::CharKeyPress(FCharacterEvent CharEvent) browser->GetHost()->SendKeyEvent(key_event); } +void UBluEye::CharKeyDownUp(FCharacterEvent CharEvent) +{ + // Process keymods like usual + processKeyMods(CharEvent); + + // Below char input needs some special treatment, se we can't use the normal key down/up methods + +#if PLATFORM_MAC + key_event.character = CharEvent.GetCharacter(); +#else + key_event.windows_key_code = CharEvent.GetCharacter(); + key_event.native_key_code = CharEvent.GetCharacter(); +#endif + key_event.type = KEYEVENT_KEYDOWN; + browser->GetHost()->SendKeyEvent(key_event); + + key_event.type = KEYEVENT_KEYUP; + browser->GetHost()->SendKeyEvent(key_event); +} + void UBluEye::RawCharKeyPress(const FString charToPress, bool isRepeat, bool LeftShiftDown, bool RightShiftDown, @@ -543,7 +571,7 @@ void UBluEye::RawCharKeyPress(const FString charToPress, bool isRepeat, FCharacterEvent* CharEvent = new FCharacterEvent(charToPress.GetCharArray()[0], *KeyState, 0, isRepeat); - CharKeyPress(*CharEvent); + CharKeyInput(*CharEvent); } diff --git a/Source/Blu/Private/BluManager.cpp b/Source/Blu/Private/BluManager.cpp index a93e7d7..fcd2663 100644 --- a/Source/Blu/Private/BluManager.cpp +++ b/Source/Blu/Private/BluManager.cpp @@ -3,7 +3,6 @@ BluManager::BluManager() { - } void BluManager::OnBeforeCommandLineProcessing(const CefString& process_type, @@ -41,6 +40,11 @@ void BluManager::OnBeforeCommandLineProcessing(const CefString& process_type, command_line->AppendSwitchWithValue("enable-blink-features", "HTMLImports"); + if (AutoPlay) + { + command_line->AppendSwitchWithValue("autoplay-policy", "no-user-gesture-required"); + } + // Append more command line options here if you want // Visit Peter Beverloo's site: http://peter.sh/experiments/chromium-command-line-switches/ for more info on the switches @@ -53,4 +57,5 @@ void BluManager::doBluMessageLoop() CefSettings BluManager::settings; CefMainArgs BluManager::main_args; -bool BluManager::CPURenderSettings = false; \ No newline at end of file +bool BluManager::CPURenderSettings = false; +bool BluManager::AutoPlay = true; \ No newline at end of file diff --git a/Source/Blu/Private/RenderHandler.cpp b/Source/Blu/Private/RenderHandler.cpp index 1f14b7b..7bdfe17 100644 --- a/Source/Blu/Private/RenderHandler.cpp +++ b/Source/Blu/Private/RenderHandler.cpp @@ -53,6 +53,24 @@ void BrowserClient::OnBeforeClose(CefRefPtr browser) } } +bool BrowserClient::OnConsoleMessage(CefRefPtr browser, cef_log_severity_t level, const CefString& message, const CefString& source, int line) +{ + FString LogMessage = FString(message.c_str()); + log_emitter->Broadcast(LogMessage); + return true; +} + +void BrowserClient::OnFullscreenModeChange(CefRefPtr< CefBrowser > browser, bool fullscreen) +{ + UE_LOG(LogTemp, Log, TEXT("Changed to Fullscreen: %d"), fullscreen); +} + +void BrowserClient::OnTitleChange(CefRefPtr< CefBrowser > browser, const CefString& title) +{ + FString TitleMessage = FString(title.c_str()); + log_emitter->Broadcast(TitleMessage); +} + CefRefPtr BrowserClient::GetCEFBrowser() { return m_Browser; @@ -85,6 +103,12 @@ bool BrowserClient::OnProcessMessageReceived(CefRefPtr browser, CefR return true; } +void BrowserClient::OnUncaughtException(CefRefPtr browser, CefRefPtr frame, CefRefPtr context, CefRefPtr exception, CefRefPtr stackTrace) +{ + FString ErrorMessage = FString(exception->GetMessage().c_str()); + UE_LOG(LogClass, Warning, TEXT("%s"), *ErrorMessage); +} + //The path slashes have to be reversed to work with CEF FString ReversePathSlashes(FString forwardPath) { @@ -101,6 +125,11 @@ void BrowserClient::SetEventEmitter(FScriptEvent* emitter) this->event_emitter = emitter; } +void BrowserClient::SetLogEmitter(FLogEvent* emitter) +{ + this->log_emitter = emitter; +} + void BrowserClient::OnBeforeDownload( CefRefPtr browser, CefRefPtr download_item, diff --git a/Source/Blu/Public/BluBlueprintFunctionLibrary.h b/Source/Blu/Public/BluBlueprintFunctionLibrary.h index b111e83..1c52141 100644 --- a/Source/Blu/Public/BluBlueprintFunctionLibrary.h +++ b/Source/Blu/Public/BluBlueprintFunctionLibrary.h @@ -1,5 +1,6 @@ #pragma once +#include "Input/Events.h" #include "BluBlueprintFunctionLibrary.generated.h" UCLASS(ClassGroup = Blu, Blueprintable) @@ -23,6 +24,10 @@ class BLU_API UBluBlueprintFunctionLibrary : public UBlueprintFunctionLibrary UFUNCTION(BlueprintCallable, meta = (DisplayName = "JSON To String", Keywords = "blui blu eye json parse string"), Category = Blu) static FString JSONToString(UBluJsonObj *ObjectToParse); + /** convert regular key events into char event which you can use char press*/ + UFUNCTION(BlueprintPure, meta = (DisplayName = "To CharacterEvent (Key)", BlueprintAutocast), Category = Blu) + static FCharacterEvent ToKeyEvent(FKey Key); + //Utility functions taken from Victory Plugin UFUNCTION(BlueprintPure, Category = "Blu Utility") static FString GameRootDirectory(); diff --git a/Source/Blu/Public/BluEye.h b/Source/Blu/Public/BluEye.h index 4d39295..ce49310 100644 --- a/Source/Blu/Public/BluEye.h +++ b/Source/Blu/Public/BluEye.h @@ -5,8 +5,6 @@ class BrowserClient; class RenderHandler; -DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FScriptEvent, const FString&, EventName, const FString&, EventMessage); - struct FBluTextureParams { @@ -74,9 +72,14 @@ struct FBluEyeSettings UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") bool bAudioMuted; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") + bool bAutoPlayEnabled; + FBluEyeSettings(); }; +DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FScriptEvent, const FString&, EventName, const FString&, EventMessage); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FLogEvent, const FString&, LogText); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDownloadCompleteSignature, FString, url); DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FDownloadUpdatedSignature, FString, url, float, percentage); //DECLARE_DYNAMIC_MULTICAST_DELEGATE(FDownloadComplete); @@ -101,7 +104,7 @@ class BLU_API UBluEye : public UObject /** Initialize function, should be called after properties are set */ UFUNCTION(BlueprintCallable, Category = "Blu") - void init(); + void Init(); /** The default URL this UI component will load */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") @@ -210,6 +213,9 @@ class BLU_API UBluEye : public UObject UPROPERTY(BlueprintAssignable) FScriptEvent ScriptEventEmitter; + UPROPERTY(BlueprintAssignable) + FLogEvent LogEventEmitter; + /** Trigger a key down event */ UFUNCTION(BlueprintCallable, Category = "Blu") void KeyDown(FKeyEvent InKey); @@ -222,9 +228,13 @@ class BLU_API UBluEye : public UObject UFUNCTION(BlueprintCallable, Category = "Blu") void KeyPress(FKeyEvent InKey); - /** Trigger a character key event */ + /** Trigger a character key event as if typing input */ + UFUNCTION(BlueprintCallable, Category = "Blu") + void CharKeyInput(FCharacterEvent CharEvent); + + /** Trigger a character key event as if pressing like a keyboard shortcut */ UFUNCTION(BlueprintCallable, Category = "Blu") - void CharKeyPress(FCharacterEvent CharEvent); + void CharKeyDownUp(FCharacterEvent CharEvent); /** Trigger a raw keypress via a character */ UFUNCTION(BlueprintCallable, Category = "Blu", meta = (AdvancedDisplay = "2")) diff --git a/Source/Blu/Public/BluManager.h b/Source/Blu/Public/BluManager.h index 95ab30b..9dd58fe 100644 --- a/Source/Blu/Public/BluManager.h +++ b/Source/Blu/Public/BluManager.h @@ -30,6 +30,7 @@ class BLU_API BluManager : public CefApp static CefSettings settings; static CefMainArgs main_args; static bool CPURenderSettings; + static bool AutoPlay; virtual void OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr< CefCommandLine > command_line) override; diff --git a/Source/Blu/Public/RenderHandler.h b/Source/Blu/Public/RenderHandler.h index 3f71cb9..3d4cc47 100644 --- a/Source/Blu/Public/RenderHandler.h +++ b/Source/Blu/Public/RenderHandler.h @@ -46,6 +46,7 @@ class BrowserClient : public CefClient, public CefLifeSpanHandler, public CefDow private: FScriptEvent* event_emitter; + FLogEvent* log_emitter; CefRefPtr m_renderHandler; // For lifespan @@ -76,9 +77,19 @@ class BrowserClient : public CefClient, public CefLifeSpanHandler, public CefDow return this; } - virtual bool OnProcessMessageReceived(CefRefPtr browser, CefRefPtr frame, CefProcessId source_process, CefRefPtr message) override; + virtual bool OnProcessMessageReceived(CefRefPtr browser, + CefRefPtr frame, + CefProcessId source_process, + CefRefPtr message) override; + + virtual void OnUncaughtException(CefRefPtr browser, + CefRefPtr frame, + CefRefPtr context, + CefRefPtr exception, + CefRefPtr stackTrace); void SetEventEmitter(FScriptEvent* emitter); + void SetLogEmitter(FLogEvent* emitter); //CefDownloadHandler virtual void OnBeforeDownload( @@ -112,6 +123,16 @@ class BrowserClient : public CefClient, public CefLifeSpanHandler, public CefDow void OnAfterCreated(CefRefPtr browser) override; void OnBeforeClose(CefRefPtr browser) override; + virtual bool OnConsoleMessage(CefRefPtr browser, + cef_log_severity_t level, + const CefString& message, + const CefString& source, + int line) override; + + virtual void OnFullscreenModeChange(CefRefPtr< CefBrowser > browser, bool fullscreen) override; + + virtual void OnTitleChange(CefRefPtr< CefBrowser > browser, const CefString& title); + CefRefPtr GetCEFBrowser(); // NOTE: Must be at bottom From 14933a147b33d09e0dc104f3d2e93904585fc2a6 Mon Sep 17 00:00:00 2001 From: Jan Kaniewski Date: Sat, 18 Apr 2020 19:46:36 -0700 Subject: [PATCH 25/51] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a9ab6fa..8c646f6 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ Latest release is updated to [CEF 80.0.3987.132](https://github.com/chromiumembe To install check out the latest releases https://github.com/getnamo/BLUI/releases and drag and drop *Plugins* folder into your project root folder +Unreal thread: https://forums.unrealengine.com/community/released-projects/29036-blui-open-source-html5-js-css-hud-ui + ### Convenience Blueprints The native plugin didn't contain any self contained drag and drop examples so I've added some. From cacd6b9740e85a32b4c77221417f575b854e260d Mon Sep 17 00:00:00 2001 From: getnamo Date: Sat, 18 Apr 2020 22:17:27 -0700 Subject: [PATCH 26/51] chrome dev tools redirect --- Source/Blu/Private/BluEye.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index 584fa4b..6940eaa 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -226,9 +226,17 @@ void UBluEye::ExecuteJSMethodWithParams(const FString& methodName, const TArray< void UBluEye::LoadURL(const FString& newURL) { + FString FinalUrl = newURL; - // Check if we want to load a local file + //Detect chrome-devtools, and re-target them to regular devtools + if (newURL.Contains(TEXT("chrome-devtools://devtools"))) + { + //devtools://devtools/inspector.html?v8only=true&ws=localhost:9229 + //browser->GetHost()->ShowDevTools(info, g_handler, browserSettings, CefPoint()); + FinalUrl = FinalUrl.Replace(TEXT("chrome-devtools://devtools/bundled/inspector.html"), TEXT("devtools://devtools/inspector.html")); + } + // Check if we want to load a local file if (newURL.Contains(TEXT("blui://"), ESearchCase::IgnoreCase, ESearchDir::FromStart)) { @@ -251,7 +259,7 @@ void UBluEye::LoadURL(const FString& newURL) } // Load as usual - browser->GetMainFrame()->LoadURL(*newURL); + browser->GetMainFrame()->LoadURL(*FinalUrl); } From baad6641d37553d171c31f5356ed6db41bc21f1a Mon Sep 17 00:00:00 2001 From: GMA_GD Date: Sat, 2 May 2020 19:22:47 +0100 Subject: [PATCH 27/51] adding support for pdf printing --- Source/Blu/Public/RenderHandler.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Blu/Public/RenderHandler.h b/Source/Blu/Public/RenderHandler.h index 3d4cc47..adc1a84 100644 --- a/Source/Blu/Public/RenderHandler.h +++ b/Source/Blu/Public/RenderHandler.h @@ -76,6 +76,11 @@ class BrowserClient : public CefClient, public CefLifeSpanHandler, public CefDow { return this; } + //required or pdf download won't work + virtual CefRefPtr GetDownloadHandler() override + { + return this; + } virtual bool OnProcessMessageReceived(CefRefPtr browser, CefRefPtr frame, From 8548cf84b65f902473d09f1d17ae66ce52f86dcb Mon Sep 17 00:00:00 2001 From: aaron1a12 <65295020+aaron1a12@users.noreply.github.com> Date: Wed, 13 May 2020 10:13:34 -0400 Subject: [PATCH 28/51] Fixed wrong key codes for arrow keys --- Source/Blu/Public/BluEye.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Blu/Public/BluEye.h b/Source/Blu/Public/BluEye.h index ce49310..7ac63cf 100644 --- a/Source/Blu/Public/BluEye.h +++ b/Source/Blu/Public/BluEye.h @@ -35,9 +35,9 @@ enum EBluSpecialKeys endkey = 35 UMETA(DisplayName = "End"), homekey = 36 UMETA(DisplayName = "Home"), leftarrowkey = 37 UMETA(DisplayName = "Left Arrow"), - rightarrowkey = 38 UMETA(DisplayName = "Right Arrow"), - downarrowkey = 39 UMETA(DisplayName = "Down Arrow"), - uparrowkey = 40 UMETA(DisplayName = "Up Arrow"), + rightarrowkey = 39 UMETA(DisplayName = "Right Arrow"), + downarrowkey = 40 UMETA(DisplayName = "Down Arrow"), + uparrowkey = 38 UMETA(DisplayName = "Up Arrow"), insertkey = 45 UMETA(DisplayName = "Insert"), deletekey = 46 UMETA(DisplayName = "Delete"), numlockkey = 144 UMETA(DisplayName = "Num Lock"), From 9e49f9088068f2d8218fa51a358ccbd54def2b47 Mon Sep 17 00:00:00 2001 From: getnamo Date: Tue, 19 May 2020 22:43:23 -0700 Subject: [PATCH 29/51] ordering fix --- BLUI.uplugin | 2 +- Source/Blu/Private/BluEye.cpp | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index 9d79a1d..b558615 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "3.8.0", + "VersionName": "3.8.1", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea & Contributors", diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index 6940eaa..2b175d0 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -149,7 +149,6 @@ void UBluEye::TextureUpdate(const void *buffer, FUpdateTextureRegion2D *updateRe return; } - //todo: remove debug address hack if (bValidTexture && Texture->IsValidLowLevelFast()) { @@ -158,28 +157,23 @@ void UBluEye::TextureUpdate(const void *buffer, FUpdateTextureRegion2D *updateRe UE_LOG(LogBlu, Warning, TEXT("NO TEXTDATA")) return; } - FUpdateTextureRegionsData * RegionData = new FUpdateTextureRegionsData; RegionData->Texture2DResource = (FTexture2DResource*)Texture->Resource; RegionData->NumRegions = regionCount; RegionData->SrcBpp = 4; RegionData->SrcPitch = Settings.Width * 4; + RegionData->Regions = updateRegions; //We need to copy this memory or it might get uninitialized RegionData->SrcData.SetNumUninitialized(RegionData->SrcPitch * Settings.Height); FPlatformMemory::Memcpy(RegionData->SrcData.GetData(), buffer, RegionData->SrcData.Num()); - RegionData->Regions = updateRegions; - - - ENQUEUE_RENDER_COMMAND(UpdateBLUICommand)( [RegionData](FRHICommandList& CommandList) { for (uint32 RegionIndex = 0; RegionIndex < RegionData->NumRegions; RegionIndex++) { - RHIUpdateTexture2D(RegionData->Texture2DResource->GetTexture2DRHI(), 0, RegionData->Regions[RegionIndex], RegionData->SrcPitch, RegionData->SrcData.GetData() + RegionData->Regions[RegionIndex].SrcY * RegionData->SrcPitch + RegionData->Regions[RegionIndex].SrcX * RegionData->SrcBpp); From b4f0dbadacd3a7568a79a19d6b9478b6b3da2d58 Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 10:36:22 -0700 Subject: [PATCH 30/51] bump for 4.25 --- BLUI.uplugin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index b558615..ff67723 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "3.8.1", + "VersionName": "3.9.0", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea & Contributors", From 2788ba1b8c9c40c5fbccfa50c7cdfb9ed10cffee Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 11:43:03 -0700 Subject: [PATCH 31/51] 4.25 IWYU - Transition from old PCH based setup --- Source/Blu/Blu.Build.cs | 31 +++--- Source/Blu/Private/Blu.cpp | 8 +- .../Private/BluBluprintFunctionLibrary.cpp | 6 +- Source/Blu/Private/BluEye.cpp | 3 +- Source/Blu/Private/BluJsonObj.cpp | 1 - Source/Blu/Private/BluManager.cpp | 2 +- Source/Blu/Private/BluPrivatePCH.h | 23 ----- Source/Blu/Private/RenderHandler.cpp | 2 - .../Blu/Public/BluBlueprintFunctionLibrary.h | 2 + Source/Blu/Public/BluEye.h | 97 ++----------------- Source/Blu/Public/BluManager.h | 4 +- Source/Blu/Public/BluTypes.h | 80 +++++++++++++++ Source/Blu/Public/IBlu.h | 3 +- Source/Blu/Public/RenderHandler.h | 6 +- Source/BluLoader/BluLoader.Build.cs | 2 - Source/BluLoader/Private/BluLoader.cpp | 8 +- .../BluLoader/Private/BluLoaderPrivatePCH.h | 9 -- Source/BluLoader/Public/IBluLoader.h | 2 + 18 files changed, 130 insertions(+), 159 deletions(-) delete mode 100644 Source/Blu/Private/BluPrivatePCH.h create mode 100644 Source/Blu/Public/BluTypes.h delete mode 100644 Source/BluLoader/Private/BluLoaderPrivatePCH.h diff --git a/Source/Blu/Blu.Build.cs b/Source/Blu/Blu.Build.cs index fb862a3..ab03c80 100644 --- a/Source/Blu/Blu.Build.cs +++ b/Source/Blu/Blu.Build.cs @@ -21,23 +21,19 @@ private void stageFiles(String[] filesToStage) public Blu(ReadOnlyTargetRules Target) : base(Target) { - PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; - PrivatePCHHeaderFile = "Private/BluPrivatePCH.h"; - PublicDependencyModuleNames.AddRange( - new string[] - { - "Core", - "CoreUObject", - "Engine", - "InputCore", - "RenderCore", - "RHI", - "Slate", - "SlateCore", - "UMG", - "Json" - }); + new string[] { + "Core", + "CoreUObject", + "Engine", + "InputCore", + "RenderCore", + "RHI", + "Slate", + "SlateCore", + "UMG", + "Json" + }); PrivateIncludePaths.AddRange( new string[] { @@ -98,9 +94,8 @@ public Blu(ReadOnlyTargetRules Target) : base(Target) if(!Target.bBuildEditor) { - AdditionalBundleResources.Add(new UEBuildBundleResource(Path.Combine(frameworkPath, "Chromium Embedded Framework"), "MacOS", false)); + AdditionalBundleResources.Add(new BundleResource(Path.Combine(frameworkPath, "Chromium Embedded Framework"), "MacOS", false)); } - } else { diff --git a/Source/Blu/Private/Blu.cpp b/Source/Blu/Private/Blu.cpp index 5e4d505..c82b383 100644 --- a/Source/Blu/Private/Blu.cpp +++ b/Source/Blu/Private/Blu.cpp @@ -1,4 +1,5 @@ -#include "BluPrivatePCH.h" +#include "IBlu.h" +//#include "RenderHandler.h" class FBlu : public IBlu { @@ -6,7 +7,7 @@ class FBlu : public IBlu /** IModuleInterface implementation */ virtual void StartupModule() override { - CefString GameDirCef = *FPaths::ConvertRelativePathToFull(FPaths::ProjectDir() + "BluCache"); + /*CefString GameDirCef = *FPaths::ConvertRelativePathToFull(FPaths::ProjectDir() + "BluCache"); FString ExecutablePath = FPaths::ConvertRelativePathToFull(FPaths::ProjectDir() + "Plugins/BLUI/ThirdParty/cef/"); // Setup the default settings for BluManager @@ -39,13 +40,14 @@ class FBlu : public IBlu //CefExecuteProcess(BluManager::main_args, BluApp, NULL); CefInitialize(BluManager::main_args, BluManager::settings, BluApp, NULL); + */ UE_LOG(LogBlu, Log, TEXT(" STATUS: Loaded")); } virtual void ShutdownModule() override { UE_LOG(LogBlu, Log, TEXT(" STATUS: Shutdown")); - CefShutdown(); + //CefShutdown(); } }; diff --git a/Source/Blu/Private/BluBluprintFunctionLibrary.cpp b/Source/Blu/Private/BluBluprintFunctionLibrary.cpp index 94629d1..afe4243 100644 --- a/Source/Blu/Private/BluBluprintFunctionLibrary.cpp +++ b/Source/Blu/Private/BluBluprintFunctionLibrary.cpp @@ -1,6 +1,6 @@ -#include "BluPrivatePCH.h" -#include "BluManager.h" -#include "Json.h" +#include "BluBlueprintFunctionLibrary.h" +#include "BluJsonObj.h" + UBluBlueprintFunctionLibrary::UBluBlueprintFunctionLibrary(const class FObjectInitializer& PCIP) : Super(PCIP) diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index 2b175d0..0aab275 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -1,5 +1,5 @@ + #include "BluEye.h" -#include "BluPrivatePCH.h" #include "RenderHandler.h" FBluEyeSettings::FBluEyeSettings() @@ -215,7 +215,6 @@ void UBluEye::ExecuteJSMethodWithParams(const FString& methodName, const TArray< // time to call the function ExecuteJS(methodName + paramString); - } void UBluEye::LoadURL(const FString& newURL) diff --git a/Source/Blu/Private/BluJsonObj.cpp b/Source/Blu/Private/BluJsonObj.cpp index 323926f..31775cc 100644 --- a/Source/Blu/Private/BluJsonObj.cpp +++ b/Source/Blu/Private/BluJsonObj.cpp @@ -1,5 +1,4 @@ #include "BluJsonObj.h" -#include "BluPrivatePCH.h" #include "Json.h" UBluJsonObj::UBluJsonObj(const class FObjectInitializer& PCIP) diff --git a/Source/Blu/Private/BluManager.cpp b/Source/Blu/Private/BluManager.cpp index fcd2663..0f10c3e 100644 --- a/Source/Blu/Private/BluManager.cpp +++ b/Source/Blu/Private/BluManager.cpp @@ -1,5 +1,5 @@ #include "BluManager.h" -#include "BluPrivatePCH.h" +//#include "RenderHandler.h" BluManager::BluManager() { diff --git a/Source/Blu/Private/BluPrivatePCH.h b/Source/Blu/Private/BluPrivatePCH.h deleted file mode 100644 index 8b38657..0000000 --- a/Source/Blu/Private/BluPrivatePCH.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once -#include "CoreUObject.h" -#include "Engine/Engine.h" -#include "Engine/Console.h" -#include "Runtime/UMG/Public/UMG.h" -#include "Runtime/UMG/Public/UMGStyle.h" -#include "Runtime/UMG/Public/Slate/SObjectWidget.h" -#include "Runtime/UMG/Public/IUMGModule.h" -#include "Runtime/UMG/Public/Blueprint/UserWidget.h" - -// You should place include statements to your module's private header files here. You only need to -// add includes for headers that are used in most of your module's source files though. -#include "Modules/ModuleManager.h" -#include "IBlu.h" - -DECLARE_LOG_CATEGORY_EXTERN(LogBlu, Log, All); - -// Blu Classes -#include "BluManager.h" -#include "BluEye.h" -#include "RenderHandler.h" -#include "BluJsonObj.h" -#include "BluBlueprintFunctionLibrary.h" \ No newline at end of file diff --git a/Source/Blu/Private/RenderHandler.cpp b/Source/Blu/Private/RenderHandler.cpp index 7bdfe17..6549ed7 100644 --- a/Source/Blu/Private/RenderHandler.cpp +++ b/Source/Blu/Private/RenderHandler.cpp @@ -1,6 +1,4 @@ #include "RenderHandler.h" -#include "BluPrivatePCH.h" -#include "BluEye.h" RenderHandler::RenderHandler(int32 width, int32 height, UBluEye* ui) { diff --git a/Source/Blu/Public/BluBlueprintFunctionLibrary.h b/Source/Blu/Public/BluBlueprintFunctionLibrary.h index 1c52141..8c9a93b 100644 --- a/Source/Blu/Public/BluBlueprintFunctionLibrary.h +++ b/Source/Blu/Public/BluBlueprintFunctionLibrary.h @@ -1,6 +1,8 @@ #pragma once #include "Input/Events.h" +#include "BluEye.h" +#include "Kismet/BlueprintFunctionLibrary.h" #include "BluBlueprintFunctionLibrary.generated.h" UCLASS(ClassGroup = Blu, Blueprintable) diff --git a/Source/Blu/Public/BluEye.h b/Source/Blu/Public/BluEye.h index 7ac63cf..ae68d86 100644 --- a/Source/Blu/Public/BluEye.h +++ b/Source/Blu/Public/BluEye.h @@ -1,89 +1,10 @@ #pragma once + +#include "BluTypes.h" +#include "RenderHandler.h" #include "BluManager.h" #include "BluEye.generated.h" -class BrowserClient; -class RenderHandler; - - -struct FBluTextureParams -{ - // Pointer to our Texture's resource - FTexture2DResource* Texture2DResource; -}; - -struct FUpdateTextureRegionsData -{ - FTexture2DResource * Texture2DResource; - uint32 NumRegions; - FUpdateTextureRegion2D * Regions; - uint32 SrcPitch; - uint32 SrcBpp; - TArray SrcData; -}; - -UENUM(BlueprintType) -enum EBluSpecialKeys -{ - backspacekey = 8 UMETA(DisplayName = "Backspace"), - tabkey = 9 UMETA(DisplayName = "Tab"), - enterkey = 13 UMETA(DisplayName = "Enter"), - pausekey = 19 UMETA(DisplayName = "Pause"), - escapekey = 27 UMETA(DisplayName = "Escape"), - pageupkey = 33 UMETA(DisplayName = "Page Up"), - pagedownkey = 34 UMETA(DisplayName = "Page Down"), - endkey = 35 UMETA(DisplayName = "End"), - homekey = 36 UMETA(DisplayName = "Home"), - leftarrowkey = 37 UMETA(DisplayName = "Left Arrow"), - rightarrowkey = 39 UMETA(DisplayName = "Right Arrow"), - downarrowkey = 40 UMETA(DisplayName = "Down Arrow"), - uparrowkey = 38 UMETA(DisplayName = "Up Arrow"), - insertkey = 45 UMETA(DisplayName = "Insert"), - deletekey = 46 UMETA(DisplayName = "Delete"), - numlockkey = 144 UMETA(DisplayName = "Num Lock"), - scrolllockkey = 145 UMETA(DisplayName = "Scroll Lock"), - unknownkey = 0, -}; - - -USTRUCT(BlueprintType) -struct FBluEyeSettings -{ - GENERATED_USTRUCT_BODY() - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BluSettings") - float FrameRate; - - /** Should this be rendered in game to be transparent? */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - bool bIsTransparent; - - /** Width of the view resolution */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - int32 Width; - - /** Height of the view resolution */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - int32 Height; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - bool bEnableWebGL; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - bool bAudioMuted; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") - bool bAutoPlayEnabled; - - FBluEyeSettings(); -}; - -DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FScriptEvent, const FString&, EventName, const FString&, EventMessage); -DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FLogEvent, const FString&, LogText); -DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDownloadCompleteSignature, FString, url); -DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FDownloadUpdatedSignature, FString, url, float, percentage); -//DECLARE_DYNAMIC_MULTICAST_DELEGATE(FDownloadComplete); - UCLASS(ClassGroup = Blu, Blueprintable) class BLU_API UBluEye : public UObject { @@ -289,18 +210,21 @@ class BLU_API UBluEye : public UObject //UFUNCTION(BlueprintCallable, Category = "Blu") UTexture2D* CropWindow(const int32 Y, const int32 X, const int32 NewWidth, const int32 NewHeight); - CefRefPtr browser; - void TextureUpdate(const void* buffer, FUpdateTextureRegion2D * updateRegions, uint32 regionCount); void BeginDestroy() override; + CefRefPtr browser; + protected: CefWindowInfo info; CefRefPtr g_handler; CefBrowserSettings browserSettings; RenderHandler* renderer; + + CefMouseEvent mouse_event; + CefKeyEvent key_event; void ResetTexture(); void DestroyTexture(); @@ -318,13 +242,8 @@ class BLU_API UBluEye : public UObject UMaterialInstanceDynamic* MaterialInstance; - CefMouseEvent mouse_event; - CefKeyEvent key_event; - private: FBluTextureParams RenderParams; - FThreadSafeBool bValidTexture; - }; diff --git a/Source/Blu/Public/BluManager.h b/Source/Blu/Public/BluManager.h index 9dd58fe..982a9d8 100644 --- a/Source/Blu/Public/BluManager.h +++ b/Source/Blu/Public/BluManager.h @@ -21,8 +21,7 @@ THIRD_PARTY_INCLUDES_END class BLU_API BluManager : public CefApp { - - public: +public: BluManager(); @@ -36,6 +35,5 @@ class BLU_API BluManager : public CefApp CefRefPtr< CefCommandLine > command_line) override; IMPLEMENT_REFCOUNTING(BluManager); - }; diff --git a/Source/Blu/Public/BluTypes.h b/Source/Blu/Public/BluTypes.h new file mode 100644 index 0000000..e2aa80e --- /dev/null +++ b/Source/Blu/Public/BluTypes.h @@ -0,0 +1,80 @@ +#pragma once +#include "BluTypes.generated.h" + +struct FBluTextureParams +{ + // Pointer to our Texture's resource + FTexture2DResource* Texture2DResource; +}; + +struct FUpdateTextureRegionsData +{ + FTexture2DResource* Texture2DResource; + uint32 NumRegions; + FUpdateTextureRegion2D* Regions; + uint32 SrcPitch; + uint32 SrcBpp; + TArray SrcData; +}; + +UENUM(BlueprintType) +enum EBluSpecialKeys +{ + backspacekey = 8 UMETA(DisplayName = "Backspace"), + tabkey = 9 UMETA(DisplayName = "Tab"), + enterkey = 13 UMETA(DisplayName = "Enter"), + pausekey = 19 UMETA(DisplayName = "Pause"), + escapekey = 27 UMETA(DisplayName = "Escape"), + pageupkey = 33 UMETA(DisplayName = "Page Up"), + pagedownkey = 34 UMETA(DisplayName = "Page Down"), + endkey = 35 UMETA(DisplayName = "End"), + homekey = 36 UMETA(DisplayName = "Home"), + leftarrowkey = 37 UMETA(DisplayName = "Left Arrow"), + rightarrowkey = 39 UMETA(DisplayName = "Right Arrow"), + downarrowkey = 40 UMETA(DisplayName = "Down Arrow"), + uparrowkey = 38 UMETA(DisplayName = "Up Arrow"), + insertkey = 45 UMETA(DisplayName = "Insert"), + deletekey = 46 UMETA(DisplayName = "Delete"), + numlockkey = 144 UMETA(DisplayName = "Num Lock"), + scrolllockkey = 145 UMETA(DisplayName = "Scroll Lock"), + unknownkey = 0, +}; + + +USTRUCT(BlueprintType) +struct FBluEyeSettings +{ + GENERATED_USTRUCT_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BluSettings") + float FrameRate; + + /** Should this be rendered in game to be transparent? */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") + bool bIsTransparent; + + /** Width of the view resolution */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") + int32 Width; + + /** Height of the view resolution */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") + int32 Height; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") + bool bEnableWebGL; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") + bool bAudioMuted; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Blu") + bool bAutoPlayEnabled; + + FBluEyeSettings(); +}; + +DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FScriptEvent, const FString&, EventName, const FString&, EventMessage); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FLogEvent, const FString&, LogText); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDownloadCompleteSignature, FString, url); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FDownloadUpdatedSignature, FString, url, float, percentage); +//DECLARE_DYNAMIC_MULTICAST_DELEGATE(FDownloadComplete); \ No newline at end of file diff --git a/Source/Blu/Public/IBlu.h b/Source/Blu/Public/IBlu.h index ecdaa4d..b4551ed 100644 --- a/Source/Blu/Public/IBlu.h +++ b/Source/Blu/Public/IBlu.h @@ -4,6 +4,8 @@ #pragma once #include "Modules/ModuleManager.h" +DECLARE_LOG_CATEGORY_EXTERN(LogBlu, Log, All); + class IBlu : public IModuleInterface { public: @@ -28,5 +30,4 @@ class IBlu : public IModuleInterface { return FModuleManager::Get().IsModuleLoaded("Blu"); } - }; diff --git a/Source/Blu/Public/RenderHandler.h b/Source/Blu/Public/RenderHandler.h index adc1a84..dae5d1d 100644 --- a/Source/Blu/Public/RenderHandler.h +++ b/Source/Blu/Public/RenderHandler.h @@ -1,6 +1,10 @@ #pragma once -#include "BluEye.h" +#include "BluTypes.h" +//#include "BluEye.h" +class UBluEye; + + #if PLATFORM_WINDOWS #include "Windows/WindowsHWrapper.h" diff --git a/Source/BluLoader/BluLoader.Build.cs b/Source/BluLoader/BluLoader.Build.cs index 27b66c8..3587202 100644 --- a/Source/BluLoader/BluLoader.Build.cs +++ b/Source/BluLoader/BluLoader.Build.cs @@ -6,8 +6,6 @@ public class BluLoader : ModuleRules { public BluLoader(ReadOnlyTargetRules Target) : base(Target) { - PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; - PrivatePCHHeaderFile = "Private/BluLoaderPrivatePCH.h"; PublicDependencyModuleNames.AddRange( new string[] diff --git a/Source/BluLoader/Private/BluLoader.cpp b/Source/BluLoader/Private/BluLoader.cpp index d4850d0..2d9304c 100644 --- a/Source/BluLoader/Private/BluLoader.cpp +++ b/Source/BluLoader/Private/BluLoader.cpp @@ -1,6 +1,12 @@ -#include "BluLoaderPrivatePCH.h" +#include "IBluLoader.h" +#include "CoreMinimal.h" +#include "Misc/Paths.h" #include +#if PLATFORM_WINDOWS +#include "Windows/WindowsPlatformProcess.h" +#endif + class FBluLoader : public IBluLoader { diff --git a/Source/BluLoader/Private/BluLoaderPrivatePCH.h b/Source/BluLoader/Private/BluLoaderPrivatePCH.h deleted file mode 100644 index 9aaa50d..0000000 --- a/Source/BluLoader/Private/BluLoaderPrivatePCH.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once -#include "CoreUObject.h" -#include "Engine/Engine.h" -#include "Engine/Console.h" - -#include "Modules/ModuleManager.h" -#include "IBluLoader.h" - -DECLARE_LOG_CATEGORY_EXTERN(LogBluLoader, Log, All); diff --git a/Source/BluLoader/Public/IBluLoader.h b/Source/BluLoader/Public/IBluLoader.h index 79ec63a..a96f81b 100644 --- a/Source/BluLoader/Public/IBluLoader.h +++ b/Source/BluLoader/Public/IBluLoader.h @@ -4,6 +4,8 @@ #pragma once #include "Modules/ModuleManager.h" +DECLARE_LOG_CATEGORY_EXTERN(LogBluLoader, Log, All); + class IBluLoader : public IModuleInterface { public: From d22cf8af16cb816692819a9a73bebde188c5501d Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 14:52:23 -0700 Subject: [PATCH 32/51] move cef includes to a single file --- Source/Blu/Private/CEFInclude.h | 19 +++++++++++++++++++ Source/Blu/Public/BluManager.h | 19 +------------------ Source/Blu/Public/RenderHandler.h | 19 +------------------ 3 files changed, 21 insertions(+), 36 deletions(-) create mode 100644 Source/Blu/Private/CEFInclude.h diff --git a/Source/Blu/Private/CEFInclude.h b/Source/Blu/Private/CEFInclude.h new file mode 100644 index 0000000..2f1a8ab --- /dev/null +++ b/Source/Blu/Private/CEFInclude.h @@ -0,0 +1,19 @@ +#pragma once + +#if PLATFORM_WINDOWS +#include "Windows/WindowsHWrapper.h" +#include "Windows/AllowWindowsPlatformTypes.h" +#include "Windows/AllowWindowsPlatformAtomics.h" +#endif +//#pragma push_macro("OVERRIDE") +//#undef OVERRIDE // cef headers provide their own OVERRIDE macro +THIRD_PARTY_INCLUDES_START +#include "include/cef_client.h" +#include "include/cef_browser.h" +#include "include/cef_app.h" +THIRD_PARTY_INCLUDES_END +//#pragma pop_macro("OVERRIDE") +#if PLATFORM_WINDOWS +#include "Windows/HideWindowsPlatformAtomics.h" +#include "Windows/HideWindowsPlatformTypes.h" +#endif \ No newline at end of file diff --git a/Source/Blu/Public/BluManager.h b/Source/Blu/Public/BluManager.h index 982a9d8..dfe5d95 100644 --- a/Source/Blu/Public/BluManager.h +++ b/Source/Blu/Public/BluManager.h @@ -1,23 +1,6 @@ #pragma once -#if PLATFORM_WINDOWS -#include "Windows/WindowsHWrapper.h" -#include "Windows/AllowWindowsPlatformTypes.h" -#include "Windows/AllowWindowsPlatformAtomics.h" -#endif -//#pragma push_macro("OVERRIDE") -//#undef OVERRIDE // cef headers provide their own OVERRIDE macro -THIRD_PARTY_INCLUDES_START -#include "include/cef_app.h" -#include "include/cef_browser.h" - -THIRD_PARTY_INCLUDES_END -//#pragma pop_macro("OVERRIDE") -#if PLATFORM_WINDOWS -#include "Windows/HideWindowsPlatformAtomics.h" -#include "Windows/HideWindowsPlatformTypes.h" -#endif - +#include "CEFInclude.h" class BLU_API BluManager : public CefApp { diff --git a/Source/Blu/Public/RenderHandler.h b/Source/Blu/Public/RenderHandler.h index dae5d1d..e019129 100644 --- a/Source/Blu/Public/RenderHandler.h +++ b/Source/Blu/Public/RenderHandler.h @@ -1,28 +1,11 @@ #pragma once +#include "CEFInclude.h" #include "BluTypes.h" //#include "BluEye.h" class UBluEye; - -#if PLATFORM_WINDOWS -#include "Windows/WindowsHWrapper.h" -#include "Windows/AllowWindowsPlatformTypes.h" -#include "Windows/AllowWindowsPlatformAtomics.h" -#endif -//#pragma push_macro("OVERRIDE") -//#undef OVERRIDE // cef headers provide their own OVERRIDE macro -THIRD_PARTY_INCLUDES_START -#include "include/cef_client.h" -#include "include/cef_app.h" -THIRD_PARTY_INCLUDES_END -//#pragma pop_macro("OVERRIDE") -#if PLATFORM_WINDOWS -#include "Windows/HideWindowsPlatformAtomics.h" -#include "Windows/HideWindowsPlatformTypes.h" -#endif - class RenderHandler : public CefRenderHandler { public: From 14584ec9e63687c20c552b03b2e74dd1e8a75af7 Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 15:39:48 -0700 Subject: [PATCH 33/51] fix iwyu and cleanup naming - from camelCase and other misc to PascalCase as used in UE4 for consistency --- Source/Blu/Blu.Build.cs | 2 +- Source/Blu/Private/Blu.cpp | 5 +- Source/Blu/Private/BluEye.cpp | 182 +++++++++--------- Source/Blu/Private/BluManager.cpp | 1 - Source/Blu/Private/RenderHandler.cpp | 47 ++--- .../Blu/Public/BluBlueprintFunctionLibrary.h | 3 +- Source/Blu/Public/BluEye.h | 17 +- Source/Blu/Public/BluTypes.h | 2 + Source/Blu/Public/RenderHandler.h | 106 +++++----- Source/BluLoader/BluLoader.Build.cs | 3 +- 10 files changed, 184 insertions(+), 184 deletions(-) diff --git a/Source/Blu/Blu.Build.cs b/Source/Blu/Blu.Build.cs index ab03c80..3aaa451 100644 --- a/Source/Blu/Blu.Build.cs +++ b/Source/Blu/Blu.Build.cs @@ -21,7 +21,7 @@ private void stageFiles(String[] filesToStage) public Blu(ReadOnlyTargetRules Target) : base(Target) { - PublicDependencyModuleNames.AddRange( + PublicDependencyModuleNames.AddRange( new string[] { "Core", "CoreUObject", diff --git a/Source/Blu/Private/Blu.cpp b/Source/Blu/Private/Blu.cpp index c82b383..e5d681e 100644 --- a/Source/Blu/Private/Blu.cpp +++ b/Source/Blu/Private/Blu.cpp @@ -1,5 +1,5 @@ #include "IBlu.h" -//#include "RenderHandler.h" +#include "BluManager.h" class FBlu : public IBlu { @@ -7,7 +7,7 @@ class FBlu : public IBlu /** IModuleInterface implementation */ virtual void StartupModule() override { - /*CefString GameDirCef = *FPaths::ConvertRelativePathToFull(FPaths::ProjectDir() + "BluCache"); + CefString GameDirCef = *FPaths::ConvertRelativePathToFull(FPaths::ProjectDir() + "BluCache"); FString ExecutablePath = FPaths::ConvertRelativePathToFull(FPaths::ProjectDir() + "Plugins/BLUI/ThirdParty/cef/"); // Setup the default settings for BluManager @@ -40,7 +40,6 @@ class FBlu : public IBlu //CefExecuteProcess(BluManager::main_args, BluApp, NULL); CefInitialize(BluManager::main_args, BluManager::settings, BluApp, NULL); - */ UE_LOG(LogBlu, Log, TEXT(" STATUS: Loaded")); } diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index 0aab275..124f5bb 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -6,8 +6,8 @@ FBluEyeSettings::FBluEyeSettings() { FrameRate = 60.f; - Width = 800; - Height = 600; + Width = 1280; + Height = 720; bIsTransparent = false; bEnableWebGL = true; @@ -45,17 +45,17 @@ void UBluEye::Init() return; } - browserSettings.universal_access_from_file_urls = STATE_ENABLED; - browserSettings.file_access_from_file_urls = STATE_ENABLED; + BrowserSettings.universal_access_from_file_urls = STATE_ENABLED; + BrowserSettings.file_access_from_file_urls = STATE_ENABLED; //browserSettings.web_security = STATE_DISABLED; //browserSettings.fullscreen_enabled = true; - info.width = Settings.Width; - info.height = Settings.Height; + Info.width = Settings.Width; + Info.height = Settings.Height; // Set transparant option - info.SetAsWindowless(0); //bIsTransparent + Info.SetAsWindowless(0); //bIsTransparent // Figure out if we want to turn on WebGL support if (Settings.bEnableWebGL) @@ -64,31 +64,29 @@ void UBluEye::Init() { UE_LOG(LogBlu, Error, TEXT("You have enabled WebGL for this browser, but CPU Saver is enabled in BluManager.cpp - WebGL will not work!")); } - browserSettings.webgl = STATE_ENABLED; + BrowserSettings.webgl = STATE_ENABLED; } //NB: this setting will change it globally for all new instances BluManager::AutoPlay = Settings.bAutoPlayEnabled; - renderer = new RenderHandler(Settings.Width, Settings.Height, this); - g_handler = new BrowserClient(renderer); - //browser = CefBrowserHost::CreateBrowserSync(info, g_handler.get(), "about:blank", browserSettings, NULL); - browser = CefBrowserHost::CreateBrowserSync( - info, - g_handler.get(), + Renderer = new RenderHandler(Settings.Width, Settings.Height, this); + ClientHandler = new BrowserClient(Renderer); + Browser = CefBrowserHost::CreateBrowserSync( + Info, + ClientHandler.get(), "about:blank", - browserSettings, + BrowserSettings, NULL, NULL); - //browser->GetHost()->PrintToPDF() - browser->GetHost()->SetWindowlessFrameRate(Settings.FrameRate); - browser->GetHost()->SetAudioMuted(Settings.bAudioMuted); + Browser->GetHost()->SetWindowlessFrameRate(Settings.FrameRate); + Browser->GetHost()->SetAudioMuted(Settings.bAudioMuted); // Setup JS event emitter - g_handler->SetEventEmitter(&ScriptEventEmitter); - g_handler->SetLogEmitter(&LogEventEmitter); + ClientHandler->SetEventEmitter(&ScriptEventEmitter); + ClientHandler->SetLogEmitter(&LogEventEmitter); UE_LOG(LogBlu, Log, TEXT("Component Initialized")); CefString str = *DefaultURL; @@ -143,7 +141,7 @@ void UBluEye::DestroyTexture() void UBluEye::TextureUpdate(const void *buffer, FUpdateTextureRegion2D *updateRegions, uint32 regionCount) { - if (!browser || !bEnabled) + if (!Browser || !bEnabled) { UE_LOG(LogBlu, Warning, TEXT("NO BROWSER ACCESS OR NOT ENABLED")) return; @@ -193,7 +191,7 @@ void UBluEye::TextureUpdate(const void *buffer, FUpdateTextureRegion2D *updateRe void UBluEye::ExecuteJS(const FString& code) { CefString codeStr = *code; - browser->GetMainFrame()->ExecuteJavaScript(codeStr, "", 0); + Browser->GetMainFrame()->ExecuteJavaScript(codeStr, "", 0); } void UBluEye::ExecuteJSMethodWithParams(const FString& methodName, const TArray params) @@ -245,30 +243,30 @@ void UBluEye::LoadURL(const FString& newURL) UE_LOG(LogBlu, Log, TEXT("Load Local File: %s"), *LocalFile) // Load it up - browser->GetMainFrame()->LoadURL(*LocalFile); + Browser->GetMainFrame()->LoadURL(*LocalFile); return; } // Load as usual - browser->GetMainFrame()->LoadURL(*FinalUrl); + Browser->GetMainFrame()->LoadURL(*FinalUrl); } FString UBluEye::GetCurrentURL() { - return FString(browser->GetMainFrame()->GetURL().c_str()); + return FString(Browser->GetMainFrame()->GetURL().c_str()); } void UBluEye::SetZoom(const float scale /*= 1*/) { - browser->GetHost()->SetZoomLevel(scale); + Browser->GetHost()->SetZoomLevel(scale); } float UBluEye::GetZoom() { - return browser->GetHost()->GetZoomLevel(); + return Browser->GetHost()->GetZoomLevel(); } void UBluEye::Test() @@ -281,13 +279,13 @@ void UBluEye::Test() void UBluEye::DownloadFile(const FString& fileUrl) { - browser->GetHost()->StartDownload(*fileUrl); + Browser->GetHost()->StartDownload(*fileUrl); //Todo: ensure downloading works in some way, shape or form? } bool UBluEye::IsBrowserLoading() { - return browser->IsLoading(); + return Browser->IsLoading(); } void UBluEye::ReloadBrowser(bool IgnoreCache) @@ -295,19 +293,19 @@ void UBluEye::ReloadBrowser(bool IgnoreCache) if (IgnoreCache) { - return browser->ReloadIgnoreCache(); + return Browser->ReloadIgnoreCache(); } - browser->Reload(); + Browser->Reload(); } void UBluEye::NavBack() { - if (browser->CanGoBack()) + if (Browser->CanGoBack()) { - browser->GoBack(); + Browser->GoBack(); } } @@ -315,9 +313,9 @@ void UBluEye::NavBack() void UBluEye::NavForward() { - if (browser->CanGoForward()) + if (Browser->CanGoForward()) { - browser->GoForward(); + Browser->GoForward(); } } @@ -340,8 +338,8 @@ UTexture2D* UBluEye::ResizeBrowser(const int32 NewWidth, const int32 NewHeight) Settings.Height = NewHeight; // Update our render handler - renderer->Width = NewWidth; - renderer->Height = NewHeight; + Renderer->Width = NewWidth; + Renderer->Height = NewHeight; bValidTexture = false; @@ -352,7 +350,7 @@ UTexture2D* UBluEye::ResizeBrowser(const int32 NewWidth, const int32 NewHeight) bValidTexture = true; // Let the browser's host know we resized it - browser->GetHost()->WasResized(); + Browser->GetHost()->WasResized(); // Now we can keep going bEnabled = true; @@ -374,8 +372,8 @@ UTexture2D* UBluEye::CropWindow(const int32 Y, const int32 X, const int32 NewWid Settings.Height = NewHeight; // Update our render handler - renderer->Width = NewWidth; - renderer->Height = NewHeight; + Renderer->Width = NewWidth; + Renderer->Height = NewHeight; bValidTexture = false; @@ -420,11 +418,11 @@ UBluEye* UBluEye::SetProperties(const int32 SetWidth, void UBluEye::TriggerMouseMove(const FVector2D& pos, const float scale) { - mouse_event.x = pos.X / scale; - mouse_event.y = pos.Y / scale; + MouseEvent.x = pos.X / scale; + MouseEvent.y = pos.Y / scale; - browser->GetHost()->SendFocusEvent(true); - browser->GetHost()->SendMouseMoveEvent(mouse_event, false); + Browser->GetHost()->SendFocusEvent(true); + Browser->GetHost()->SendMouseMoveEvent(MouseEvent, false); } @@ -442,42 +440,42 @@ void UBluEye::TriggerRightClick(const FVector2D& pos, const float scale) void UBluEye::TriggerLeftMouseDown(const FVector2D& pos, const float scale) { - mouse_event.x = pos.X / scale; - mouse_event.y = pos.Y / scale; + MouseEvent.x = pos.X / scale; + MouseEvent.y = pos.Y / scale; - browser->GetHost()->SendMouseClickEvent(mouse_event, MBT_LEFT, false, 1); + Browser->GetHost()->SendMouseClickEvent(MouseEvent, MBT_LEFT, false, 1); } void UBluEye::TriggerRightMouseDown(const FVector2D& pos, const float scale) { - mouse_event.x = pos.X / scale; - mouse_event.y = pos.Y / scale; + MouseEvent.x = pos.X / scale; + MouseEvent.y = pos.Y / scale; - browser->GetHost()->SendMouseClickEvent(mouse_event, MBT_RIGHT, false, 1); + Browser->GetHost()->SendMouseClickEvent(MouseEvent, MBT_RIGHT, false, 1); } void UBluEye::TriggerLeftMouseUp(const FVector2D& pos, const float scale) { - mouse_event.x = pos.X / scale; - mouse_event.y = pos.Y / scale; + MouseEvent.x = pos.X / scale; + MouseEvent.y = pos.Y / scale; - browser->GetHost()->SendMouseClickEvent(mouse_event, MBT_LEFT, true, 1); + Browser->GetHost()->SendMouseClickEvent(MouseEvent, MBT_LEFT, true, 1); } void UBluEye::TriggerRightMouseUp(const FVector2D& pos, const float scale) { - mouse_event.x = pos.X / scale; - mouse_event.y = pos.Y / scale; + MouseEvent.x = pos.X / scale; + MouseEvent.y = pos.Y / scale; - browser->GetHost()->SendMouseClickEvent(mouse_event, MBT_RIGHT, true, 1); + Browser->GetHost()->SendMouseClickEvent(MouseEvent, MBT_RIGHT, true, 1); } void UBluEye::TriggerMouseWheel(const float MouseWheelDelta, const FVector2D& pos, const float scale) { - mouse_event.x = pos.X / scale; - mouse_event.y = pos.Y / scale; + MouseEvent.x = pos.X / scale; + MouseEvent.y = pos.Y / scale; - browser->GetHost()->SendMouseWheelEvent(mouse_event, MouseWheelDelta * 10, MouseWheelDelta * 10); + Browser->GetHost()->SendMouseWheelEvent(MouseEvent, MouseWheelDelta * 10, MouseWheelDelta * 10); } void UBluEye::KeyDown(FKeyEvent InKey) @@ -486,8 +484,8 @@ void UBluEye::KeyDown(FKeyEvent InKey) processKeyMods(InKey); processKeyCode(InKey); - key_event.type = KEYEVENT_KEYDOWN; - browser->GetHost()->SendKeyEvent(key_event); + KeyEvent.type = KEYEVENT_KEYDOWN; + Browser->GetHost()->SendKeyEvent(KeyEvent); } @@ -497,8 +495,8 @@ void UBluEye::KeyUp(FKeyEvent InKey) processKeyMods(InKey); processKeyCode(InKey); - key_event.type = KEYEVENT_KEYUP; - browser->GetHost()->SendKeyEvent(key_event); + KeyEvent.type = KEYEVENT_KEYUP; + Browser->GetHost()->SendKeyEvent(KeyEvent); } @@ -513,8 +511,8 @@ void UBluEye::KeyPress(FKeyEvent InKey) void UBluEye::processKeyCode(FKeyEvent InKey) { - key_event.native_key_code = InKey.GetKeyCode(); - key_event.windows_key_code = InKey.GetKeyCode(); + KeyEvent.native_key_code = InKey.GetKeyCode(); + KeyEvent.windows_key_code = InKey.GetKeyCode(); } void UBluEye::CharKeyInput(FCharacterEvent CharEvent) @@ -526,13 +524,13 @@ void UBluEye::CharKeyInput(FCharacterEvent CharEvent) // Below char input needs some special treatment, se we can't use the normal key down/up methods #if PLATFORM_MAC - key_event.character = CharEvent.GetCharacter(); + KeyEvent.character = CharEvent.GetCharacter(); #else - key_event.windows_key_code = CharEvent.GetCharacter(); - key_event.native_key_code = CharEvent.GetCharacter(); + KeyEvent.windows_key_code = CharEvent.GetCharacter(); + KeyEvent.native_key_code = CharEvent.GetCharacter(); #endif - key_event.type = KEYEVENT_CHAR; - browser->GetHost()->SendKeyEvent(key_event); + KeyEvent.type = KEYEVENT_CHAR; + Browser->GetHost()->SendKeyEvent(KeyEvent); } void UBluEye::CharKeyDownUp(FCharacterEvent CharEvent) @@ -543,16 +541,16 @@ void UBluEye::CharKeyDownUp(FCharacterEvent CharEvent) // Below char input needs some special treatment, se we can't use the normal key down/up methods #if PLATFORM_MAC - key_event.character = CharEvent.GetCharacter(); + KeyEvent.character = CharEvent.GetCharacter(); #else - key_event.windows_key_code = CharEvent.GetCharacter(); - key_event.native_key_code = CharEvent.GetCharacter(); + KeyEvent.windows_key_code = CharEvent.GetCharacter(); + KeyEvent.native_key_code = CharEvent.GetCharacter(); #endif - key_event.type = KEYEVENT_KEYDOWN; - browser->GetHost()->SendKeyEvent(key_event); + KeyEvent.type = KEYEVENT_KEYDOWN; + Browser->GetHost()->SendKeyEvent(KeyEvent); - key_event.type = KEYEVENT_KEYUP; - browser->GetHost()->SendKeyEvent(key_event); + KeyEvent.type = KEYEVENT_KEYUP; + Browser->GetHost()->SendKeyEvent(KeyEvent); } void UBluEye::RawCharKeyPress(const FString charToPress, bool isRepeat, @@ -589,16 +587,16 @@ void UBluEye::SpecialKeyPress(EBluSpecialKeys key, bool LeftShiftDown, int32 keyValue = key; - key_event.windows_key_code = keyValue; - key_event.native_key_code = keyValue; - key_event.type = KEYEVENT_KEYDOWN; - browser->GetHost()->SendKeyEvent(key_event); + KeyEvent.windows_key_code = keyValue; + KeyEvent.native_key_code = keyValue; + KeyEvent.type = KEYEVENT_KEYDOWN; + Browser->GetHost()->SendKeyEvent(KeyEvent); - key_event.windows_key_code = keyValue; - key_event.native_key_code = keyValue; + KeyEvent.windows_key_code = keyValue; + KeyEvent.native_key_code = keyValue; // bits 30 and 31 should be always 1 for WM_KEYUP - key_event.type = KEYEVENT_KEYUP; - browser->GetHost()->SendKeyEvent(key_event); + KeyEvent.type = KEYEVENT_KEYUP; + Browser->GetHost()->SendKeyEvent(KeyEvent); } @@ -625,7 +623,7 @@ void UBluEye::processKeyMods(FInputEvent InKey) mods |= cef_event_flags_t::EVENTFLAG_SHIFT_DOWN; } - key_event.modifiers = mods; + KeyEvent.modifiers = mods; } @@ -682,15 +680,15 @@ void UBluEye::CloseBrowser() void UBluEye::BeginDestroy() { - if (browser) + if (Browser) { // Close up the browser - browser->GetHost()->SetAudioMuted(true); - browser->GetMainFrame()->LoadURL("about:blank"); + Browser->GetHost()->SetAudioMuted(true); + Browser->GetMainFrame()->LoadURL("about:blank"); //browser->GetMainFrame()->Delete(); - browser->GetHost()->CloseDevTools(); - browser->GetHost()->CloseBrowser(true); - browser = nullptr; + Browser->GetHost()->CloseDevTools(); + Browser->GetHost()->CloseBrowser(true); + Browser = nullptr; UE_LOG(LogBlu, Warning, TEXT("Browser Closing")); diff --git a/Source/Blu/Private/BluManager.cpp b/Source/Blu/Private/BluManager.cpp index 0f10c3e..25ebc44 100644 --- a/Source/Blu/Private/BluManager.cpp +++ b/Source/Blu/Private/BluManager.cpp @@ -1,5 +1,4 @@ #include "BluManager.h" -//#include "RenderHandler.h" BluManager::BluManager() { diff --git a/Source/Blu/Private/RenderHandler.cpp b/Source/Blu/Private/RenderHandler.cpp index 6549ed7..5636f00 100644 --- a/Source/Blu/Private/RenderHandler.cpp +++ b/Source/Blu/Private/RenderHandler.cpp @@ -1,10 +1,11 @@ #include "RenderHandler.h" +#include "BluEye.h" RenderHandler::RenderHandler(int32 width, int32 height, UBluEye* ui) { this->Width = width; this->Height = height; - this->parentUI = ui; + this->ParentUI = ui; } void RenderHandler::GetViewRect(CefRefPtr browser, CefRect &rect) @@ -28,33 +29,33 @@ void RenderHandler::OnPaint(CefRefPtr browser, PaintElementType type } // Trigger our parent UIs Texture to update - parentUI->TextureUpdate(buffer, updateRegions, dirtyRects.size()); + ParentUI->TextureUpdate(buffer, updateRegions, dirtyRects.size()); } void BrowserClient::OnAfterCreated(CefRefPtr browser) { //CEF_REQUIRE_UI_THREAD(); - if (!m_Browser.get()) + if (!BrowserRef.get()) { // Keep a reference to the main browser. - m_Browser = browser; - m_BrowserId = browser->GetIdentifier(); + BrowserRef = browser; + BrowserId = browser->GetIdentifier(); } } void BrowserClient::OnBeforeClose(CefRefPtr browser) { //CEF_REQUIRE_UI_THREAD(); - if (m_BrowserId == browser->GetIdentifier()) + if (BrowserId == browser->GetIdentifier()) { - m_Browser = NULL; + BrowserRef = NULL; } } bool BrowserClient::OnConsoleMessage(CefRefPtr browser, cef_log_severity_t level, const CefString& message, const CefString& source, int line) { FString LogMessage = FString(message.c_str()); - log_emitter->Broadcast(LogMessage); + LogEmitter->Broadcast(LogMessage); return true; } @@ -66,12 +67,12 @@ void BrowserClient::OnFullscreenModeChange(CefRefPtr< CefBrowser > browser, bool void BrowserClient::OnTitleChange(CefRefPtr< CefBrowser > browser, const CefString& title) { FString TitleMessage = FString(title.c_str()); - log_emitter->Broadcast(TitleMessage); + LogEmitter->Broadcast(TitleMessage); } CefRefPtr BrowserClient::GetCEFBrowser() { - return m_Browser; + return BrowserRef; } bool BrowserClient::OnProcessMessageReceived(CefRefPtr browser, CefRefPtr frame, CefProcessId source_process, CefRefPtr message) @@ -95,7 +96,7 @@ bool BrowserClient::OnProcessMessageReceived(CefRefPtr browser, CefR else if (data_type == "double") data = FString::SanitizeFloat(message->GetArgumentList()->GetDouble(1)); - event_emitter->Broadcast(name, data); + EventEmitter->Broadcast(name, data); } return true; @@ -120,12 +121,12 @@ FString UtilityBLUIDownloadsFolder() void BrowserClient::SetEventEmitter(FScriptEvent* emitter) { - this->event_emitter = emitter; + this->EventEmitter = emitter; } void BrowserClient::SetLogEmitter(FLogEvent* emitter) { - this->log_emitter = emitter; + this->LogEmitter = emitter; } void BrowserClient::OnBeforeDownload( @@ -146,20 +147,20 @@ void BrowserClient::OnBeforeDownload( } void BrowserClient::OnDownloadUpdated( - CefRefPtr browser, - CefRefPtr download_item, - CefRefPtr callback) + CefRefPtr ForBrowser, + CefRefPtr DownloadItem, + CefRefPtr Callback) { - int percentage = download_item->GetPercentComplete(); - FString url = FString(download_item->GetFullPath().c_str()); + int Percentage = DownloadItem->GetPercentComplete(); + FString Url = FString(DownloadItem->GetFullPath().c_str()); - UE_LOG(LogClass, Log, TEXT("Download %s Updated: %d"), *url , percentage); + UE_LOG(LogClass, Log, TEXT("Download %s Updated: %d"), *Url , Percentage); - m_renderHandler->parentUI->DownloadUpdated.Broadcast(url, percentage); + RenderHandlerRef->ParentUI->DownloadUpdated.Broadcast(Url, Percentage); - if (percentage == 100 && download_item->IsComplete()) { - UE_LOG(LogClass, Log, TEXT("Download %s Complete"), *url); - m_renderHandler->parentUI->DownloadComplete.Broadcast(url); + if (Percentage == 100 && DownloadItem->IsComplete()) { + UE_LOG(LogClass, Log, TEXT("Download %s Complete"), *Url); + RenderHandlerRef->ParentUI->DownloadComplete.Broadcast(Url); } //Example download cancel/pause etc, we just have to hijack this diff --git a/Source/Blu/Public/BluBlueprintFunctionLibrary.h b/Source/Blu/Public/BluBlueprintFunctionLibrary.h index 8c9a93b..e639164 100644 --- a/Source/Blu/Public/BluBlueprintFunctionLibrary.h +++ b/Source/Blu/Public/BluBlueprintFunctionLibrary.h @@ -1,8 +1,9 @@ #pragma once +#include "Kismet/BlueprintFunctionLibrary.h" #include "Input/Events.h" #include "BluEye.h" -#include "Kismet/BlueprintFunctionLibrary.h" + #include "BluBlueprintFunctionLibrary.generated.h" UCLASS(ClassGroup = Blu, Blueprintable) diff --git a/Source/Blu/Public/BluEye.h b/Source/Blu/Public/BluEye.h index ae68d86..db79e8a 100644 --- a/Source/Blu/Public/BluEye.h +++ b/Source/Blu/Public/BluEye.h @@ -1,8 +1,9 @@ #pragma once -#include "BluTypes.h" #include "RenderHandler.h" +#include "BluTypes.h" #include "BluManager.h" +#include "UObject/Object.h" #include "BluEye.generated.h" UCLASS(ClassGroup = Blu, Blueprintable) @@ -214,17 +215,17 @@ class BLU_API UBluEye : public UObject void BeginDestroy() override; - CefRefPtr browser; + CefRefPtr Browser; protected: - CefWindowInfo info; - CefRefPtr g_handler; - CefBrowserSettings browserSettings; - RenderHandler* renderer; + CefWindowInfo Info; + CefRefPtr ClientHandler; + CefBrowserSettings BrowserSettings; + RenderHandler* Renderer; - CefMouseEvent mouse_event; - CefKeyEvent key_event; + CefMouseEvent MouseEvent; + CefKeyEvent KeyEvent; void ResetTexture(); void DestroyTexture(); diff --git a/Source/Blu/Public/BluTypes.h b/Source/Blu/Public/BluTypes.h index e2aa80e..1bc85a7 100644 --- a/Source/Blu/Public/BluTypes.h +++ b/Source/Blu/Public/BluTypes.h @@ -1,4 +1,6 @@ #pragma once + +#include "CoreMinimal.h" #include "BluTypes.generated.h" struct FBluTextureParams diff --git a/Source/Blu/Public/RenderHandler.h b/Source/Blu/Public/RenderHandler.h index e019129..d7e8494 100644 --- a/Source/Blu/Public/RenderHandler.h +++ b/Source/Blu/Public/RenderHandler.h @@ -2,24 +2,24 @@ #include "CEFInclude.h" #include "BluTypes.h" -//#include "BluEye.h" + class UBluEye; class RenderHandler : public CefRenderHandler { public: - UBluEye* parentUI; + UBluEye* ParentUI; int32 Width; int32 Height; // CefRenderHandler interface - virtual void GetViewRect(CefRefPtr browser, CefRect &rect) override; + virtual void GetViewRect(CefRefPtr Browser, CefRect &Rect) override; - void OnPaint(CefRefPtr browser, PaintElementType type, const RectList &dirtyRects, const void *buffer, int width, int height) override; + void OnPaint(CefRefPtr Browser, PaintElementType Type, const RectList &DirtyRects, const void *Buffer, int Width, int Height) override; - RenderHandler(int32 width, int32 height, UBluEye* ui); + RenderHandler(int32 Width, int32 Height, UBluEye* UI); // CefBase interface // NOTE: Must be at bottom @@ -32,30 +32,30 @@ class BrowserClient : public CefClient, public CefLifeSpanHandler, public CefDow { private: - FScriptEvent* event_emitter; - FLogEvent* log_emitter; - CefRefPtr m_renderHandler; + FScriptEvent* EventEmitter; + FLogEvent* LogEmitter; + CefRefPtr RenderHandlerRef; // For lifespan - CefRefPtr m_Browser; - int m_BrowserId; - bool m_bIsClosing; + CefRefPtr BrowserRef; + int BrowserId; + bool bIsClosing; public: - BrowserClient(RenderHandler* renderHandler) : m_renderHandler(renderHandler) + BrowserClient(RenderHandler* InRenderHandler) : RenderHandlerRef(InRenderHandler) { }; virtual CefRefPtr GetRenderHandler() { - return m_renderHandler; + return RenderHandlerRef; }; // Getter for renderer virtual CefRefPtr GetRenderHandlerCustom() { - return m_renderHandler; + return RenderHandlerRef; }; // Getter for lifespan @@ -69,61 +69,61 @@ class BrowserClient : public CefClient, public CefLifeSpanHandler, public CefDow return this; } - virtual bool OnProcessMessageReceived(CefRefPtr browser, - CefRefPtr frame, - CefProcessId source_process, - CefRefPtr message) override; + virtual bool OnProcessMessageReceived(CefRefPtr Browser, + CefRefPtr Frame, + CefProcessId SourceProcess, + CefRefPtr Message) override; - virtual void OnUncaughtException(CefRefPtr browser, - CefRefPtr frame, - CefRefPtr context, - CefRefPtr exception, - CefRefPtr stackTrace); + virtual void OnUncaughtException(CefRefPtr Browser, + CefRefPtr Frame, + CefRefPtr Context, + CefRefPtr Exception, + CefRefPtr StackTrace); - void SetEventEmitter(FScriptEvent* emitter); - void SetLogEmitter(FLogEvent* emitter); + void SetEventEmitter(FScriptEvent* Emitter); + void SetLogEmitter(FLogEvent* Emitter); //CefDownloadHandler virtual void OnBeforeDownload( - CefRefPtr browser, - CefRefPtr download_item, - const CefString& suggested_name, - CefRefPtr callback) override; + CefRefPtr Browser, + CefRefPtr DownloadItem, + const CefString& SuggestedName, + CefRefPtr Callback) override; virtual void OnDownloadUpdated( - CefRefPtr browser, - CefRefPtr download_item, - CefRefPtr callback) override; + CefRefPtr Browser, + CefRefPtr DownloadItem, + CefRefPtr Callback) override; //CefLifeSpanHandler - virtual bool OnBeforePopup(CefRefPtr browser, - CefRefPtr frame, - const CefString& target_url, - const CefString& target_frame_name, - WindowOpenDisposition target_disposition, - bool user_gesture, - const CefPopupFeatures& popupFeatures, - CefWindowInfo& windowInfo, - CefRefPtr& client, - CefBrowserSettings& settings, - CefRefPtr& extra_info, - bool* no_javascript_access) { + virtual bool OnBeforePopup(CefRefPtr Browser, + CefRefPtr Frame, + const CefString& TargetUrl, + const CefString& TargetFrameName, + WindowOpenDisposition TargetDisposition, + bool UserGesture, + const CefPopupFeatures& PopupFeatures, + CefWindowInfo& WindowInfo, + CefRefPtr& Client, + CefBrowserSettings& Settings, + CefRefPtr& ExtraInfo, + bool* NoJavascriptAccess) { return false; } // Lifespan methods - void OnAfterCreated(CefRefPtr browser) override; - void OnBeforeClose(CefRefPtr browser) override; + void OnAfterCreated(CefRefPtr Browser) override; + void OnBeforeClose(CefRefPtr Browser) override; - virtual bool OnConsoleMessage(CefRefPtr browser, - cef_log_severity_t level, - const CefString& message, - const CefString& source, - int line) override; + virtual bool OnConsoleMessage(CefRefPtr Browser, + cef_log_severity_t Level, + const CefString& Message, + const CefString& Source, + int Line) override; - virtual void OnFullscreenModeChange(CefRefPtr< CefBrowser > browser, bool fullscreen) override; + virtual void OnFullscreenModeChange(CefRefPtr< CefBrowser > Browser, bool Fullscreen) override; - virtual void OnTitleChange(CefRefPtr< CefBrowser > browser, const CefString& title); + virtual void OnTitleChange(CefRefPtr< CefBrowser > Browser, const CefString& Title); CefRefPtr GetCEFBrowser(); diff --git a/Source/BluLoader/BluLoader.Build.cs b/Source/BluLoader/BluLoader.Build.cs index 3587202..f6b2e3f 100644 --- a/Source/BluLoader/BluLoader.Build.cs +++ b/Source/BluLoader/BluLoader.Build.cs @@ -6,8 +6,7 @@ public class BluLoader : ModuleRules { public BluLoader(ReadOnlyTargetRules Target) : base(Target) { - - PublicDependencyModuleNames.AddRange( + PublicDependencyModuleNames.AddRange( new string[] { "Core", From 17c48d2d6f634d8490a8bf05aeff20dc91cbd1e9 Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 15:41:04 -0700 Subject: [PATCH 34/51] misc cleanup --- Source/Blu/Private/BluEye.cpp | 24 ++++++++---------------- Source/Blu/Public/BluEye.h | 8 ++------ 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index 124f5bb..b01de7a 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -269,14 +269,6 @@ float UBluEye::GetZoom() return Browser->GetHost()->GetZoomLevel(); } -void UBluEye::Test() -{ - /*CefRefPtr visitor; - browser->GetHost->GetNavigationEntries(visitor, false);*/ - - //for (auto in visitor) -} - void UBluEye::DownloadFile(const FString& fileUrl) { Browser->GetHost()->StartDownload(*fileUrl); @@ -481,8 +473,8 @@ void UBluEye::TriggerMouseWheel(const float MouseWheelDelta, const FVector2D& po void UBluEye::KeyDown(FKeyEvent InKey) { - processKeyMods(InKey); - processKeyCode(InKey); + ProcessKeyMods(InKey); + ProcessKeyCode(InKey); KeyEvent.type = KEYEVENT_KEYDOWN; Browser->GetHost()->SendKeyEvent(KeyEvent); @@ -492,8 +484,8 @@ void UBluEye::KeyDown(FKeyEvent InKey) void UBluEye::KeyUp(FKeyEvent InKey) { - processKeyMods(InKey); - processKeyCode(InKey); + ProcessKeyMods(InKey); + ProcessKeyCode(InKey); KeyEvent.type = KEYEVENT_KEYUP; Browser->GetHost()->SendKeyEvent(KeyEvent); @@ -509,7 +501,7 @@ void UBluEye::KeyPress(FKeyEvent InKey) } -void UBluEye::processKeyCode(FKeyEvent InKey) +void UBluEye::ProcessKeyCode(FKeyEvent InKey) { KeyEvent.native_key_code = InKey.GetKeyCode(); KeyEvent.windows_key_code = InKey.GetKeyCode(); @@ -519,7 +511,7 @@ void UBluEye::CharKeyInput(FCharacterEvent CharEvent) { // Process keymods like usual - processKeyMods(CharEvent); + ProcessKeyMods(CharEvent); // Below char input needs some special treatment, se we can't use the normal key down/up methods @@ -536,7 +528,7 @@ void UBluEye::CharKeyInput(FCharacterEvent CharEvent) void UBluEye::CharKeyDownUp(FCharacterEvent CharEvent) { // Process keymods like usual - processKeyMods(CharEvent); + ProcessKeyMods(CharEvent); // Below char input needs some special treatment, se we can't use the normal key down/up methods @@ -600,7 +592,7 @@ void UBluEye::SpecialKeyPress(EBluSpecialKeys key, bool LeftShiftDown, } -void UBluEye::processKeyMods(FInputEvent InKey) +void UBluEye::ProcessKeyMods(FInputEvent InKey) { int mods = 0; diff --git a/Source/Blu/Public/BluEye.h b/Source/Blu/Public/BluEye.h index db79e8a..7b2a982 100644 --- a/Source/Blu/Public/BluEye.h +++ b/Source/Blu/Public/BluEye.h @@ -91,10 +91,6 @@ class BLU_API UBluEye : public UObject UFUNCTION(BlueprintPure, Category = "Blu") float GetZoom(); - //Not ready yet - //UFUNCTION(BlueprintCallable, Category = "Blu Test") - void Test(); - /** Download a file */ UFUNCTION(BlueprintCallable, Category = "Blu") void DownloadFile(const FString& fileUrl); @@ -232,10 +228,10 @@ class BLU_API UBluEye : public UObject void ResetMatInstance(); // Parse UE4 key events, helper - void processKeyCode(FKeyEvent InKey); + void ProcessKeyCode(FKeyEvent InKey); // Helper for processing key modifiers - void processKeyMods(FInputEvent InKey); + void ProcessKeyMods(FInputEvent InKey); // Store UI state in this UTexture2D UPROPERTY() From b977cf40c18ce12f3c3cede5a9bf0a78d9d22c22 Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 15:42:10 -0700 Subject: [PATCH 35/51] a few missing cases --- Source/Blu/Private/Blu.cpp | 13 ++++++------- Source/Blu/Private/BluManager.cpp | 4 ++-- Source/Blu/Public/BluManager.h | 4 ++-- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/Source/Blu/Private/Blu.cpp b/Source/Blu/Private/Blu.cpp index e5d681e..e665fe6 100644 --- a/Source/Blu/Private/Blu.cpp +++ b/Source/Blu/Private/Blu.cpp @@ -11,10 +11,10 @@ class FBlu : public IBlu FString ExecutablePath = FPaths::ConvertRelativePathToFull(FPaths::ProjectDir() + "Plugins/BLUI/ThirdParty/cef/"); // Setup the default settings for BluManager - BluManager::settings.windowless_rendering_enabled = true; - BluManager::settings.no_sandbox = true; - BluManager::settings.remote_debugging_port = 7777; - BluManager::settings.uncaught_exception_stack_size = 5; + BluManager::Settings.windowless_rendering_enabled = true; + BluManager::Settings.no_sandbox = true; + BluManager::Settings.remote_debugging_port = 7777; + BluManager::Settings.uncaught_exception_stack_size = 5; #if PLATFORM_LINUX ExecutablePath = "./blu_ue4_process"; @@ -29,16 +29,15 @@ class FBlu : public IBlu CefString realExePath = *ExecutablePath; // Set the sub-process path - CefString(&BluManager::settings.browser_subprocess_path).FromString(realExePath); + CefString(&BluManager::Settings.browser_subprocess_path).FromString(realExePath); // Set the cache path - CefString(&BluManager::settings.cache_path).FromString(GameDirCef); // Make a new manager instance CefRefPtr BluApp = new BluManager(); //CefExecuteProcess(BluManager::main_args, BluApp, NULL); - CefInitialize(BluManager::main_args, BluManager::settings, BluApp, NULL); + CefInitialize(BluManager::MainArgs, BluManager::Settings, BluApp, NULL); UE_LOG(LogBlu, Log, TEXT(" STATUS: Loaded")); } diff --git a/Source/Blu/Private/BluManager.cpp b/Source/Blu/Private/BluManager.cpp index 25ebc44..24b0f46 100644 --- a/Source/Blu/Private/BluManager.cpp +++ b/Source/Blu/Private/BluManager.cpp @@ -54,7 +54,7 @@ void BluManager::doBluMessageLoop() CefDoMessageLoopWork(); } -CefSettings BluManager::settings; -CefMainArgs BluManager::main_args; +CefSettings BluManager::Settings; +CefMainArgs BluManager::MainArgs; bool BluManager::CPURenderSettings = false; bool BluManager::AutoPlay = true; \ No newline at end of file diff --git a/Source/Blu/Public/BluManager.h b/Source/Blu/Public/BluManager.h index dfe5d95..2316f7e 100644 --- a/Source/Blu/Public/BluManager.h +++ b/Source/Blu/Public/BluManager.h @@ -9,8 +9,8 @@ class BLU_API BluManager : public CefApp BluManager(); static void doBluMessageLoop(); - static CefSettings settings; - static CefMainArgs main_args; + static CefSettings Settings; + static CefMainArgs MainArgs; static bool CPURenderSettings; static bool AutoPlay; From e579bb0f88a870706037dbaa351d1a013f8ef74b Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 15:42:33 -0700 Subject: [PATCH 36/51] Update Blu.cpp --- Source/Blu/Private/Blu.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Blu/Private/Blu.cpp b/Source/Blu/Private/Blu.cpp index e665fe6..7e3c9cb 100644 --- a/Source/Blu/Private/Blu.cpp +++ b/Source/Blu/Private/Blu.cpp @@ -32,6 +32,7 @@ class FBlu : public IBlu CefString(&BluManager::Settings.browser_subprocess_path).FromString(realExePath); // Set the cache path + CefString(&BluManager::Settings.cache_path).FromString(GameDirCef); // Make a new manager instance CefRefPtr BluApp = new BluManager(); From f4f8cd1512e4191fd003a19f614ed8559ffd9087 Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 15:48:45 -0700 Subject: [PATCH 37/51] Extra case cleanup --- .../Private/BluBluprintFunctionLibrary.cpp | 22 ++++++++-------- Source/Blu/Private/BluManager.cpp | 26 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Source/Blu/Private/BluBluprintFunctionLibrary.cpp b/Source/Blu/Private/BluBluprintFunctionLibrary.cpp index afe4243..feb207c 100644 --- a/Source/Blu/Private/BluBluprintFunctionLibrary.cpp +++ b/Source/Blu/Private/BluBluprintFunctionLibrary.cpp @@ -12,19 +12,19 @@ UBluEye* UBluBlueprintFunctionLibrary::NewBluEye(UObject* WorldContextObject) { UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull); - UBluEye* tempObject = Cast(StaticConstructObject_Internal(UBluEye::StaticClass())); + UBluEye* Eye = Cast(StaticConstructObject_Internal(UBluEye::StaticClass())); - return tempObject; + return Eye; } UBluJsonObj* UBluBlueprintFunctionLibrary::NewBluJSONObj(UObject* WorldContextObject) { - UBluJsonObj* tempObj = NewObject(GetTransientPackage(), UBluJsonObj::StaticClass()); - tempObj->init("{}"); + UBluJsonObj* JsonObj = NewObject(GetTransientPackage(), UBluJsonObj::StaticClass()); + JsonObj->init("{}"); - return tempObj; + return JsonObj; } @@ -36,10 +36,10 @@ void UBluBlueprintFunctionLibrary::RunBluEventLoop() UBluJsonObj* UBluBlueprintFunctionLibrary::ParseJSON(const FString& JSONString) { - UBluJsonObj* tempObj = NewObject(GetTransientPackage(), UBluJsonObj::StaticClass()); - tempObj->init(JSONString); + UBluJsonObj* JsonObj = NewObject(GetTransientPackage(), UBluJsonObj::StaticClass()); + JsonObj->init(JSONString); - return tempObj; + return JsonObj; } @@ -47,13 +47,13 @@ FString UBluBlueprintFunctionLibrary::JSONToString(UBluJsonObj *ObjectToParse) { // Create the JSON reader - FString returnString; - TSharedRef> writer = TJsonWriterFactory::Create(&returnString); + FString ReturnString; + TSharedRef> writer = TJsonWriterFactory::Create(&ReturnString); // Convert the JSON object to an FString FJsonSerializer::Serialize(ObjectToParse->getJsonObj().ToSharedRef(), writer); - return returnString; + return ReturnString; } diff --git a/Source/Blu/Private/BluManager.cpp b/Source/Blu/Private/BluManager.cpp index 24b0f46..7d27b6d 100644 --- a/Source/Blu/Private/BluManager.cpp +++ b/Source/Blu/Private/BluManager.cpp @@ -5,7 +5,7 @@ BluManager::BluManager() } void BluManager::OnBeforeCommandLineProcessing(const CefString& process_type, - CefRefPtr< CefCommandLine > command_line) + CefRefPtr< CefCommandLine > CommandLine) { ///////////////// @@ -17,31 +17,31 @@ void BluManager::OnBeforeCommandLineProcessing(const CefString& process_type, BluManager::CPURenderSettings = false; ///////////////// - command_line->AppendSwitch("off-screen-rendering-enabled"); - command_line->AppendSwitchWithValue("off-screen-frame-rate", "60"); - command_line->AppendSwitch("enable-font-antialiasing"); - command_line->AppendSwitch("enable-media-stream"); + CommandLine->AppendSwitch("off-screen-rendering-enabled"); + CommandLine->AppendSwitchWithValue("off-screen-frame-rate", "60"); + CommandLine->AppendSwitch("enable-font-antialiasing"); + CommandLine->AppendSwitch("enable-media-stream"); // Should we use the render settings that use less CPU? if (CPURenderSettings) { - command_line->AppendSwitch("disable-gpu"); - command_line->AppendSwitch("disable-gpu-compositing"); - command_line->AppendSwitch("enable-begin-frame-scheduling"); + CommandLine->AppendSwitch("disable-gpu"); + CommandLine->AppendSwitch("disable-gpu-compositing"); + CommandLine->AppendSwitch("enable-begin-frame-scheduling"); } else { // Enables things like CSS3 and WebGL - command_line->AppendSwitch("enable-gpu-rasterization"); - command_line->AppendSwitch("enable-webgl"); - command_line->AppendSwitch("disable-web-security"); + CommandLine->AppendSwitch("enable-gpu-rasterization"); + CommandLine->AppendSwitch("enable-webgl"); + CommandLine->AppendSwitch("disable-web-security"); } - command_line->AppendSwitchWithValue("enable-blink-features", "HTMLImports"); + CommandLine->AppendSwitchWithValue("enable-blink-features", "HTMLImports"); if (AutoPlay) { - command_line->AppendSwitchWithValue("autoplay-policy", "no-user-gesture-required"); + CommandLine->AppendSwitchWithValue("autoplay-policy", "no-user-gesture-required"); } // Append more command line options here if you want From 61964703da22ab2b488e7207e312f27dddff2165 Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 15:57:48 -0700 Subject: [PATCH 38/51] more cases --- Source/Blu/Private/RenderHandler.cpp | 118 +++++++++++++-------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/Source/Blu/Private/RenderHandler.cpp b/Source/Blu/Private/RenderHandler.cpp index 5636f00..94aeeee 100644 --- a/Source/Blu/Private/RenderHandler.cpp +++ b/Source/Blu/Private/RenderHandler.cpp @@ -1,72 +1,72 @@ #include "RenderHandler.h" #include "BluEye.h" -RenderHandler::RenderHandler(int32 width, int32 height, UBluEye* ui) +RenderHandler::RenderHandler(int32 Width, int32 Height, UBluEye* UI) { - this->Width = width; - this->Height = height; - this->ParentUI = ui; + this->Width = Width; + this->Height = Height; + this->ParentUI = UI; } -void RenderHandler::GetViewRect(CefRefPtr browser, CefRect &rect) +void RenderHandler::GetViewRect(CefRefPtr Browser, CefRect &Rect) { - rect = CefRect(0, 0, Width, Height); + Rect = CefRect(0, 0, Width, Height); } -void RenderHandler::OnPaint(CefRefPtr browser, PaintElementType type, const RectList &dirtyRects, const void *buffer, int width, int height) +void RenderHandler::OnPaint(CefRefPtr Browser, PaintElementType Type, const RectList &DirtyRects, const void *Buffer, int InWidth, int InHeight) { - FUpdateTextureRegion2D *updateRegions = static_cast(FMemory::Malloc(sizeof(FUpdateTextureRegion2D) * dirtyRects.size())); + FUpdateTextureRegion2D *UpdateRegions = static_cast(FMemory::Malloc(sizeof(FUpdateTextureRegion2D) * DirtyRects.size())); - int current = 0; - for (auto dirtyRect : dirtyRects) + int Current = 0; + for (auto DirtyRect : DirtyRects) { - updateRegions[current].DestX = updateRegions[current].SrcX = dirtyRect.x; - updateRegions[current].DestY = updateRegions[current].SrcY = dirtyRect.y; - updateRegions[current].Height = dirtyRect.height; - updateRegions[current].Width = dirtyRect.width; + UpdateRegions[Current].DestX = UpdateRegions[Current].SrcX = DirtyRect.x; + UpdateRegions[Current].DestY = UpdateRegions[Current].SrcY = DirtyRect.y; + UpdateRegions[Current].Height = DirtyRect.height; + UpdateRegions[Current].Width = DirtyRect.width; - current++; + Current++; } // Trigger our parent UIs Texture to update - ParentUI->TextureUpdate(buffer, updateRegions, dirtyRects.size()); + ParentUI->TextureUpdate(Buffer, UpdateRegions, DirtyRects.size()); } -void BrowserClient::OnAfterCreated(CefRefPtr browser) +void BrowserClient::OnAfterCreated(CefRefPtr Browser) { //CEF_REQUIRE_UI_THREAD(); if (!BrowserRef.get()) { // Keep a reference to the main browser. - BrowserRef = browser; - BrowserId = browser->GetIdentifier(); + BrowserRef = Browser; + BrowserId = Browser->GetIdentifier(); } } -void BrowserClient::OnBeforeClose(CefRefPtr browser) +void BrowserClient::OnBeforeClose(CefRefPtr Browser) { //CEF_REQUIRE_UI_THREAD(); - if (BrowserId == browser->GetIdentifier()) + if (BrowserId == Browser->GetIdentifier()) { BrowserRef = NULL; } } -bool BrowserClient::OnConsoleMessage(CefRefPtr browser, cef_log_severity_t level, const CefString& message, const CefString& source, int line) +bool BrowserClient::OnConsoleMessage(CefRefPtr Browser, cef_log_severity_t Level, const CefString& Message, const CefString& source, int line) { - FString LogMessage = FString(message.c_str()); + FString LogMessage = FString(Message.c_str()); LogEmitter->Broadcast(LogMessage); return true; } -void BrowserClient::OnFullscreenModeChange(CefRefPtr< CefBrowser > browser, bool fullscreen) +void BrowserClient::OnFullscreenModeChange(CefRefPtr< CefBrowser > Browser, bool Fullscreen) { - UE_LOG(LogTemp, Log, TEXT("Changed to Fullscreen: %d"), fullscreen); + UE_LOG(LogTemp, Log, TEXT("Changed to Fullscreen: %d"), Fullscreen); } -void BrowserClient::OnTitleChange(CefRefPtr< CefBrowser > browser, const CefString& title) +void BrowserClient::OnTitleChange(CefRefPtr< CefBrowser > Browser, const CefString& Title) { - FString TitleMessage = FString(title.c_str()); + FString TitleMessage = FString(Title.c_str()); LogEmitter->Broadcast(TitleMessage); } @@ -75,43 +75,43 @@ CefRefPtr BrowserClient::GetCEFBrowser() return BrowserRef; } -bool BrowserClient::OnProcessMessageReceived(CefRefPtr browser, CefRefPtr frame, CefProcessId source_process, CefRefPtr message) +bool BrowserClient::OnProcessMessageReceived(CefRefPtr Browser, CefRefPtr Frame, CefProcessId SourceProcess, CefRefPtr Message) { - FString data; - FString name = FString(UTF8_TO_TCHAR(message->GetArgumentList()->GetString(0).ToString().c_str())); - FString type = FString(UTF8_TO_TCHAR(message->GetArgumentList()->GetString(2).ToString().c_str())); - FString data_type = FString(UTF8_TO_TCHAR(message->GetArgumentList()->GetString(3).ToString().c_str())); + FString Data; + FString Name = FString(UTF8_TO_TCHAR(Message->GetArgumentList()->GetString(0).ToString().c_str())); + FString Type = FString(UTF8_TO_TCHAR(Message->GetArgumentList()->GetString(2).ToString().c_str())); + FString DataType = FString(UTF8_TO_TCHAR(Message->GetArgumentList()->GetString(3).ToString().c_str())); - if (type == "js_event") + if (Type == "js_event") { // Check the datatype - if (data_type == "bool") - data = message->GetArgumentList()->GetBool(1) ? TEXT("true") : TEXT("false"); - else if (data_type == "int") - data = FString::FromInt(message->GetArgumentList()->GetInt(1)); - else if (data_type == "string") - data = FString(UTF8_TO_TCHAR(message->GetArgumentList()->GetString(1).ToString().c_str())); - else if (data_type == "double") - data = FString::SanitizeFloat(message->GetArgumentList()->GetDouble(1)); + if (DataType == "bool") + Data = Message->GetArgumentList()->GetBool(1) ? TEXT("true") : TEXT("false"); + else if (DataType == "int") + Data = FString::FromInt(Message->GetArgumentList()->GetInt(1)); + else if (DataType == "string") + Data = FString(UTF8_TO_TCHAR(Message->GetArgumentList()->GetString(1).ToString().c_str())); + else if (DataType == "double") + Data = FString::SanitizeFloat(Message->GetArgumentList()->GetDouble(1)); - EventEmitter->Broadcast(name, data); + EventEmitter->Broadcast(Name, Data); } return true; } -void BrowserClient::OnUncaughtException(CefRefPtr browser, CefRefPtr frame, CefRefPtr context, CefRefPtr exception, CefRefPtr stackTrace) +void BrowserClient::OnUncaughtException(CefRefPtr Browser, CefRefPtr Frame, CefRefPtr Context, CefRefPtr Exception, CefRefPtr StackTrace) { - FString ErrorMessage = FString(exception->GetMessage().c_str()); + FString ErrorMessage = FString(Exception->GetMessage().c_str()); UE_LOG(LogClass, Warning, TEXT("%s"), *ErrorMessage); } //The path slashes have to be reversed to work with CEF -FString ReversePathSlashes(FString forwardPath) +FString ReversePathSlashes(FString ForwardPath) { - return forwardPath.Replace(TEXT("/"), TEXT("\\")); + return ForwardPath.Replace(TEXT("/"), TEXT("\\")); } FString UtilityBLUIDownloadsFolder() { @@ -119,31 +119,31 @@ FString UtilityBLUIDownloadsFolder() } -void BrowserClient::SetEventEmitter(FScriptEvent* emitter) +void BrowserClient::SetEventEmitter(FScriptEvent* Emitter) { - this->EventEmitter = emitter; + this->EventEmitter = Emitter; } -void BrowserClient::SetLogEmitter(FLogEvent* emitter) +void BrowserClient::SetLogEmitter(FLogEvent* Emitter) { - this->LogEmitter = emitter; + this->LogEmitter = Emitter; } void BrowserClient::OnBeforeDownload( - CefRefPtr browser, - CefRefPtr download_item, - const CefString & suggested_name, - CefRefPtr callback) + CefRefPtr Browser, + CefRefPtr DownloadItem, + const CefString & SuggestedName, + CefRefPtr Callback) { - UNREFERENCED_PARAMETER(browser); - UNREFERENCED_PARAMETER(download_item); + UNREFERENCED_PARAMETER(Browser); + UNREFERENCED_PARAMETER(DownloadItem); //We use this concatenation method to mix c_str with regular FString and then convert the result back to c_str - FString downloadPath = UtilityBLUIDownloadsFolder() + FString(suggested_name.c_str()); + FString DownloadPath = UtilityBLUIDownloadsFolder() + FString(SuggestedName.c_str()); - callback->Continue(*downloadPath, false); //don't show the download dialog, just go for it + Callback->Continue(*DownloadPath, false); //don't show the download dialog, just go for it - UE_LOG(LogClass, Log, TEXT("Downloading file for path %s"), *downloadPath); + UE_LOG(LogClass, Log, TEXT("Downloading file for path %s"), *DownloadPath); } void BrowserClient::OnDownloadUpdated( From f6c1bbf90e117bf76ddaca2c3e4b2c3265f5b3ef Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 16:04:01 -0700 Subject: [PATCH 39/51] cleanup of jsonobj and other cases --- BLUI.uplugin | 2 +- .../Private/BluBluprintFunctionLibrary.cpp | 6 +- Source/Blu/Private/BluJsonObj.cpp | 152 +++++++----------- Source/Blu/Public/BluJsonObj.h | 56 ++++--- 4 files changed, 92 insertions(+), 124 deletions(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index ff67723..e7cf956 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -5,7 +5,7 @@ "VersionName": "3.9.0", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", - "CreatedBy": "Aaron M. Shea & Contributors", + "CreatedBy": "Aaron M. Shea, Getnamo, & Contributors", "CreatedByURL": "github.com/aaronShea", "DocsURL": "https://github.com/getnamo/BLUI", "EnabledByDefault" : true, diff --git a/Source/Blu/Private/BluBluprintFunctionLibrary.cpp b/Source/Blu/Private/BluBluprintFunctionLibrary.cpp index feb207c..731be8f 100644 --- a/Source/Blu/Private/BluBluprintFunctionLibrary.cpp +++ b/Source/Blu/Private/BluBluprintFunctionLibrary.cpp @@ -22,7 +22,7 @@ UBluJsonObj* UBluBlueprintFunctionLibrary::NewBluJSONObj(UObject* WorldContextOb { UBluJsonObj* JsonObj = NewObject(GetTransientPackage(), UBluJsonObj::StaticClass()); - JsonObj->init("{}"); + JsonObj->Init("{}"); return JsonObj; @@ -37,7 +37,7 @@ UBluJsonObj* UBluBlueprintFunctionLibrary::ParseJSON(const FString& JSONString) { UBluJsonObj* JsonObj = NewObject(GetTransientPackage(), UBluJsonObj::StaticClass()); - JsonObj->init(JSONString); + JsonObj->Init(JSONString); return JsonObj; @@ -51,7 +51,7 @@ FString UBluBlueprintFunctionLibrary::JSONToString(UBluJsonObj *ObjectToParse) TSharedRef> writer = TJsonWriterFactory::Create(&ReturnString); // Convert the JSON object to an FString - FJsonSerializer::Serialize(ObjectToParse->getJsonObj().ToSharedRef(), writer); + FJsonSerializer::Serialize(ObjectToParse->GetJsonObj().ToSharedRef(), writer); return ReturnString; diff --git a/Source/Blu/Private/BluJsonObj.cpp b/Source/Blu/Private/BluJsonObj.cpp index 31775cc..7b35ffc 100644 --- a/Source/Blu/Private/BluJsonObj.cpp +++ b/Source/Blu/Private/BluJsonObj.cpp @@ -7,207 +7,177 @@ UBluJsonObj::UBluJsonObj(const class FObjectInitializer& PCIP) } -void UBluJsonObj::init(const FString &StringData) +void UBluJsonObj::Init(const FString &StringData) { - StrData = *StringData; TSharedRef> JsonReader = TJsonReaderFactory::Create(StringData); - doParseJson(JsonReader); - + DoParseJson(JsonReader); } -FString UBluJsonObj::getStringValue(const FString &index) +FString UBluJsonObj::GetStringValue(const FString& Index) { - - return JsonParsed->GetStringField(index); - + return JsonParsed->GetStringField(Index); } -bool UBluJsonObj::getBooleanValue(const FString &index) +bool UBluJsonObj::GetBooleanValue(const FString &Index) { - - return JsonParsed->GetBoolField(index); - + return JsonParsed->GetBoolField(Index); } -float UBluJsonObj::getNumValue(const FString &index) +float UBluJsonObj::GetNumValue(const FString &Index) { - - return JsonParsed->GetNumberField(index); - + return JsonParsed->GetNumberField(Index); } -UBluJsonObj* UBluJsonObj::getNestedObject(const FString &index) +UBluJsonObj* UBluJsonObj::GetNestedObject(const FString &Index) { - - TSharedPtr newJson = JsonParsed->GetObjectField(index); + TSharedPtr newJson = JsonParsed->GetObjectField(Index); if (!newJson.IsValid()) { return nullptr; } - // Make our new temp obj - UBluJsonObj* tempObj = NewObject(GetTransientPackage(), UBluJsonObj::StaticClass()); - tempObj->setJsonObj(newJson); + // Make our new Temp obj + UBluJsonObj* TempObj = NewObject(GetTransientPackage(), UBluJsonObj::StaticClass()); + TempObj->SetJsonObj(newJson); // return it - return tempObj; - + return TempObj; } -TArray UBluJsonObj::getNumArray(const FString &index) +TArray UBluJsonObj::GetNumArray(const FString &Index) { + TArray Temp; - TArray temp; - - for (TSharedPtr val : JsonParsed->GetArrayField(index)) + for (TSharedPtr Val : JsonParsed->GetArrayField(Index)) { - temp.Add(val->AsNumber()); + Temp.Add(Val->AsNumber()); } - return temp; - + return Temp; } -TArray UBluJsonObj::getBooleanArray(const FString &index) +TArray UBluJsonObj::GetBooleanArray(const FString &Index) { + TArray Temp; - TArray temp; - - for (TSharedPtr val : JsonParsed->GetArrayField(index)) + for (TSharedPtr Val : JsonParsed->GetArrayField(Index)) { - temp.Add(val->AsBool()); + Temp.Add(Val->AsBool()); } - return temp; - + return Temp; } -TArray UBluJsonObj::getStringArray(const FString &index) +TArray UBluJsonObj::GetStringArray(const FString &Index) { + TArray Temp; - TArray temp; - - for (TSharedPtr val : JsonParsed->GetArrayField(index)) + for (TSharedPtr Val : JsonParsed->GetArrayField(Index)) { - temp.Add(val->AsString()); + Temp.Add(Val->AsString()); } - return temp; - + return Temp; } -void UBluJsonObj::setStringValue(const FString &value, const FString &index) +void UBluJsonObj::SetStringValue(const FString &Value, const FString &Index) { - - JsonParsed->SetStringField(index, value); - + JsonParsed->SetStringField(Index, Value); } -void UBluJsonObj::setNumValue(const float value, const FString &index) +void UBluJsonObj::SetNumValue(const float Value, const FString &Index) { - - JsonParsed->SetNumberField(index, value); - + JsonParsed->SetNumberField(Index, Value); } -void UBluJsonObj::setBooleanValue(const bool value, const FString &index) +void UBluJsonObj::SetBooleanValue(const bool Value, const FString &Index) { - - JsonParsed->SetBoolField(index, value); - + JsonParsed->SetBoolField(Index, Value); } -void UBluJsonObj::setNestedObject(UBluJsonObj *value, const FString &index) +void UBluJsonObj::SetNestedObject(UBluJsonObj *Value, const FString &Index) { - - JsonParsed->SetObjectField(index, value->getJsonObj()); - + JsonParsed->SetObjectField(Index, Value->GetJsonObj()); } -void UBluJsonObj::setJsonObj(TSharedPtr NewJson) +void UBluJsonObj::SetJsonObj(TSharedPtr NewJson) { - // Set our new stored JSON object JsonParsed = NewJson; - } -TSharedPtr UBluJsonObj::getJsonObj() +TSharedPtr UBluJsonObj::GetJsonObj() { - return JsonParsed; - } -void UBluJsonObj::doParseJson(TSharedRef> JsonReader) +void UBluJsonObj::DoParseJson(TSharedRef> JsonReader) { - if (!FJsonSerializer::Deserialize(JsonReader, JsonParsed)) { UE_LOG(LogBlu, Warning, TEXT("JSON STRING FAILED TO PARSE! WILL DEFAULT TO EMPTY OBJECT {}")); // Make an empty json object to prevent crashing - doParseJson(TJsonReaderFactory::Create("{}")); + DoParseJson(TJsonReaderFactory::Create("{}")); } - } // CUSTOM ADDED START -void UBluJsonObj::setStringArray(const TArray &value, const FString &index) +void UBluJsonObj::SetStringArray(const TArray &Value, const FString &Index) { - TArray> valueArray; + TArray> ValueArray; - for (FString val : value) + for (FString Val : Value) { - valueArray.Add(MakeShareable(new FJsonValueString(val))); + ValueArray.Add(MakeShareable(new FJsonValueString(Val))); } - JsonParsed->SetArrayField(index, valueArray); + JsonParsed->SetArrayField(Index, ValueArray); } -void UBluJsonObj::setBooleanArray(const TArray &value, const FString &index) +void UBluJsonObj::SetBooleanArray(const TArray &Value, const FString &Index) { - TArray> valueArray; + TArray> ValueArray; - for (bool val : value) + for (bool Val : Value) { - valueArray.Add(MakeShareable(new FJsonValueBoolean(val))); + ValueArray.Add(MakeShareable(new FJsonValueBoolean(Val))); } - JsonParsed->SetArrayField(index, valueArray); + JsonParsed->SetArrayField(Index, ValueArray); } -void UBluJsonObj::setNumArray(const TArray &value, const FString &index) +void UBluJsonObj::SetNumArray(const TArray &Value, const FString &Index) { - TArray> valueArray; + TArray> ValueArray; - for (float val : value) + for (float Val : Value) { - valueArray.Add(MakeShareable(new FJsonValueNumber(val))); + ValueArray.Add(MakeShareable(new FJsonValueNumber(Val))); } - JsonParsed->SetArrayField(index, valueArray); + JsonParsed->SetArrayField(Index, ValueArray); } -void UBluJsonObj::setObjectArray(const TArray &value, const FString &index) +void UBluJsonObj::SetObjectArray(const TArray &Value, const FString &Index) { - TArray> valueArray; + TArray> ValueArray; - for (UBluJsonObj* val : value) + for (UBluJsonObj* Val : Value) { - valueArray.Add(MakeShareable(new FJsonValueObject(val->getJsonObj()))); + ValueArray.Add(MakeShareable(new FJsonValueObject(Val->GetJsonObj()))); } - JsonParsed->SetArrayField(index, valueArray); + JsonParsed->SetArrayField(Index, ValueArray); } // CUSTOM ADDED END diff --git a/Source/Blu/Public/BluJsonObj.h b/Source/Blu/Public/BluJsonObj.h index 15737cf..a18a9d3 100644 --- a/Source/Blu/Public/BluJsonObj.h +++ b/Source/Blu/Public/BluJsonObj.h @@ -12,71 +12,71 @@ class BLU_API UBluJsonObj : public UObject //// Get Values //// - /* Gets a String value for the key given */ + /* Gets a String Value for the key given */ UFUNCTION(BlueprintCallable, Category = "Blu") - FString getStringValue(const FString &index); + FString GetStringValue(const FString &Index); - /* Gets a Numerical value for the key given */ + /* Gets a Numerical Value for the key given */ UFUNCTION(BlueprintCallable, Category = "Blu") - float getNumValue(const FString &index); + float GetNumValue(const FString &Index); - /* Gets a Boolean value for the key given */ + /* Gets a Boolean Value for the key given */ UFUNCTION(BlueprintCallable, Category = "Blu") - bool getBooleanValue(const FString &index); + bool GetBooleanValue(const FString &Index); - /* Gets a Nested JSON Object value for the key given */ + /* Gets a Nested JSON Object Value for the key given */ UFUNCTION(BlueprintCallable, Category = "Blu") - UBluJsonObj* getNestedObject(const FString &index); + UBluJsonObj* GetNestedObject(const FString &Index); //// Get Array Values //// /* Gets an Array of floats or numbers for the key given */ UFUNCTION(BlueprintCallable, Category = "Blu") - TArray getNumArray(const FString &index); + TArray GetNumArray(const FString &Index); /* Gets an Array of booleans for the key given */ UFUNCTION(BlueprintCallable, Category = "Blu") - TArray getBooleanArray(const FString &index); + TArray GetBooleanArray(const FString &Index); /* Gets an Array of strings for the key given */ UFUNCTION(BlueprintCallable, Category = "Blu") - TArray getStringArray(const FString &index); + TArray GetStringArray(const FString &Index); //// Set Values //// - /* Sets or Adds a String value to this JSON object */ + /* Sets or Adds a String Value to this JSON object */ UFUNCTION(BlueprintCallable, Category = "Blu") - void setStringValue(const FString &value, const FString &index); + void SetStringValue(const FString &Value, const FString &Index); - /* Sets or Adds a Numerical value to this JSON object */ + /* Sets or Adds a Numerical Value to this JSON object */ UFUNCTION(BlueprintCallable, Category = "Blu") - void setNumValue(const float value, const FString &index); + void SetNumValue(const float Value, const FString &Index); - /* Sets or Adds a Boolean value to this JSON object */ + /* Sets or Adds a Boolean Value to this JSON object */ UFUNCTION(BlueprintCallable, Category = "Blu") - void setBooleanValue(const bool value, const FString &index); + void SetBooleanValue(const bool Value, const FString &Index); - /* Sets or Adds a Nested JSON Object value to this JSON object */ + /* Sets or Adds a Nested JSON Object Value to this JSON object */ UFUNCTION(BlueprintCallable, Category = "Blu") - void setNestedObject(UBluJsonObj *value, const FString &index); + void SetNestedObject(UBluJsonObj *Value, const FString &Index); - void init(const FString &dataString); - void setJsonObj(TSharedPtr NewJson); + void Init(const FString &dataString); + void SetJsonObj(TSharedPtr NewJson); - TSharedPtr getJsonObj(); + TSharedPtr GetJsonObj(); // CUSTOM ADDED START UFUNCTION(BlueprintCallable, Category = "Blu") - void setStringArray(const TArray &value, const FString &index); + void SetStringArray(const TArray &Value, const FString &Index); UFUNCTION(BlueprintCallable, Category = "Blu") - void setBooleanArray(const TArray &value, const FString &index); + void SetBooleanArray(const TArray &Value, const FString &Index); UFUNCTION(BlueprintCallable, Category = "Blu") - void setNumArray(const TArray &value, const FString &index); + void SetNumArray(const TArray &Value, const FString &Index); UFUNCTION(BlueprintCallable, Category = "Blu") - void setObjectArray(const TArray &value, const FString &index); + void SetObjectArray(const TArray &Value, const FString &Index); // CUSTOM ADDED END private: @@ -84,7 +84,5 @@ class BLU_API UBluJsonObj : public UObject FString StrData; TSharedPtr JsonParsed; - void doParseJson(TSharedRef> JsonReader); - - + void DoParseJson(TSharedRef> JsonReader); }; \ No newline at end of file From 6823c4eb86b62439fea836562ad0ff88936c9ec5 Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 16:10:51 -0700 Subject: [PATCH 40/51] more cleanup and move browser to protected --- Source/Blu/Private/BluEye.cpp | 105 +++++++++++++++--------------- Source/Blu/Private/BluJsonObj.cpp | 6 +- Source/Blu/Public/BluEye.h | 3 +- 3 files changed, 56 insertions(+), 58 deletions(-) diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index b01de7a..aef704e 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -48,8 +48,8 @@ void UBluEye::Init() BrowserSettings.universal_access_from_file_urls = STATE_ENABLED; BrowserSettings.file_access_from_file_urls = STATE_ENABLED; - //browserSettings.web_security = STATE_DISABLED; - //browserSettings.fullscreen_enabled = true; + //BrowserSettings.web_security = STATE_DISABLED; + //BrowserSettings.fullscreen_enabled = true; Info.width = Settings.Width; Info.height = Settings.Height; @@ -89,7 +89,6 @@ void UBluEye::Init() ClientHandler->SetLogEmitter(&LogEventEmitter); UE_LOG(LogBlu, Log, TEXT("Component Initialized")); - CefString str = *DefaultURL; UE_LOG(LogBlu, Log, TEXT("Loading URL: %s"), *DefaultURL); // Load the default URL @@ -188,31 +187,31 @@ void UBluEye::TextureUpdate(const void *buffer, FUpdateTextureRegion2D *updateRe } -void UBluEye::ExecuteJS(const FString& code) +void UBluEye::ExecuteJS(const FString& Code) { - CefString codeStr = *code; - Browser->GetMainFrame()->ExecuteJavaScript(codeStr, "", 0); + CefString CodeStr = *Code; + Browser->GetMainFrame()->ExecuteJavaScript(CodeStr, "", 0); } void UBluEye::ExecuteJSMethodWithParams(const FString& methodName, const TArray params) { // Empty param string - FString paramString = "("; + FString ParamString = "("; // Build the param string for (FString param : params) { - paramString += param; - paramString += ","; + ParamString += param; + ParamString += ","; } // Remove the last , it's not needed - paramString.RemoveFromEnd(","); - paramString += ");"; + ParamString.RemoveFromEnd(","); + ParamString += ");"; // time to call the function - ExecuteJS(methodName + paramString); + ExecuteJS(methodName + ParamString); } void UBluEye::LoadURL(const FString& newURL) @@ -259,9 +258,9 @@ FString UBluEye::GetCurrentURL() return FString(Browser->GetMainFrame()->GetURL().c_str()); } -void UBluEye::SetZoom(const float scale /*= 1*/) +void UBluEye::SetZoom(const float Scale /*= 1*/) { - Browser->GetHost()->SetZoomLevel(scale); + Browser->GetHost()->SetZoomLevel(Scale); } float UBluEye::GetZoom() @@ -269,9 +268,9 @@ float UBluEye::GetZoom() return Browser->GetHost()->GetZoomLevel(); } -void UBluEye::DownloadFile(const FString& fileUrl) +void UBluEye::DownloadFile(const FString& FileUrl) { - Browser->GetHost()->StartDownload(*fileUrl); + Browser->GetHost()->StartDownload(*FileUrl); //Todo: ensure downloading works in some way, shape or form? } @@ -407,65 +406,65 @@ UBluEye* UBluEye::SetProperties(const int32 SetWidth, return this; } -void UBluEye::TriggerMouseMove(const FVector2D& pos, const float scale) +void UBluEye::TriggerMouseMove(const FVector2D& Pos, const float Scale) { - MouseEvent.x = pos.X / scale; - MouseEvent.y = pos.Y / scale; + MouseEvent.x = Pos.X / Scale; + MouseEvent.y = Pos.Y / Scale; Browser->GetHost()->SendFocusEvent(true); Browser->GetHost()->SendMouseMoveEvent(MouseEvent, false); } -void UBluEye::TriggerLeftClick(const FVector2D& pos, const float scale) +void UBluEye::TriggerLeftClick(const FVector2D& Pos, const float Scale) { - TriggerLeftMouseDown(pos, scale); - TriggerLeftMouseUp(pos, scale); + TriggerLeftMouseDown(Pos, Scale); + TriggerLeftMouseUp(Pos, Scale); } -void UBluEye::TriggerRightClick(const FVector2D& pos, const float scale) +void UBluEye::TriggerRightClick(const FVector2D& Pos, const float Scale) { - TriggerRightMouseDown(pos, scale); - TriggerRightMouseUp(pos, scale); + TriggerRightMouseDown(Pos, Scale); + TriggerRightMouseUp(Pos, Scale); } -void UBluEye::TriggerLeftMouseDown(const FVector2D& pos, const float scale) +void UBluEye::TriggerLeftMouseDown(const FVector2D& Pos, const float Scale) { - MouseEvent.x = pos.X / scale; - MouseEvent.y = pos.Y / scale; + MouseEvent.x = Pos.X / Scale; + MouseEvent.y = Pos.Y / Scale; Browser->GetHost()->SendMouseClickEvent(MouseEvent, MBT_LEFT, false, 1); } -void UBluEye::TriggerRightMouseDown(const FVector2D& pos, const float scale) +void UBluEye::TriggerRightMouseDown(const FVector2D& Pos, const float Scale) { - MouseEvent.x = pos.X / scale; - MouseEvent.y = pos.Y / scale; + MouseEvent.x = Pos.X / Scale; + MouseEvent.y = Pos.Y / Scale; Browser->GetHost()->SendMouseClickEvent(MouseEvent, MBT_RIGHT, false, 1); } -void UBluEye::TriggerLeftMouseUp(const FVector2D& pos, const float scale) +void UBluEye::TriggerLeftMouseUp(const FVector2D& Pos, const float Scale) { - MouseEvent.x = pos.X / scale; - MouseEvent.y = pos.Y / scale; + MouseEvent.x = Pos.X / Scale; + MouseEvent.y = Pos.Y / Scale; Browser->GetHost()->SendMouseClickEvent(MouseEvent, MBT_LEFT, true, 1); } -void UBluEye::TriggerRightMouseUp(const FVector2D& pos, const float scale) +void UBluEye::TriggerRightMouseUp(const FVector2D& Pos, const float Scale) { - MouseEvent.x = pos.X / scale; - MouseEvent.y = pos.Y / scale; + MouseEvent.x = Pos.X / Scale; + MouseEvent.y = Pos.Y / Scale; Browser->GetHost()->SendMouseClickEvent(MouseEvent, MBT_RIGHT, true, 1); } -void UBluEye::TriggerMouseWheel(const float MouseWheelDelta, const FVector2D& pos, const float scale) +void UBluEye::TriggerMouseWheel(const float MouseWheelDelta, const FVector2D& Pos, const float Scale) { - MouseEvent.x = pos.X / scale; - MouseEvent.y = pos.Y / scale; + MouseEvent.x = Pos.X / Scale; + MouseEvent.y = Pos.Y / Scale; Browser->GetHost()->SendMouseWheelEvent(MouseEvent, MouseWheelDelta * 10, MouseWheelDelta * 10); } @@ -545,7 +544,7 @@ void UBluEye::CharKeyDownUp(FCharacterEvent CharEvent) Browser->GetHost()->SendKeyEvent(KeyEvent); } -void UBluEye::RawCharKeyPress(const FString charToPress, bool isRepeat, +void UBluEye::RawCharKeyPress(const FString CharToPress, bool isRepeat, bool LeftShiftDown, bool RightShiftDown, bool LeftControlDown, @@ -560,13 +559,13 @@ void UBluEye::RawCharKeyPress(const FString charToPress, bool isRepeat, FModifierKeysState* KeyState = new FModifierKeysState(LeftShiftDown, RightShiftDown, LeftControlDown, RightControlDown, LeftAltDown, RightAltDown, LeftCommandDown, RightCommandDown, CapsLocksOn); - FCharacterEvent* CharEvent = new FCharacterEvent(charToPress.GetCharArray()[0], *KeyState, 0, isRepeat); + FCharacterEvent* CharEvent = new FCharacterEvent(CharToPress.GetCharArray()[0], *KeyState, 0, isRepeat); CharKeyInput(*CharEvent); } -void UBluEye::SpecialKeyPress(EBluSpecialKeys key, bool LeftShiftDown, +void UBluEye::SpecialKeyPress(EBluSpecialKeys Key, bool LeftShiftDown, bool RightShiftDown, bool LeftControlDown, bool RightControlDown, @@ -577,15 +576,15 @@ void UBluEye::SpecialKeyPress(EBluSpecialKeys key, bool LeftShiftDown, bool CapsLocksOn) { - int32 keyValue = key; + int32 KeyValue = Key; - KeyEvent.windows_key_code = keyValue; - KeyEvent.native_key_code = keyValue; + KeyEvent.windows_key_code = KeyValue; + KeyEvent.native_key_code = KeyValue; KeyEvent.type = KEYEVENT_KEYDOWN; Browser->GetHost()->SendKeyEvent(KeyEvent); - KeyEvent.windows_key_code = keyValue; - KeyEvent.native_key_code = keyValue; + KeyEvent.windows_key_code = KeyValue; + KeyEvent.native_key_code = KeyValue; // bits 30 and 31 should be always 1 for WM_KEYUP KeyEvent.type = KEYEVENT_KEYUP; Browser->GetHost()->SendKeyEvent(KeyEvent); @@ -595,27 +594,27 @@ void UBluEye::SpecialKeyPress(EBluSpecialKeys key, bool LeftShiftDown, void UBluEye::ProcessKeyMods(FInputEvent InKey) { - int mods = 0; + int Mods = 0; // Test alt if (InKey.IsAltDown()) { - mods |= cef_event_flags_t::EVENTFLAG_ALT_DOWN; + Mods |= cef_event_flags_t::EVENTFLAG_ALT_DOWN; } else // Test control if (InKey.IsControlDown()) { - mods |= cef_event_flags_t::EVENTFLAG_CONTROL_DOWN; + Mods |= cef_event_flags_t::EVENTFLAG_CONTROL_DOWN; } else // Test shift if (InKey.IsShiftDown()) { - mods |= cef_event_flags_t::EVENTFLAG_SHIFT_DOWN; + Mods |= cef_event_flags_t::EVENTFLAG_SHIFT_DOWN; } - KeyEvent.modifiers = mods; + KeyEvent.modifiers = Mods; } diff --git a/Source/Blu/Private/BluJsonObj.cpp b/Source/Blu/Private/BluJsonObj.cpp index 7b35ffc..6dd88af 100644 --- a/Source/Blu/Private/BluJsonObj.cpp +++ b/Source/Blu/Private/BluJsonObj.cpp @@ -32,16 +32,16 @@ float UBluJsonObj::GetNumValue(const FString &Index) UBluJsonObj* UBluJsonObj::GetNestedObject(const FString &Index) { - TSharedPtr newJson = JsonParsed->GetObjectField(Index); + TSharedPtr NewJson = JsonParsed->GetObjectField(Index); - if (!newJson.IsValid()) + if (!NewJson.IsValid()) { return nullptr; } // Make our new Temp obj UBluJsonObj* TempObj = NewObject(GetTransientPackage(), UBluJsonObj::StaticClass()); - TempObj->SetJsonObj(newJson); + TempObj->SetJsonObj(NewJson); // return it return TempObj; diff --git a/Source/Blu/Public/BluEye.h b/Source/Blu/Public/BluEye.h index 7b2a982..4e1849f 100644 --- a/Source/Blu/Public/BluEye.h +++ b/Source/Blu/Public/BluEye.h @@ -211,14 +211,13 @@ class BLU_API UBluEye : public UObject void BeginDestroy() override; - CefRefPtr Browser; - protected: CefWindowInfo Info; CefRefPtr ClientHandler; CefBrowserSettings BrowserSettings; RenderHandler* Renderer; + CefRefPtr Browser; CefMouseEvent MouseEvent; CefKeyEvent KeyEvent; From d0b69ece6eb68ed1c3ed85b467f5675730d05aee Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 16:35:22 -0700 Subject: [PATCH 41/51] Remove manual tick requirement - BluEye will auto-spawn a global tick function to handle the message loop for the browser. - Will automatically close the event loop on stop --- Content/BluiWorldWidgetActorExample.uasset | Bin 186021 -> 178357 bytes .../Private/BluBluprintFunctionLibrary.cpp | 2 +- Source/Blu/Private/BluEye.cpp | 36 ++++++++++++++++++ Source/Blu/Private/BluManager.cpp | 2 +- Source/Blu/Public/BluEye.h | 8 ++++ Source/Blu/Public/BluManager.h | 6 +-- Source/Blu/Public/BluTypes.h | 14 +++++++ 7 files changed, 63 insertions(+), 5 deletions(-) diff --git a/Content/BluiWorldWidgetActorExample.uasset b/Content/BluiWorldWidgetActorExample.uasset index fdefd1384f415621ba1c1d0f3ddedc0deeb6bc1e..a7ba9bab2334cdda00a24203a5b85c6b70a513d9 100644 GIT binary patch literal 178357 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

MKS=5Ba-D_VTkZP(63Afi) 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 literal 186021 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 z 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 diff --git a/Source/Blu/Private/BluBluprintFunctionLibrary.cpp b/Source/Blu/Private/BluBluprintFunctionLibrary.cpp index 731be8f..bc36b9a 100644 --- a/Source/Blu/Private/BluBluprintFunctionLibrary.cpp +++ b/Source/Blu/Private/BluBluprintFunctionLibrary.cpp @@ -30,7 +30,7 @@ UBluJsonObj* UBluBlueprintFunctionLibrary::NewBluJSONObj(UObject* WorldContextOb void UBluBlueprintFunctionLibrary::RunBluEventLoop() { - BluManager::doBluMessageLoop(); + BluManager::DoBluMessageLoop(); } UBluJsonObj* UBluBlueprintFunctionLibrary::ParseJSON(const FString& JSONString) diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index aef704e..a079dbe 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -2,6 +2,8 @@ #include "BluEye.h" #include "RenderHandler.h" +FTickEventLoopData UBluEye::EventLoopData = FTickEventLoopData(); + FBluEyeSettings::FBluEyeSettings() { FrameRate = 60.f; @@ -95,6 +97,8 @@ void UBluEye::Init() LoadURL(DefaultURL); ResetTexture(); + //Instead of manually ticking, we now tick whenever one blu eye is created + SpawnTickEventLoopIfNeeded(); } void UBluEye::ResetTexture() @@ -618,6 +622,25 @@ void UBluEye::ProcessKeyMods(FInputEvent InKey) } +void UBluEye::SpawnTickEventLoopIfNeeded() +{ + if (!EventLoopData.DelegateHandle.IsValid()) + { + EventLoopData.DelegateHandle = FTicker::GetCoreTicker().AddTicker(FTickerDelegate::CreateLambda([](float DeltaTime) + { + if (EventLoopData.bShouldTickEventLoop) + { + //UE_LOG(LogTemp, Log, TEXT("Delta: %1.2f"), DeltaTime); + BluManager::DoBluMessageLoop(); + } + + return true; + })); + } + + EventLoopData.EyeCount++; +} + UTexture2D* UBluEye::GetTexture() const { if (!Texture) @@ -687,5 +710,18 @@ void UBluEye::BeginDestroy() DestroyTexture(); SetFlags(RF_BeginDestroyed); + + //Remove our auto-ticking setup + EventLoopData.EyeCount--; + if (EventLoopData.EyeCount <= 0) + { + FTicker::GetCoreTicker().RemoveTicker(EventLoopData.DelegateHandle); + EventLoopData.DelegateHandle = FDelegateHandle(); + } Super::BeginDestroy(); } + +void UBluEye::SetShouldTickEventLoop(bool ShouldTick /*= true*/) +{ + EventLoopData.bShouldTickEventLoop = ShouldTick; +} diff --git a/Source/Blu/Private/BluManager.cpp b/Source/Blu/Private/BluManager.cpp index 7d27b6d..e7b03d5 100644 --- a/Source/Blu/Private/BluManager.cpp +++ b/Source/Blu/Private/BluManager.cpp @@ -49,7 +49,7 @@ void BluManager::OnBeforeCommandLineProcessing(const CefString& process_type, } -void BluManager::doBluMessageLoop() +void BluManager::DoBluMessageLoop() { CefDoMessageLoopWork(); } diff --git a/Source/Blu/Public/BluEye.h b/Source/Blu/Public/BluEye.h index 4e1849f..9976cc9 100644 --- a/Source/Blu/Public/BluEye.h +++ b/Source/Blu/Public/BluEye.h @@ -211,6 +211,10 @@ class BLU_API UBluEye : public UObject void BeginDestroy() override; + /** Use this to pause the tick loop in the new system */ + UFUNCTION(BlueprintCallable, Category = "Blu") + static void SetShouldTickEventLoop(bool ShouldTick = true); + protected: CefWindowInfo Info; @@ -232,6 +236,10 @@ class BLU_API UBluEye : public UObject // Helper for processing key modifiers void ProcessKeyMods(FInputEvent InKey); + void SpawnTickEventLoopIfNeeded(); + + static FTickEventLoopData EventLoopData; + // Store UI state in this UTexture2D UPROPERTY() UTexture2D* Texture; diff --git a/Source/Blu/Public/BluManager.h b/Source/Blu/Public/BluManager.h index 2316f7e..d2c1488 100644 --- a/Source/Blu/Public/BluManager.h +++ b/Source/Blu/Public/BluManager.h @@ -8,14 +8,14 @@ class BLU_API BluManager : public CefApp BluManager(); - static void doBluMessageLoop(); + static void DoBluMessageLoop(); static CefSettings Settings; static CefMainArgs MainArgs; static bool CPURenderSettings; static bool AutoPlay; - virtual void OnBeforeCommandLineProcessing(const CefString& process_type, - CefRefPtr< CefCommandLine > command_line) override; + virtual void OnBeforeCommandLineProcessing(const CefString& ProcessType, + CefRefPtr< CefCommandLine > CommandLine) override; IMPLEMENT_REFCOUNTING(BluManager); }; diff --git a/Source/Blu/Public/BluTypes.h b/Source/Blu/Public/BluTypes.h index 1bc85a7..eda880d 100644 --- a/Source/Blu/Public/BluTypes.h +++ b/Source/Blu/Public/BluTypes.h @@ -3,6 +3,20 @@ #include "CoreMinimal.h" #include "BluTypes.generated.h" +struct FTickEventLoopData +{ + FDelegateHandle DelegateHandle; + int32 EyeCount; + bool bShouldTickEventLoop; + + FTickEventLoopData() + { + DelegateHandle = FDelegateHandle(); + EyeCount = 0; + bShouldTickEventLoop = true; + } +}; + struct FBluTextureParams { // Pointer to our Texture's resource From 81df570560c0900ff07298fec720ce836d7a71ed Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 16:40:28 -0700 Subject: [PATCH 42/51] cleanup example actors to no longer needing tick - remove some debug graph stuff that migrated there - bump to 4.0.0 as a clean break for 4.25 with this refactor --- BLUI.uplugin | 2 +- Content/BluTickActor.uasset | Bin 25230 -> 0 bytes Content/BluiWorldWidgetActorExample.uasset | Bin 178357 -> 67888 bytes 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 Content/BluTickActor.uasset diff --git a/BLUI.uplugin b/BLUI.uplugin index e7cf956..9ba8279 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "3.9.0", + "VersionName": "4.0.0", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea, Getnamo, & Contributors", diff --git a/Content/BluTickActor.uasset b/Content/BluTickActor.uasset deleted file mode 100644 index f620cff7277ea3b45694d7134f63573d418228b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25230 zcmeHQ33OCdn!Y6{dn+~|YNG`xh=hb}gsnA6RT2UL0!a`-43(;vq@Yr-sCoqimE(er z?bhwmn@b;uahcOf>x{HY+vBv3o^k2Xp4K_NI6aCB-JtfkW2>0?zkBch-m9utsj%3m zkK@Iv_ul{Cd;j(R_rEu{o{wF2=8yi;*VngpkPyD3ge-&U`|a-gU*B7M(+4AdU%I{K zk^15>1be;gxA%`)`mIwR+WP#x+ZP^~HJo67NWU>{YW+XFvhml)-L~()izW{t*xA-+ z&tDw8Kk)LH>u*f?C!FvNf<1n=5J%H>i5WNOGFWV)?2d;HcN{CksdQ}|NtI7j zh`-PkpJ68n@u$#p=ZV!1H9T_P>eWw=>%AGx(GGnL7NdnvOxZO{e4U=APj9QMn7-VI z8KIOhqoTO9N>&i!xy$obpk}h9w(a>GH#3RiRUHb(-=wKNhyofVwM}h}CAG11Yc#yR zCTy8W@%6KIE+gJWNlQ2xO;|vR^}h~p1d}e9kw`}4RzotB=oWilx-bakGCE);jkcv7 z>x{4^K5m?G7OBL>)y2D_q`oVvFK-;}0=LDJMkrPn5k-T)KlB(vC}w6nKl$7d{L~cc zFk<5F6O!%6GYD+gr{iHOYR1KyMQ5Kp447DKi5W3cqHpXUYrh6SG8yV^PMQfLY4wW6 z`(KNKqYkQPZVHlqW$V6ozxL)RfCHg;-9{scuEoF3?XDXufo4yS5w~j79UU>FIU0`} z5wW58^rmq+$Q994l}gCjdw#b`4H1?Nz8zX>=q5_Xhb|e%ew|{?p%p0(V8`vHYcZ8=t zE9;tO%(mQdgYUlzrterv_DMz~2Fovw`{+BX;ej2b{d6c6-C_jHo&=54xFzoSyIH@7 zTLeh^T_$O1|JIwHMBfZp66!I;b+cBEJkAAdF_Ts_-X+G2KIJ+1qcoeaHf_Eh+}gb> zaOvkCwSh4k+-meBVnk28_~S{B4<$^{=nSP}mbj$Pl*2(kx3?=l|KTrJ-w0>1!K4mb zw=5-Fx%8Lw?|@C+m2HKR?yg&L&lwn78ZXBv287u8>Yj}*L`#@_a=B?*;^)`==;%|N z7B-^2p>9e0ikjt(HMLE3;wM|TEx=&V{o1u;-*cP)Fdm}u7ipoPWr)X4U-AdUa~*ab@&)(6P<7zB&Ry|} z>X+Wf@XEo=olD%y9>qW1^ZAR2Ms;y3+1qSV{1f-B95GoDP50P-y6iW%Rm*xCiD4z> znmc`K;5Zan;uei(BWc9LhPZqC?t7s4y3Iy7Z5eGHMzRYbwcR} P<=Y$JwKeasA5 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 YrvAbOI)qdjHhp%1y;+;2+-#&C7DjO5{EcWM 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

MKS=5Ba-D_VTkZP(63Afi) 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 From 8fdf9bb6bcff7297a29557dae7f64aa1e644b48d Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 16:41:25 -0700 Subject: [PATCH 43/51] Update README.md --- builder/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/README.md b/builder/README.md index e88d9b1..277cf9c 100644 --- a/builder/README.md +++ b/builder/README.md @@ -1,4 +1,4 @@ -### BLUI Build Script +### BLUI CEF Chromium Build Script #### Windows Steps From adef631ca365b355776a53426565c54d8b6d958f Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 16:43:45 -0700 Subject: [PATCH 44/51] clarify the builder subfolder --- builder/README.md | 4 +++- builder/{builder.py => archived_builder.py} | 0 2 files changed, 3 insertions(+), 1 deletion(-) rename builder/{builder.py => archived_builder.py} (100%) diff --git a/builder/README.md b/builder/README.md index 277cf9c..8763130 100644 --- a/builder/README.md +++ b/builder/README.md @@ -1,6 +1,8 @@ ### BLUI CEF Chromium Build Script -#### Windows Steps +Current CEF building instructions: https://github.com/getnamo/blubrowser + +#### Archived - Windows Steps Requirements: ``` diff --git a/builder/builder.py b/builder/archived_builder.py similarity index 100% rename from builder/builder.py rename to builder/archived_builder.py From bd1a771895c25863f20a594b36a82efda9e0a5af Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 20 May 2020 16:45:32 -0700 Subject: [PATCH 45/51] Update Blu.Build.cs --- Source/Blu/Blu.Build.cs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Source/Blu/Blu.Build.cs b/Source/Blu/Blu.Build.cs index 3aaa451..d2fa044 100644 --- a/Source/Blu/Blu.Build.cs +++ b/Source/Blu/Blu.Build.cs @@ -11,11 +11,11 @@ private string ThirdPartyPath get { return Path.GetFullPath(Path.Combine(ModuleDirectory, "../../ThirdParty/")); } } - private void stageFiles(String[] filesToStage) + private void stageFiles(String[] FilesToStage) { - foreach (var f in filesToStage) + foreach (var File in FilesToStage) { - RuntimeDependencies.Add(f); + RuntimeDependencies.Add(File); } } @@ -59,8 +59,8 @@ public Blu(ReadOnlyTargetRules Target) : base(Target) }); // Add our runtime dependencies - var filesToStage = Directory.GetFiles(Path.Combine(ThirdPartyPath, "cef/Win/shipping"), "*", SearchOption.AllDirectories); - stageFiles(filesToStage); + var FilesToStage = Directory.GetFiles(Path.Combine(ThirdPartyPath, "cef/Win/shipping"), "*", SearchOption.AllDirectories); + stageFiles(FilesToStage); } else if(Target.Platform == UnrealTargetPlatform.Linux) { @@ -76,9 +76,9 @@ public Blu(ReadOnlyTargetRules Target) : base(Target) } else if(Target.Platform == UnrealTargetPlatform.Mac) { - var frameworkPath = Path.Combine(ThirdPartyPath, "cef/Mac/lib", "Chromium Embedded Framework.framework"); + var FrameworkPath = Path.Combine(ThirdPartyPath, "cef/Mac/lib", "Chromium Embedded Framework.framework"); - PublicFrameworks.Add(frameworkPath); + PublicFrameworks.Add(FrameworkPath); PublicAdditionalLibraries.Add(Path.Combine(ThirdPartyPath, "cef/Mac/lib", "libcef_dll_wrapper.a")); PublicIncludePaths.AddRange( @@ -86,15 +86,15 @@ public Blu(ReadOnlyTargetRules Target) : base(Target) Path.Combine(ThirdPartyPath, "cef", "Mac") }); - var filesToStage = Directory.GetFiles(Path.Combine(ThirdPartyPath, "cef/Mac/shipping"), "*", SearchOption.AllDirectories); - stageFiles(filesToStage); + var FilesToStage = Directory.GetFiles(Path.Combine(ThirdPartyPath, "cef/Mac/shipping"), "*", SearchOption.AllDirectories); + stageFiles(FilesToStage); - filesToStage = Directory.GetFiles(Path.Combine(ThirdPartyPath, "cef/Mac/lib"), "*", SearchOption.AllDirectories); - stageFiles(filesToStage); + FilesToStage = Directory.GetFiles(Path.Combine(ThirdPartyPath, "cef/Mac/lib"), "*", SearchOption.AllDirectories); + stageFiles(FilesToStage); if(!Target.bBuildEditor) { - AdditionalBundleResources.Add(new BundleResource(Path.Combine(frameworkPath, "Chromium Embedded Framework"), "MacOS", false)); + AdditionalBundleResources.Add(new BundleResource(Path.Combine(FrameworkPath, "Chromium Embedded Framework"), "MacOS", false)); } } else From a777e5edd0fb0b1dd605cbe633e747e1650efdc1 Mon Sep 17 00:00:00 2001 From: Jan Kaniewski Date: Sat, 23 May 2020 11:21:58 -0700 Subject: [PATCH 46/51] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8c646f6..dea64b8 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,8 @@ By default the actor has a BLUI resolution of 1000x1000, you can change this by ### BluTickActor +Since 4.0.0 - This actor is no longer needed. Ticking happens internally. + Instead of ticking in your level bp, I prefer to use a simple actor to do the ticking. Other convenience blueprints may spawn this as necessary so if you use those, you don't ever need to use this directly. ## Demo Project From 0eeeae35e12739a8ebdbf121afc23b1c89c482ca Mon Sep 17 00:00:00 2001 From: Jan Kaniewski Date: Thu, 11 Jun 2020 03:18:06 -0700 Subject: [PATCH 47/51] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index dea64b8..1d67f2d 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ By default the actor has a BLUI resolution of 1000x1000, you can change this by Since 4.0.0 - This actor is no longer needed. Ticking happens internally. +Older verions: Instead of ticking in your level bp, I prefer to use a simple actor to do the ticking. Other convenience blueprints may spawn this as necessary so if you use those, you don't ever need to use this directly. ## Demo Project From 94e04b331f3144665de6a544976d256867d0932c Mon Sep 17 00:00:00 2001 From: getnamo Date: Sat, 1 Aug 2020 17:57:46 -0700 Subject: [PATCH 48/51] move include to public folder --- BLUI.uplugin | 2 +- Source/Blu/{Private => Public}/CEFInclude.h | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename Source/Blu/{Private => Public}/CEFInclude.h (100%) diff --git a/BLUI.uplugin b/BLUI.uplugin index 9ba8279..de5fca8 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "4.0.0", + "VersionName": "4.0.1", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea, Getnamo, & Contributors", diff --git a/Source/Blu/Private/CEFInclude.h b/Source/Blu/Public/CEFInclude.h similarity index 100% rename from Source/Blu/Private/CEFInclude.h rename to Source/Blu/Public/CEFInclude.h From c87f441199c83d7cc9f1aeaa71098dcfcec5f359 Mon Sep 17 00:00:00 2001 From: getnamo Date: Sun, 13 Dec 2020 23:03:15 -0800 Subject: [PATCH 49/51] UE 4.26 fixes - StaticConstructObject using construction object - FTexture2DResource -> FTextureResource --- BLUI.uplugin | 2 +- Source/Blu/Private/BluBluprintFunctionLibrary.cpp | 3 ++- Source/Blu/Private/BluEye.cpp | 6 +++--- Source/Blu/Public/BluTypes.h | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index de5fca8..51a58b8 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "4.0.1", + "VersionName": "4.1.0", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea, Getnamo, & Contributors", diff --git a/Source/Blu/Private/BluBluprintFunctionLibrary.cpp b/Source/Blu/Private/BluBluprintFunctionLibrary.cpp index bc36b9a..b19c682 100644 --- a/Source/Blu/Private/BluBluprintFunctionLibrary.cpp +++ b/Source/Blu/Private/BluBluprintFunctionLibrary.cpp @@ -12,7 +12,8 @@ UBluEye* UBluBlueprintFunctionLibrary::NewBluEye(UObject* WorldContextObject) { UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull); - UBluEye* Eye = Cast(StaticConstructObject_Internal(UBluEye::StaticClass())); + FStaticConstructObjectParameters Params(UBluEye::StaticClass()); + UBluEye* Eye = Cast(StaticConstructObject_Internal(Params)); return Eye; diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index a079dbe..081fb5c 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -159,8 +159,8 @@ void UBluEye::TextureUpdate(const void *buffer, FUpdateTextureRegion2D *updateRe return; } - FUpdateTextureRegionsData * RegionData = new FUpdateTextureRegionsData; - RegionData->Texture2DResource = (FTexture2DResource*)Texture->Resource; + FUpdateTextureRegionsData* RegionData = new FUpdateTextureRegionsData; + RegionData->Texture2DResource = (FTextureResource*)Texture->Resource; RegionData->NumRegions = regionCount; RegionData->SrcBpp = 4; RegionData->SrcPitch = Settings.Width * 4; @@ -175,7 +175,7 @@ void UBluEye::TextureUpdate(const void *buffer, FUpdateTextureRegion2D *updateRe { for (uint32 RegionIndex = 0; RegionIndex < RegionData->NumRegions; RegionIndex++) { - RHIUpdateTexture2D(RegionData->Texture2DResource->GetTexture2DRHI(), 0, RegionData->Regions[RegionIndex], RegionData->SrcPitch, RegionData->SrcData.GetData() + (RegionData->Texture2DResource->TextureRHI->GetTexture2D(), 0, RegionData->Regions[RegionIndex], RegionData->SrcPitch, RegionData->SrcData.GetData() + RegionData->Regions[RegionIndex].SrcY * RegionData->SrcPitch + RegionData->Regions[RegionIndex].SrcX * RegionData->SrcBpp); } diff --git a/Source/Blu/Public/BluTypes.h b/Source/Blu/Public/BluTypes.h index eda880d..99662c0 100644 --- a/Source/Blu/Public/BluTypes.h +++ b/Source/Blu/Public/BluTypes.h @@ -25,7 +25,7 @@ struct FBluTextureParams struct FUpdateTextureRegionsData { - FTexture2DResource* Texture2DResource; + FTextureResource* Texture2DResource; uint32 NumRegions; FUpdateTextureRegion2D* Regions; uint32 SrcPitch; From 84baf0b7114c380203d695eb66e4bfc3a68ab092 Mon Sep 17 00:00:00 2001 From: getnamo Date: Sun, 13 Dec 2020 23:14:11 -0800 Subject: [PATCH 50/51] Cleaner construction and missing RHI command fix --- Source/Blu/Private/BluBluprintFunctionLibrary.cpp | 3 +-- Source/Blu/Private/BluEye.cpp | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Source/Blu/Private/BluBluprintFunctionLibrary.cpp b/Source/Blu/Private/BluBluprintFunctionLibrary.cpp index b19c682..a358af0 100644 --- a/Source/Blu/Private/BluBluprintFunctionLibrary.cpp +++ b/Source/Blu/Private/BluBluprintFunctionLibrary.cpp @@ -12,8 +12,7 @@ UBluEye* UBluBlueprintFunctionLibrary::NewBluEye(UObject* WorldContextObject) { UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull); - FStaticConstructObjectParameters Params(UBluEye::StaticClass()); - UBluEye* Eye = Cast(StaticConstructObject_Internal(Params)); + UBluEye* Eye = NewObject(WorldContextObject); return Eye; diff --git a/Source/Blu/Private/BluEye.cpp b/Source/Blu/Private/BluEye.cpp index 081fb5c..2adcd0f 100644 --- a/Source/Blu/Private/BluEye.cpp +++ b/Source/Blu/Private/BluEye.cpp @@ -175,7 +175,7 @@ void UBluEye::TextureUpdate(const void *buffer, FUpdateTextureRegion2D *updateRe { for (uint32 RegionIndex = 0; RegionIndex < RegionData->NumRegions; RegionIndex++) { - (RegionData->Texture2DResource->TextureRHI->GetTexture2D(), 0, RegionData->Regions[RegionIndex], RegionData->SrcPitch, RegionData->SrcData.GetData() + RHIUpdateTexture2D(RegionData->Texture2DResource->TextureRHI->GetTexture2D(), 0, RegionData->Regions[RegionIndex], RegionData->SrcPitch, RegionData->SrcData.GetData() + RegionData->Regions[RegionIndex].SrcY * RegionData->SrcPitch + RegionData->Regions[RegionIndex].SrcX * RegionData->SrcBpp); } From b7ae84253d45a766551f3fac0ad8d70c4c937ac5 Mon Sep 17 00:00:00 2001 From: getnamo Date: Wed, 26 May 2021 14:13:43 -0700 Subject: [PATCH 51/51] bump for ue5 --- BLUI.uplugin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BLUI.uplugin b/BLUI.uplugin index 51a58b8..262b9d3 100644 --- a/BLUI.uplugin +++ b/BLUI.uplugin @@ -2,7 +2,7 @@ "FileVersion": 3, "FriendlyName": "BLUI", "Version": 3, - "VersionName": "4.1.0", + "VersionName": "4.2.0", "Description": "Chromium Embedded Framework (CEF) powered HTML UI and HUD for Unreal Engine 4", "Category": "UI", "CreatedBy": "Aaron M. Shea, Getnamo, & Contributors",