summaryrefslogtreecommitdiff
path: root/public/panorama/iuiwindow.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/panorama/iuiwindow.h')
-rw-r--r--public/panorama/iuiwindow.h205
1 files changed, 205 insertions, 0 deletions
diff --git a/public/panorama/iuiwindow.h b/public/panorama/iuiwindow.h
new file mode 100644
index 0000000..da80f5b
--- /dev/null
+++ b/public/panorama/iuiwindow.h
@@ -0,0 +1,205 @@
+//=========== 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