Files
UnrealEngineUWP/Engine/Source/Developer/WebBrowser/Private/WebBrowserWindow.h
Matthew Griffin 3604069889 Allowing transparency in web browser windows and improved viewport resizing
Allow user to chose whether transparency is used for individual browser windows.
When browser viewport is resized or rendered with old size afterwards, made sure that the texture is copied row by row to avoid distortion.
Store size of viewport as an FIntPoint to avoid various casts that would be needed.

[CL 2321219 by Matthew Griffin in Main branch]
2014-10-07 09:58:47 -04:00

167 lines
5.2 KiB
C++

// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
#pragma once
#if WITH_CEF3
#include "IWebBrowserWindow.h"
#include "WebBrowserHandler.h"
#if PLATFORM_WINDOWS
#include "AllowWindowsPlatformTypes.h"
#endif
#include "include/internal/cef_ptr.h"
#include "include/cef_render_handler.h"
#if PLATFORM_WINDOWS
#include "HideWindowsPlatformTypes.h"
#endif
// Forward Declarations
struct FInputEvent;
class FSlateRenderer;
class FSlateUpdatableTexture;
/**
* Implementation of interface for dealing with a Web Browser window
*/
class FWebBrowserWindow : public IWebBrowserWindow, public TSharedFromThis<FWebBrowserWindow>
{
public:
/**
* Default Constructor
*
* @param InSlateRenderer Slate renderer to allow creation of texture to render to
* @param InViewportSize Initial size of the browser window
*/
FWebBrowserWindow(TWeakPtr<FSlateRenderer> InSlateRenderer, FIntPoint InViewportSize);
/**
* Virtual Destructor
*/
virtual ~FWebBrowserWindow();
// IWebBrowserWindow Interface
virtual void SetViewportSize(FVector2D WindowSize) override;
virtual FSlateShaderResource* GetTexture() override;
virtual bool IsValid() const override;
virtual bool IsClosing() const override;
virtual FString GetTitle() const override;
virtual void OnKeyDown(const FKeyboardEvent& InKeyboardEvent) override;
virtual void OnKeyUp(const FKeyboardEvent& InKeyboardEvent) override;
virtual void OnKeyChar(const FCharacterEvent& InCharacterEvent) override;
virtual void OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
virtual void OnMouseButtonUp(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
virtual void OnMouseButtonDoubleClick(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
virtual void OnMouseMove(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
virtual void OnMouseWheel(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
virtual void OnFocus(bool SetFocus) 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;
/**
* Set the CEF Handler receiving browser callbacks for this window
*
* @param InHandler Pointer to the handler for this window
*/
void SetHandler(CefRefPtr<FWebBrowserHandler> InHandler);
/**
* Close this window so that it can no longer be used
*/
void CloseBrowser();
private:
/**
* Called to pass reference to the underlying CefBrowser as this is not created at the same time
* as the FWebBrowserWindow
*
* @param Browser The CefBrowser for this window
*/
void BindCefBrowser(CefRefPtr<CefBrowser> Browser);
/**
* Sets the Title of this window
*
* @param InTitle The new title of this window
*/
void SetTitle(const CefString& InTitle);
/**
* Get the current proportions of this window
*
* @param Rect Reference to CefRect to store sizes
* @return Whether Rect was set up correctly
*/
bool GetViewRect(CefRect& Rect);
/**
* Called when there is an update to the rendered web page
*
* @param Type Paint type
* @param DirtyRects List of image areas that have been changed
* @param Buffer Pointer to the raw texture data
* @param Width Width of the texture
* @param Height Height of the texture
*/
void OnPaint(CefRenderHandler::PaintElementType Type, const CefRenderHandler::RectList& DirtyRects, const void* Buffer, int Width, int Height);
/**
* Called when cursor would change due to web browser interaction
*
* @param Cursor Handle to CEF mouse cursor
*/
void OnCursorChange(CefCursorHandle Cursor);
/**
* Gets the Cef Keyboard Modifiers based on a Keyboard Event
*
* @param KeyboardEvent The Keyboard event
* @return Bits representing keyboard modifiers
*/
static int32 GetCefKeyboardModifiers(const FKeyboardEvent& KeyboardEvent);
/**
* Gets the Cef Mouse Modifiers based on a Mouse Event
*
* @param InMouseEvent The Mouse event
* @return Bits representing mouse modifiers
*/
static int32 GetCefMouseModifiers(const FPointerEvent& InMouseEvent);
/**
* Gets the Cef Input Modifiers based on an Input Event
*
* @param InputEvent The Input event
* @return Bits representing input modifiers
*/
static int32 GetCefInputModifiers(const FInputEvent& InputEvent);
/** Pointer to Slate renderer to allow creation of texture to render to */
TWeakPtr<FSlateRenderer> SlateRenderer;
/** Interface to the texture we are rendering to */
FSlateUpdatableTexture* UpdatableTexture;
/** Temporary storage for the raw texture data */
TArray<uint8> TextureData;
/** Pointer to the CEF Handler for this window */
CefRefPtr<FWebBrowserHandler> Handler;
/** Pointer to the CEF Browser for this window */
CefRefPtr<CefBrowser> InternalCefBrowser;
/** Current title of this window */
FString Title;
/** Current size of this window */
FIntPoint ViewportSize;
/** Whether this window is closing */
bool bIsClosing;
// Allow the Handler to access functions only it needs
friend class FWebBrowserHandler;
};
#endif