123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790 |
- #pragma once
- #include "CoreMinimal.h"
- #include "Input/CursorReply.h"
- #include "Input/Events.h"
- #include "Input/Reply.h"
- #include "Widgets/SViewport.h"
- #include "WebInterfaceBrowserSingleton.h"
- #if WITH_CEF3
- #include "IWebInterfaceBrowserWindow.h"
- #include "CEFInterfaceBrowserHandler.h"
- #include "CEFInterfaceLibCefIncludes.h"
- #endif
- class FBrowserBufferedVideo;
- class FCEFInterfaceBrowserHandler;
- class FCEFInterfaceJSScripting;
- class FSlateUpdatableTexture;
- class IWebInterfaceBrowserPopupFeatures;
- class IWebInterfaceBrowserWindow;
- struct Rect;
- class FSlateShaderResource;
- enum class EWebInterfaceBrowserDocumentState;
- struct FGeometry;
- struct FPointerEvent;
- class UObject;
- struct FInputEvent;
- class FWebJSScripting;
- class FCEFInterfaceImeHandler;
- class ITextInputMethodSystem;
- class FCEFWebInterfaceBrowserWindowRHIHelper;
- #if WITH_CEF3
- struct FWebInterfaceBrowserWindowInfo
- {
- FWebInterfaceBrowserWindowInfo(CefRefPtr<CefBrowser> InBrowser, CefRefPtr<FCEFInterfaceBrowserHandler> InHandler)
- : Browser(InBrowser)
- , Handler(InHandler)
- {}
- CefRefPtr<CefBrowser> Browser;
- CefRefPtr<FCEFInterfaceBrowserHandler> Handler;
- };
- struct FWebInterfaceBrowserDragRegion
- {
- FWebInterfaceBrowserDragRegion(const FIntRect& InRect, bool bInDraggable)
- : Rect(InRect)
- , bDraggable(bInDraggable)
- {}
- FIntRect Rect;
- bool bDraggable;
- };
- class FCEFWebInterfaceBrowserWindow
- : public IWebInterfaceBrowserWindow
- , public TSharedFromThis<FCEFWebInterfaceBrowserWindow>
- {
-
- friend class FCEFInterfaceBrowserHandler;
-
- friend class FWebInterfaceBrowserSingleton;
-
- friend class SWebInterfaceBrowserView;
- private:
-
- FCEFWebInterfaceBrowserWindow(CefRefPtr<CefBrowser> Browser, CefRefPtr<FCEFInterfaceBrowserHandler> Handler, FString Url, TOptional<FString> ContentsToLoad, bool bShowErrorMessage, bool bThumbMouseButtonNavigation, bool bUseTransparency, bool bInUseNativeCursors, bool bJSBindingToLoweringEnabled, bool bUsingAcceleratedPaint);
-
- TSharedRef<SViewport> CreateWidget();
- public:
-
- virtual ~FCEFWebInterfaceBrowserWindow();
- bool IsShowingErrorMessages() const { return bShowErrorMessage; }
- bool IsThumbMouseButtonNavigationEnabled() const { return bThumbMouseButtonNavigation; }
- bool UseTransparency() const { return bUseTransparency; }
- bool UsingAcceleratedPaint() const { return bUsingAcceleratedPaint; }
- bool UseNativeCursors() { return bUseNativeCursors; }
- public:
-
- virtual void LoadURL(FString NewURL) override;
- virtual void LoadString(FString Contents, FString DummyURL) override;
- virtual void SetViewportSize(FIntPoint WindowSize, FIntPoint WindowPos) override;
- virtual FIntPoint GetViewportSize() const override { return FIntPoint::NoneValue; }
- virtual FSlateShaderResource* GetTexture(bool bIsPopup = false) override;
- virtual bool IsValid() const override;
- virtual bool IsInitialized() const override;
- virtual bool IsClosing() const override;
- virtual EWebInterfaceBrowserDocumentState GetDocumentLoadingState() const override;
- virtual FString GetTitle() const override;
- virtual FString GetUrl() const override;
- virtual void GetSource(TFunction<void (const FString&)> Callback) const override;
- virtual bool OnKeyDown(const FKeyEvent& InKeyEvent) override;
- virtual bool OnKeyUp(const FKeyEvent& InKeyEvent) override;
- virtual bool OnKeyChar(const FCharacterEvent& InCharacterEvent) override;
- virtual FReply OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent, bool bIsPopup) override;
- virtual FReply OnMouseButtonUp(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent, bool bIsPopup) override;
- virtual FReply OnMouseButtonDoubleClick(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent, bool bIsPopup) override;
- virtual FReply OnMouseMove(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent, bool bIsPopup) override;
- virtual void OnMouseLeave(const FPointerEvent& MouseEvent) override;
- virtual void SetSupportsMouseWheel(bool bValue) override;
- virtual bool GetSupportsMouseWheel() const override;
- virtual FReply OnMouseWheel(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent, bool bIsPopup) override;
- virtual FReply OnTouchGesture(const FGeometry& MyGeometry, const FPointerEvent& GestureEvent, bool bIsPopup) override;
- virtual void OnFocus(bool SetFocus, bool bIsPopup) override;
- virtual void OnCaptureLost() override;
- virtual bool CanGoBack() const override;
- virtual void GoBack() override;
- virtual bool CanGoForward() const override;
- virtual void GoForward() override;
- virtual bool IsLoading() const override;
- virtual void Reload() override;
- virtual void StopLoad() override;
- virtual void ExecuteJavascript(const FString& Script) override;
- virtual void CloseBrowser(bool bForce, bool bBlockTillClosed) override;
- virtual void BindUObject(const FString& Name, UObject* Object, bool bIsPermanent = true) override;
- virtual void UnbindUObject(const FString& Name, UObject* Object = nullptr, bool bIsPermanent = true) override;
- virtual void BindInputMethodSystem(ITextInputMethodSystem* TextInputMethodSystem) override;
- virtual void UnbindInputMethodSystem() override;
- virtual int GetLoadError() override;
- virtual void SetIsDisabled(bool bValue) override;
- virtual TSharedPtr<SWindow> GetParentWindow() const override;
- virtual void SetParentWindow(TSharedPtr<SWindow> Window) override;
- DECLARE_DERIVED_EVENT(FCEFWebInterfaceBrowserWindow, IWebInterfaceBrowserWindow::FOnDocumentStateChanged, FOnDocumentStateChanged);
- virtual FOnDocumentStateChanged& OnDocumentStateChanged() override
- {
- return DocumentStateChangedEvent;
- }
- DECLARE_DERIVED_EVENT(FCEFWebInterfaceBrowserWindow, IWebInterfaceBrowserWindow::FOnTitleChanged, FOnTitleChanged);
- virtual FOnTitleChanged& OnTitleChanged() override
- {
- return TitleChangedEvent;
- }
- DECLARE_DERIVED_EVENT(FCEFWebInterfaceBrowserWindow, IWebInterfaceBrowserWindow::FOnUrlChanged, FOnUrlChanged);
- virtual FOnUrlChanged& OnUrlChanged() override
- {
- return UrlChangedEvent;
- }
- DECLARE_DERIVED_EVENT(FCEFWebInterfaceBrowserWindow, IWebInterfaceBrowserWindow::FOnToolTip, FOnToolTip);
- virtual FOnToolTip& OnToolTip() override
- {
- return ToolTipEvent;
- }
- DECLARE_DERIVED_EVENT(FCEFWebInterfaceBrowserWindow, IWebInterfaceBrowserWindow::FOnNeedsRedraw, FOnNeedsRedraw);
- virtual FOnNeedsRedraw& OnNeedsRedraw() override
- {
- return NeedsRedrawEvent;
- }
- virtual FOnBeforeBrowse& OnBeforeBrowse() override
- {
- return BeforeBrowseDelegate;
- }
- virtual FOnLoadUrl& OnLoadUrl() override
- {
- return LoadUrlDelegate;
- }
- virtual FOnCreateWindow& OnCreateWindow() override
- {
- return WebBrowserHandler->OnCreateWindow();
- }
- virtual FOnCloseWindow& OnCloseWindow() override
- {
- return CloseWindowDelegate;
- }
- virtual FCursorReply OnCursorQuery( const FGeometry& MyGeometry, const FPointerEvent& CursorEvent ) override
- {
- return Cursor == EMouseCursor::Default ? FCursorReply::Unhandled() : FCursorReply::Cursor(Cursor);
- }
- virtual FOnBeforePopupDelegate& OnBeforePopup() override
- {
- return WebBrowserHandler->OnBeforePopup();
- }
- virtual FOnBeforeResourceLoadDelegate& OnBeforeResourceLoad() override
- {
- if (!WebBrowserHandler->OnBeforeResourceLoad().IsBoundToObject(this))
- {
- WebBrowserHandler->OnBeforeResourceLoad().BindSP(this, &FCEFWebInterfaceBrowserWindow::HandleOnBeforeResourceLoad);
- }
- return BeforeResourceLoadDelegate;
- }
- virtual FOnResourceLoadCompleteDelegate& OnResourceLoadComplete() override
- {
- if (!WebBrowserHandler->OnResourceLoadComplete().IsBoundToObject(this))
- {
- WebBrowserHandler->OnResourceLoadComplete().BindSP(this, &FCEFWebInterfaceBrowserWindow::HandleOnResourceLoadComplete);
- }
- return ResourceLoadCompleteDelegate;
- }
- virtual FOnConsoleMessageDelegate& OnConsoleMessage() override
- {
- if (!WebBrowserHandler->OnConsoleMessage().IsBoundToObject(this))
- {
- WebBrowserHandler->OnConsoleMessage().BindSP(this, &FCEFWebInterfaceBrowserWindow::HandleOnConsoleMessage);
- }
- return ConsoleMessageDelegate;
- }
- DECLARE_DERIVED_EVENT(FCEFWebInterfaceBrowserWindow, IWebInterfaceBrowserWindow::FOnShowPopup, FOnShowPopup);
- virtual FOnShowPopup& OnShowPopup() override
- {
- return ShowPopupEvent;
- }
- DECLARE_DERIVED_EVENT(FCEFWebInterfaceBrowserWindow, IWebInterfaceBrowserWindow::FOnDismissPopup, FOnDismissPopup);
- virtual FOnDismissPopup& OnDismissPopup() override
- {
- return DismissPopupEvent;
- }
- virtual FOnShowDialog& OnShowDialog() override
- {
- return ShowDialogDelegate;
- }
- virtual FOnDismissAllDialogs& OnDismissAllDialogs() override
- {
- return DismissAllDialogsDelegate;
- }
- virtual FOnSuppressContextMenu& OnSuppressContextMenu() override
- {
- return SuppressContextMenuDelgate;
- }
- virtual FOnDragWindow& OnDragWindow() override
- {
- return DragWindowDelegate;
- }
-
- virtual FOnUnhandledKeyDown& OnUnhandledKeyDown() override
- {
- return UnhandledKeyDownDelegate;
- }
- virtual FOnUnhandledKeyUp& OnUnhandledKeyUp() override
- {
- return UnhandledKeyUpDelegate;
- }
- virtual FOnUnhandledKeyChar& OnUnhandledKeyChar() override
- {
- return UnhandledKeyCharDelegate;
- }
- private:
-
- CefRefPtr<CefBrowser> GetCefBrowser();
-
- void SetTitle(const CefString& InTitle);
-
- void SetUrl(const CefString& InUrl);
-
- void SetToolTip(const CefString& InToolTip);
-
- void GetViewRect(CefRect& Rect);
-
- void NotifyDocumentError(CefLoadHandler::ErrorCode InErrorCode, const CefString& ErrorText, const CefString& FailedUrl);
-
-
- void NotifyDocumentError(int ErrorCode);
-
- void NotifyDocumentLoadingStateChange(bool IsLoading);
-
- void OnPaint(CefRenderHandler::PaintElementType Type, const CefRenderHandler::RectList& DirtyRects, const void* Buffer, int Width, int Height);
-
- void OnAcceleratedPaint(CefRenderHandler::PaintElementType type, const CefRenderHandler::RectList& DirtyRects, void* SharedHandle);
-
- bool OnCursorChange(CefCursorHandle Cursor, cef_cursor_type_t Type, const CefCursorInfo& CustomCursorInfo);
-
- bool OnProcessMessageReceived(CefRefPtr<CefBrowser> Browser, CefRefPtr<CefFrame> frame, CefProcessId SourceProcess, CefRefPtr<CefProcessMessage> Message);
-
- bool OnBeforeBrowse(CefRefPtr<CefBrowser> Browser, CefRefPtr<CefFrame> Frame, CefRefPtr<CefRequest> Request, bool user_gesture, bool bIsRedirect);
- void HandleOnBeforeResourceLoad(const CefString& URL, CefRequest::ResourceType Type, FRequestHeaders& AdditionalHeaders, const bool AllowUserCredentials);
- void HandleOnResourceLoadComplete(const CefString& URL, CefRequest::ResourceType Type, CefResourceRequestHandler::URLRequestStatus Status, int64 ContentLength);
- void HandleOnConsoleMessage(CefRefPtr<CefBrowser> Browser, cef_log_severity_t Level, const CefString& Message, const CefString& Source, int32 Line);
-
- TOptional<FString> GetResourceContent( CefRefPtr< CefFrame > Frame, CefRefPtr< CefRequest > Request);
-
- FModifierKeysState SlateModifiersFromCefModifiers(const CefKeyEvent& CefEvent);
-
- bool OnUnhandledKeyEvent(const CefKeyEvent& CefEvent);
-
- bool OnJSDialog(CefJSDialogHandler::JSDialogType DialogType, const CefString& MessageText, const CefString& DefaultPromptText, CefRefPtr<CefJSDialogCallback> Callback, bool& OutSuppressMessage);
-
- bool OnBeforeUnloadDialog(const CefString& MessageText, bool IsReload, CefRefPtr<CefJSDialogCallback> Callback);
-
- void OnResetDialogState();
-
- void OnRenderProcessTerminated(CefRequestHandler::TerminationStatus Status);
-
- bool RequestCreateWindow(const TSharedRef<IWebInterfaceBrowserWindow>& NewBrowserWindow, const TSharedPtr<IWebInterfaceBrowserPopupFeatures>& BrowserPopupFeatures);
-
-
-
- void OnBrowserClosing();
-
- void OnBrowserClosed();
-
- void SetPopupMenuPosition(CefRect PopupSize);
-
- void ShowPopupMenu(bool bShow);
-
- void OnImeCompositionRangeChanged(
- CefRefPtr<CefBrowser> Browser,
- const CefRange& SelectionRange,
- const CefRenderHandler::RectList& CharacterBounds);
- void UpdateDragRegions(const TArray<FWebInterfaceBrowserDragRegion>& Regions);
- public:
-
- static int32 GetCefKeyboardModifiers(const FKeyEvent& KeyEvent);
-
- static int32 GetCefMouseModifiers(const FPointerEvent& InMouseEvent);
-
- static int32 GetCefInputModifiers(const FInputEvent& InputEvent);
-
- static bool CanSupportAcceleratedPaint();
- public:
-
- void UpdateCachedGeometry(const FGeometry& AllottedGeometry);
-
- void CheckTickActivity() override;
-
- void UpdateVideoBuffering();
-
- CefRefPtr<CefDictionaryValue> GetProcessInfo();
-
- bool URLRequestAllowsCredentials(const FString& URL) const { return WebBrowserHandler->URLRequestAllowsCredentials(URL); }
- private:
-
- FSlateRenderer* const GetRenderer();
-
- void HandleRenderingError();
-
- void ReleaseTextures();
-
- bool CreateInitialTextures();
-
- void RequestNavigationInternal(FString Url, FString Contents);
-
- bool HasPendingNavigation();
-
- void ProcessPendingNavigation();
-
- void SetIsHidden(bool bValue);
-
- void PopulateCefKeyEvent(const FKeyEvent& InKeyEvent, CefKeyEvent& OutKeyEvent);
-
- CefMouseEvent GetCefMouseEvent(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent, bool bIsPopup);
-
- bool IsInDragRegion(const FIntPoint& Point);
-
- TOptional<FSlateRenderTransform> GetWebBrowserRenderTransform() const;
- bool BlockInputInDirectHwndMode() const;
- #if PLATFORM_WINDOWS
-
- bool LoadCustomCEF3Cursor(cef_cursor_type_t Type);
- #endif
- private:
-
- EWebInterfaceBrowserDocumentState DocumentState;
-
- FSlateUpdatableTexture* UpdatableTextures[2];
-
- CefRefPtr<CefBrowser> InternalCefBrowser;
-
- CefRefPtr<FCEFInterfaceBrowserHandler> WebBrowserHandler;
-
- FString Title;
-
- FString CurrentUrl;
-
- FString ToolTipText;
-
- FIntPoint ViewportSize;
-
- FIntPoint ViewportPos;
-
- float ViewportDPIScaleFactor;
-
- bool bIsClosing;
-
- bool bIsInitialized;
-
- TOptional<FString> ContentsToLoad;
-
- FOnDocumentStateChanged DocumentStateChangedEvent;
-
- bool bShowErrorMessage;
-
- bool bThumbMouseButtonNavigation;
-
- bool bUseTransparency;
-
- bool bUsingAcceleratedPaint;
-
- bool bUseNativeCursors;
-
- FOnTitleChanged TitleChangedEvent;
-
- FOnUrlChanged UrlChangedEvent;
-
- FOnToolTip ToolTipEvent;
-
- FOnNeedsRedraw NeedsRedrawEvent;
-
- FOnBeforeBrowse BeforeBrowseDelegate;
-
- FOnLoadUrl LoadUrlDelegate;
-
- FOnCloseWindow CloseWindowDelegate;
-
- FOnBeforeResourceLoadDelegate BeforeResourceLoadDelegate;
-
- FOnResourceLoadCompleteDelegate ResourceLoadCompleteDelegate;
-
- FOnConsoleMessageDelegate ConsoleMessageDelegate;
-
- FOnShowPopup ShowPopupEvent;
-
- FOnDismissPopup DismissPopupEvent;
-
- FOnShowDialog ShowDialogDelegate;
-
- FOnDismissAllDialogs DismissAllDialogsDelegate;
-
- FOnSuppressContextMenu SuppressContextMenuDelgate;
-
- FOnDragWindow DragWindowDelegate;
-
-
- FOnUnhandledKeyDown UnhandledKeyDownDelegate;
-
- FOnUnhandledKeyUp UnhandledKeyUpDelegate;
-
- FOnUnhandledKeyChar UnhandledKeyCharDelegate;
-
- EMouseCursor::Type Cursor;
-
- bool bIsDisabled;
-
- bool bIsHidden;
-
- bool bTickedLastFrame;
-
-
- bool bNeedsResize;
-
- bool bDraggingWindow;
-
- TOptional<FKeyEvent> PreviousKeyDownEvent;
- TOptional<FKeyEvent> PreviousKeyUpEvent;
- TOptional<FCharacterEvent> PreviousCharacterEvent;
- bool bIgnoreKeyDownEvent;
- bool bIgnoreKeyUpEvent;
- bool bIgnoreCharacterEvent;
-
- bool bMainHasFocus;
- bool bPopupHasFocus;
- bool bSupportsMouseWheel;
- FIntPoint PopupPosition;
- bool bShowPopupRequested;
-
- bool bRecoverFromRenderProcessCrash;
- int ErrorCode;
-
- bool bDeferNavigations;
-
- FString PendingAbortUrl;
-
- FString PendingLoadUrl;
- TUniquePtr<FBrowserBufferedVideo> BufferedVideo;
- #if PLATFORM_MAC
- void *LastPaintedSharedHandle;
- #endif
-
- TSharedPtr<FCEFInterfaceJSScripting> Scripting;
- #if !PLATFORM_LINUX
-
- TSharedPtr<FCEFInterfaceImeHandler> Ime;
- #endif
- TArray<FWebInterfaceBrowserDragRegion> DragRegions;
- TWeakPtr<SWindow> ParentWindow;
- FCEFWebInterfaceBrowserWindowRHIHelper* RHIRenderHelper;
-
- #if PLATFORM_WINDOWS || PLATFORM_MAC
- bool bInDirectHwndMode;
- #endif
- };
- typedef FCEFWebInterfaceBrowserWindow FWebInterfaceBrowserWindow;
- #endif
|