csgo-2018-source/tier0/platwindow.cpp
2021-07-24 21:11:47 -07:00

231 lines
6.6 KiB
C++

//========== Copyright © 2007, Valve Corporation, All rights reserved. ========
//
// Purpose:
//
//=============================================================================
#include "pch_tier0.h"
#include "tier0/platwindow.h"
#if defined( PLATFORM_WINDOWS )
#if !defined( PLATFORM_X360 )
#include <windows.h>
#else
#include "xbox/xbox_win32stubs.h"
#endif
#endif
#ifdef PLATFORM_WINDOWS
//-----------------------------------------------------------------------------
// Window creation
//-----------------------------------------------------------------------------
PlatWindow_t Plat_CreateWindow( void *hInstance, const char *pTitle, int nWidth, int nHeight, int nFlags )
{
WNDCLASSEX wc;
memset( &wc, 0, sizeof( wc ) );
wc.cbSize = sizeof( wc );
wc.style = CS_OWNDC | CS_DBLCLKS;
wc.lpfnWndProc = DefWindowProc;
wc.hInstance = (HINSTANCE)hInstance;
wc.lpszClassName = "Valve001";
wc.hIcon = NULL; //LoadIcon( s_HInstance, MAKEINTRESOURCE( IDI_LAUNCHER ) );
wc.hIconSm = wc.hIcon;
RegisterClassEx( &wc );
// Note, it's hidden
DWORD style = WS_POPUP | WS_CLIPSIBLINGS;
style &= ~WS_MAXIMIZEBOX;
if ( ( nFlags & WINDOW_CREATE_FULLSCREEN ) == 0 )
{
// Give it a frame
style |= WS_OVERLAPPEDWINDOW;
if ( nFlags & WINDOW_CREATE_RESIZING )
{
style |= WS_THICKFRAME | WS_MAXIMIZEBOX;
}
else
{
style &= ~WS_THICKFRAME;
}
}
RECT windowRect;
windowRect.top = 0;
windowRect.left = 0;
windowRect.right = nWidth;
windowRect.bottom = nHeight;
// Compute rect needed for that size client area based on window style
AdjustWindowRectEx( &windowRect, style, FALSE, 0 );
// Create the window
void *hWnd = CreateWindow( wc.lpszClassName, pTitle, style, 0, 0,
windowRect.right - windowRect.left, windowRect.bottom - windowRect.top,
NULL, NULL, (HINSTANCE)hInstance, NULL );
return (PlatWindow_t)hWnd;
}
//-----------------------------------------------------------------------------
// Window title
//-----------------------------------------------------------------------------
void Plat_SetWindowTitle( PlatWindow_t hWindow, const char *pTitle )
{
#ifdef PLATFORM_WINDOWS_PC
SetWindowText( (HWND)hWindow, pTitle );
#endif
}
//-----------------------------------------------------------------------------
// Window movement
//-----------------------------------------------------------------------------
void Plat_SetWindowPos( PlatWindow_t hWindow, int x, int y )
{
SetWindowPos( (HWND)hWindow, NULL, x, y, 0, 0,
SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW | SWP_DRAWFRAME );
}
//-----------------------------------------------------------------------------
// Gets the desktop resolution
//-----------------------------------------------------------------------------
void Plat_GetDesktopResolution( int *pWidth, int *pHeight )
{
*pWidth = GetSystemMetrics( SM_CXSCREEN );
*pHeight = GetSystemMetrics( SM_CYSCREEN );
}
//-----------------------------------------------------------------------------
// Gets a window size
//-----------------------------------------------------------------------------
void Plat_GetWindowClientSize( PlatWindow_t hWindow, int *pWidth, int *pHeight )
{
RECT rect;
GetClientRect( (HWND)hWindow, &rect );
*pWidth = rect.right - rect.left;
*pHeight = rect.bottom - rect.top;
}
//-----------------------------------------------------------------------------
// Is the window minimized?
//-----------------------------------------------------------------------------
bool Plat_IsWindowMinimized( PlatWindow_t hWindow )
{
return IsIconic( (HWND)hWindow ) != 0;
}
//-----------------------------------------------------------------------------
// Gets the shell window in a console app
//-----------------------------------------------------------------------------
PlatWindow_t Plat_GetShellWindow( )
{
#ifdef PLATFORM_WINDOWS_PC
return (PlatWindow_t)GetShellWindow();
#else
return PLAT_WINDOW_INVALID;
#endif
}
//-----------------------------------------------------------------------------
// Convert window -> Screen coordinates
//-----------------------------------------------------------------------------
void Plat_WindowToScreenCoords( PlatWindow_t hWnd, int &x, int &y )
{
POINT pt;
pt.x = x; pt.y = y;
ClientToScreen( (HWND)hWnd, &pt );
x = pt.x; y = pt.y;
}
void Plat_ScreenToWindowCoords( PlatWindow_t hWnd, int &x, int &y )
{
POINT pt;
pt.x = x; pt.y = y;
ScreenToClient( (HWND)hWnd, &pt );
x = pt.x; y = pt.y;
}
#else
//-----------------------------------------------------------------------------
// Window creation
//-----------------------------------------------------------------------------
PlatWindow_t Plat_CreateWindow( void *hInstance, const char *pTitle, int nWidth, int nHeight, int nFlags )
{
return PLAT_WINDOW_INVALID;
}
//-----------------------------------------------------------------------------
// Window title
//-----------------------------------------------------------------------------
void Plat_SetWindowTitle( PlatWindow_t hWindow, const char *pTitle )
{
}
//-----------------------------------------------------------------------------
// Window movement
//-----------------------------------------------------------------------------
void Plat_SetWindowPos( PlatWindow_t hWindow, int x, int y )
{
}
//-----------------------------------------------------------------------------
// Gets the desktop resolution
//-----------------------------------------------------------------------------
void Plat_GetDesktopResolution( int *pWidth, int *pHeight )
{
*pWidth = 0;
*pHeight = 0;
}
//-----------------------------------------------------------------------------
// Gets a window size
//-----------------------------------------------------------------------------
void Plat_GetWindowClientSize( PlatWindow_t hWindow, int *pWidth, int *pHeight )
{
*pWidth = 0;
*pHeight = 0;
}
//-----------------------------------------------------------------------------
// Is the window minimized?
//-----------------------------------------------------------------------------
bool Plat_IsWindowMinimized( PlatWindow_t hWindow )
{
return false;
}
//-----------------------------------------------------------------------------
// Gets the shell window in a console app
//-----------------------------------------------------------------------------
PlatWindow_t Plat_GetShellWindow( )
{
return PLAT_WINDOW_INVALID;
}
//-----------------------------------------------------------------------------
// Convert window -> Screen coordinates
//-----------------------------------------------------------------------------
void Plat_WindowToScreenCoords( PlatWindow_t hWnd, int &x, int &y )
{
}
void Plat_ScreenToWindowCoords( PlatWindow_t hWnd, int &x, int &y )
{
}
#endif