diff options
Diffstat (limited to 'public/panorama/uitoplevelwindowoverlay.h')
| -rw-r--r-- | public/panorama/uitoplevelwindowoverlay.h | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/public/panorama/uitoplevelwindowoverlay.h b/public/panorama/uitoplevelwindowoverlay.h new file mode 100644 index 0000000..7218615 --- /dev/null +++ b/public/panorama/uitoplevelwindowoverlay.h @@ -0,0 +1,177 @@ +//=========== Copyright Valve Corporation, All rights reserved. ===============// +// +// Purpose: +//=============================================================================// + +#ifndef UITOPLEVELWINDOWOVERLAY_H +#define UITOPLEVELWINDOWOVERLAY_H + +#ifdef _WIN32 +#pragma once +#endif + +// bad reach +#include "../../../panorama/input/controller.h" + +class CSharedMemStream; +namespace IPC +{ + class IEvent; + class ISharedMem; +} + +namespace panorama +{ +class CTopLevelWindowOverlay; +class COverlayInterface; + + +class CTopLevelWindowOverlay : public CTopLevelWindow +{ + typedef CTopLevelWindow BaseClass; +public: + CTopLevelWindowOverlay( CUIEngine *pUIEngineParent ); + virtual ~CTopLevelWindowOverlay(); + + // Access overlay window interface for this window, NULL on non Steam Overlay windows + virtual IUIOverlayWindow *GetOverlayInterface(); + + // Initialize backing surface for window + virtual bool BInitializeSurface( const char *pchWindowTitle, int nWidth, int nHeight, IUIEngine::ERenderTarget eRenderTarget, bool bFixedSurfaceSize, bool bEnforceWindowAspectRatio, bool bUseCustomMouseCursor, const char *pchTargetMonitor ); + + // Run any per window frame func logic + virtual void RunPlatformFrame(); + + // Resize the window to specified dimensions + virtual void OnWindowResize( uint32 nWidth, uint32 nHeight ); + + // Window position management + virtual void SetWindowPosition( float x, float y ); + virtual void GetWindowPosition( float &x, float &y ); + virtual void GetWindowBounds( float &left, float &top, float &right, float &bottom ); + virtual void GetClientDimensions( float &width, float &height ); + virtual void Activate( bool bForceful ); + virtual bool BHasFocus() { return m_bFocus; } + virtual bool BIsFullscreen() { return m_bFullScreen; } + virtual void* GetNativeWindowHandle() { return 0; } + + virtual bool BAllowInput( InputMessage_t &msg ); + virtual bool BIsVisible() { return m_bVisible; } + virtual void SetVisible( bool bVisible ) { AssertMsg( false, "SetVisible not implemented on CTopLevelWindowOverlay" ); } + + void SetInputEnabled( bool bEnabled ) { m_bInputEnabled = bEnabled; } + + // Clear color for the window, normally black, transparent for overlay + virtual Color GetClearColor() { return Color( 0, 0, 0, 0 ); } + + // Necessary for generating mouse enter & leave events on windows + bool IsMouseOver() { return m_bMouseOverWindow; } + void OnMouseEnter(); + void OnMouseLeave() { m_bMouseOverWindow = false; } + + void SetMouseCursor( EMouseCursors eCursor ); + + bool SetGameProcessInfo( AppId_t nAppId, bool bCanSharedSurfaces, int32 eTextureFormat ); + void ProcessInputEvents(); + + bool BVisiblityChanged() const { return m_bVisibleThisFrame != m_bVisibleLastFrame; } + + void PushOverlayRenderCmdStream( CSharedMemStream *pRenderStream, unsigned long dwPID, float flOpacity, EOverlayWindowAlignment alignment ); + + void SetGameWindowSize( uint32 nWidth, uint32 nHeight ); + void SetFixedSurfaceSize( uint32 unSurfaceWidth, uint32 unSurfaceHeight ); + + void OnMouseMove( float x, float y ); + + void SetFocus( bool bFocus ); + + void SetLetterboxColor( Color c ); + +#ifdef DBGFLAG_VALIDATE + virtual void Validate( CValidator &validator, const tchar *pchName ); +#endif +protected: + virtual void Shutdown(); + +private: + + COverlayInterface *m_pOverlayInterface; + IUI3DSurface *m_p3DSurface; + bool m_bMouseOverWindow; + AppId_t m_nAppId; + + bool m_bInputEnabled; + bool m_bFocus; + bool m_bCanShareSurfaces; + + bool m_bVisibleThisFrame; + bool m_bVisibleLastFrame; + + uint32 m_unGameWidth; + uint32 m_unGameHeight; + + bool m_bFullScreen; + + bool m_bVisible; +}; + +class COverlayInterface : public IUIOverlayWindow +{ +public: + COverlayInterface( CTopLevelWindowOverlay *pWindow ) + { + m_pWindow = pWindow; + } + + virtual void PushOverlayRenderCmdStream( CSharedMemStream *pRenderStream, unsigned long dwPID, float flOpacity, EOverlayWindowAlignment alignment ) OVERRIDE + { + return m_pWindow->PushOverlayRenderCmdStream( pRenderStream, dwPID, flOpacity, alignment ); + } + + virtual void SetFocus( bool bFocus ) OVERRIDE + { + return m_pWindow->SetFocus( bFocus ); + } + + virtual bool SetGameProcessInfo( AppId_t nAppId, bool bCanSharedSurfaces, int32 eTextureFormat ) OVERRIDE + { + return m_pWindow->SetGameProcessInfo( nAppId, bCanSharedSurfaces, eTextureFormat ); + } + + virtual void SetInputEnabled( bool bEnabled ) OVERRIDE + { + return m_pWindow->SetInputEnabled( bEnabled ); + } + + virtual void SetGameWindowSize( uint32 nWidth, uint32 nHeight ) OVERRIDE + { + return m_pWindow->SetGameWindowSize( nWidth, nHeight ); + } + + virtual void SetFixedSurfaceSize( uint32 unSurfaceWidth, uint32 unSurfaceHeight ) OVERRIDE + { + return m_pWindow->SetFixedSurfaceSize( unSurfaceWidth, unSurfaceHeight ); + } + + virtual void OnMouseMove( float x, float y ) OVERRIDE + { + return m_pWindow->OnMouseMove( x, y ); + } + + virtual void OnMouseEnter() OVERRIDE + { + return m_pWindow->OnMouseEnter(); + } + + virtual void SetLetterboxColor( Color c ) OVERRIDE + { + return m_pWindow->SetLetterboxColor( c ); + } +private: + CTopLevelWindowOverlay *m_pWindow; +}; + + +} // namespace panorama + +#endif // UITOPLEVELWINDOWOVERLAY_H |