206 lines
7.0 KiB
C
206 lines
7.0 KiB
C
|
//=========== Copyright Valve Corporation, All rights reserved. ===============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//=============================================================================//
|
||
|
|
||
|
#ifndef IUIWINDOW_H
|
||
|
#define IUIWINDOW_H
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#include "panoramatypes.h"
|
||
|
#include "iuirenderengine.h"
|
||
|
|
||
|
#if defined( SOURCE2_PANORAMA )
|
||
|
#include "rendersystem/irendercontext.h"
|
||
|
#include "scenesystem/isceneview.h"
|
||
|
#endif
|
||
|
|
||
|
class CSharedMemStream;
|
||
|
|
||
|
namespace panorama
|
||
|
{
|
||
|
|
||
|
class CLayoutFile;
|
||
|
class IUIPanelStyle;
|
||
|
class IUIOverlayWindow;
|
||
|
class IUIWindowInput;
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Basic window interface exposing operations used inside of panorama, rather
|
||
|
// than operations that are part of building/laying out controls in the panorama_client module
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class IUIWindow
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
#if defined( SOURCE2_PANORAMA )
|
||
|
virtual void RenderWindow( ISceneView *pView, IRenderContext *pRenderContext, ISceneLayer *pLayer ) = 0;
|
||
|
#endif
|
||
|
|
||
|
// Delete the window object
|
||
|
virtual void Delete() = 0;
|
||
|
|
||
|
// Access input system for the window
|
||
|
virtual IUIWindowInput *UIWindowInput() = 0;
|
||
|
|
||
|
// Access the rendering interface you use to draw onto this window
|
||
|
virtual IUIRenderEngine * UIRenderEngine() = 0;
|
||
|
|
||
|
// Set scaling factor that applies to all x/y values in the UI for the window, used so we can
|
||
|
// author content at say 1080p but pass 0.6666666f for this to render in 720p on cards with poor
|
||
|
// fill rates or TVs without 1080p support.
|
||
|
virtual void SetUIScaleFactor( float flScaleFactor ) = 0;
|
||
|
virtual float GetUIScaleFactor() = 0;
|
||
|
|
||
|
// Check if the mouse cursor is currently visible within the window
|
||
|
virtual bool BCursorVisible() = 0;
|
||
|
|
||
|
// Get the surface width for the window, this may be larger or smaller than the actual window if we are rendering lower res and scaling output for instance
|
||
|
virtual uint32 GetSurfaceWidth() = 0;
|
||
|
|
||
|
// Get the surface height for the window, this may be larger or smaller than the actual window if we are rendering lower res and scaling output for instance
|
||
|
virtual uint32 GetSurfaceHeight() = 0;
|
||
|
|
||
|
// Get the actual window width
|
||
|
virtual uint32 GetWindowWidth() = 0;
|
||
|
|
||
|
// Get the actual window height
|
||
|
virtual uint32 GetWindowHeight() = 0;
|
||
|
|
||
|
// Get the client area of the window, minus window borders, etc
|
||
|
virtual void GetClientDimensions( float &width, float &height ) = 0;
|
||
|
|
||
|
// Handle resize event, window has resized, backing surface needs to now resize to match
|
||
|
virtual void OnWindowResize( uint32 width, uint32 height ) = 0;
|
||
|
|
||
|
// Set window position on screen
|
||
|
virtual void SetWindowPosition( float x, float y ) = 0;
|
||
|
|
||
|
// Get window position on screen
|
||
|
virtual void GetWindowPosition( float &x, float &y ) = 0;
|
||
|
|
||
|
// bForceful in this call means try to bypass OS rules that may prevent focus (like our app wasn't last to receive input),
|
||
|
// use this sparingly and only if we really know stealing focus from some other app is what the user definately desires!
|
||
|
virtual void Activate( bool bForceful ) = 0;
|
||
|
|
||
|
// Check if this window has focus currently
|
||
|
virtual bool BHasFocus() = 0;
|
||
|
|
||
|
// Get the number of visible top level panels in the window
|
||
|
virtual uint32 GetNumVisibleTopLevelPanels() const = 0;
|
||
|
|
||
|
// Access list of visible panels
|
||
|
virtual const CUtlLinkedList< IUIPanel* > &GetTopLevelVisiblePanels() const = 0;
|
||
|
|
||
|
// Check if mouse is over the window
|
||
|
virtual bool IsMouseOver() = 0;
|
||
|
|
||
|
// Helper for letting client code tell us about daisywheel usage
|
||
|
virtual void RecordDaisyWheelUsage( float flEntryTimeInSeconds, int nWordsEntered, bool bViaKeyboard, bool bViaGamepad ) = 0;
|
||
|
|
||
|
// Helper for tracking daisywheel usage
|
||
|
virtual void GetDaisyWheelWPM( int &nWordsTyped, float &flMixedWPM, float &flKeyboardOnlyWPM, float &flGamepadOnlyWPM ) = 0;
|
||
|
|
||
|
// Check if the window is inside it's own layout pass
|
||
|
virtual bool BIsWindowInLayoutPass() = 0;
|
||
|
|
||
|
// Set a context ptr that is attached to the window, just lets other code (panels) that
|
||
|
// has access to the window access some shared state across the window.
|
||
|
virtual void SetContextPtr( void *pv ) = 0;
|
||
|
|
||
|
// Get context ptr value for this window,
|
||
|
virtual void * GetContextPtr() const = 0;
|
||
|
|
||
|
virtual bool BIsOverlay() = 0;
|
||
|
virtual bool BIsSteamWMOverlay() = 0;
|
||
|
|
||
|
// Get low level native window handle, used by streaming, should generally not be something you use
|
||
|
virtual void* GetNativeWindowHandle() = 0;
|
||
|
|
||
|
// Add a class to every top level panel in the window
|
||
|
virtual void AddClass( const char *pchName ) = 0;
|
||
|
|
||
|
// Add a class from every top level panel in the window
|
||
|
virtual void RemoveClass( const char *pchName ) = 0;
|
||
|
|
||
|
virtual void SetInhibitInput( bool bInhibitInput ) = 0;
|
||
|
virtual void SetPreventForceWindowOnTop( bool bPreventForceTopLevel ) = 0;
|
||
|
|
||
|
// Fade out the mouse cursor immediately in this window
|
||
|
virtual void FadeOutCursorNow() = 0;
|
||
|
|
||
|
// Check if the cursor is currently fading out
|
||
|
virtual bool BCursorFadingOut() = 0;
|
||
|
|
||
|
// Wakeup and show the mouse cursor immediately
|
||
|
virtual void WakeupMouseCursor() = 0;
|
||
|
|
||
|
// Set a min FPS for the window, this actually just prevents setting the max lower
|
||
|
virtual void SetMinFPS( float flMinFPS ) = 0;
|
||
|
|
||
|
// Stats tracking
|
||
|
virtual void GetSessionFPSAverages( float &fpsPaint, float &fpsAnimation, float &fpsRender ) = 0;
|
||
|
|
||
|
// Stats tracking
|
||
|
virtual void GetNumPeriodsBelowMinFPS( int &nSlowPeriods ) = 0;
|
||
|
|
||
|
// access data about how the gamepad was used
|
||
|
virtual bool BWasGamepadConnectedThisSession() = 0;
|
||
|
virtual bool BWasGamepadUsedThisSession() = 0;
|
||
|
|
||
|
virtual bool BWasSteamControllerConnectedThisSession() = 0;
|
||
|
virtual bool BWasSteamControllerUsedThisSession() = 0;
|
||
|
|
||
|
// Access overlay window interface for this window, NULL on non Steam Overlay windows
|
||
|
virtual IUIOverlayWindow *GetOverlayInterface() = 0;
|
||
|
|
||
|
// Change visibility of this window
|
||
|
virtual bool BIsVisible() = 0;
|
||
|
virtual void SetVisible( bool bVisible ) = 0;
|
||
|
|
||
|
// Change the focus behavior for controls in this window
|
||
|
virtual EWindowFocusBehavior GetFocusBehavior() = 0;
|
||
|
virtual void SetFocusBehavior( EWindowFocusBehavior eFocusBehavior ) = 0;
|
||
|
|
||
|
virtual void OnDeviceLost() = 0;
|
||
|
virtual void OnDeviceRestored() = 0;
|
||
|
virtual bool BDeviceLost() = 0;
|
||
|
|
||
|
// Clears the GPU resources associated with the window before the next render frame
|
||
|
virtual void ClearGPUResourcesBeforeNextFrame() = 0;
|
||
|
};
|
||
|
|
||
|
|
||
|
//
|
||
|
// Overlay window interface for Steam overlay specific windows
|
||
|
//
|
||
|
class IUIOverlayWindow
|
||
|
{
|
||
|
public:
|
||
|
#if !defined( SOURCE2_PANORAMA )
|
||
|
virtual void PushOverlayRenderCmdStream( CSharedMemStream *pRenderStream, unsigned long dwPID, float flOpacity, EOverlayWindowAlignment alignment ) = 0;
|
||
|
|
||
|
virtual void SetFocus( bool bFocus ) = 0;
|
||
|
|
||
|
virtual bool SetGameProcessInfo( AppId_t nAppId, bool bCanSharedSurfaces, int32 eTextureFormat ) = 0;
|
||
|
|
||
|
virtual void SetInputEnabled( bool bEnabled ) = 0;
|
||
|
|
||
|
virtual void SetGameWindowSize( uint32 nWidth, uint32 nHeight ) = 0;
|
||
|
|
||
|
virtual void SetFixedSurfaceSize( uint32 unSurfaceWidth, uint32 unSurfaceHeight ) = 0;
|
||
|
|
||
|
virtual void OnMouseMove( float x, float y ) = 0;
|
||
|
|
||
|
virtual void OnMouseEnter() = 0;
|
||
|
|
||
|
virtual void SetLetterboxColor( Color c ) = 0;
|
||
|
#endif
|
||
|
};
|
||
|
}
|
||
|
#endif // IUIWINDOW_H
|