mirror of
https://github.com/glfw/glfw.git
synced 2024-11-10 09:01:46 +00:00
Window class cleanup.
This commit is contained in:
parent
82dc6c8b8f
commit
c85294e0b2
@ -211,6 +211,9 @@ int _glfwPlatformInit(void)
|
|||||||
_control87(MCW_EM, MCW_EM);
|
_control87(MCW_EM, MCW_EM);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (!_glfwRegisterWindowClass())
|
||||||
|
return GL_FALSE;
|
||||||
|
|
||||||
if (!_glfwInitContextAPI())
|
if (!_glfwInitContextAPI())
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
|
|
||||||
@ -222,11 +225,7 @@ int _glfwPlatformInit(void)
|
|||||||
|
|
||||||
void _glfwPlatformTerminate(void)
|
void _glfwPlatformTerminate(void)
|
||||||
{
|
{
|
||||||
if (_glfw.win32.classAtom)
|
_glfwUnregisterWindowClass();
|
||||||
{
|
|
||||||
UnregisterClassW(_GLFW_WNDCLASSNAME, GetModuleHandleW(NULL));
|
|
||||||
_glfw.win32.classAtom = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Restore previous foreground lock timeout system setting
|
// Restore previous foreground lock timeout system setting
|
||||||
SystemParametersInfoW(SPI_SETFOREGROUNDLOCKTIMEOUT, 0,
|
SystemParametersInfoW(SPI_SETFOREGROUNDLOCKTIMEOUT, 0,
|
||||||
|
@ -130,10 +130,6 @@ typedef HRESULT (WINAPI * DWMISCOMPOSITIONENABLED_T)(BOOL*);
|
|||||||
#define _glfw_DwmIsCompositionEnabled _glfw.win32.dwmapi.DwmIsCompositionEnabled
|
#define _glfw_DwmIsCompositionEnabled _glfw.win32.dwmapi.DwmIsCompositionEnabled
|
||||||
|
|
||||||
|
|
||||||
// We use versioned window class names in order not to cause conflicts
|
|
||||||
// between applications using different versions of GLFW
|
|
||||||
#define _GLFW_WNDCLASSNAME L"GLFW30"
|
|
||||||
|
|
||||||
#define _GLFW_RECREATION_NOT_NEEDED 0
|
#define _GLFW_RECREATION_NOT_NEEDED 0
|
||||||
#define _GLFW_RECREATION_REQUIRED 1
|
#define _GLFW_RECREATION_REQUIRED 1
|
||||||
#define _GLFW_RECREATION_IMPOSSIBLE 2
|
#define _GLFW_RECREATION_IMPOSSIBLE 2
|
||||||
@ -188,7 +184,6 @@ typedef struct _GLFWwindowWin32
|
|||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
typedef struct _GLFWlibraryWin32
|
typedef struct _GLFWlibraryWin32
|
||||||
{
|
{
|
||||||
ATOM classAtom;
|
|
||||||
DWORD foregroundLockTimeout;
|
DWORD foregroundLockTimeout;
|
||||||
char* clipboardString;
|
char* clipboardString;
|
||||||
|
|
||||||
@ -255,6 +250,10 @@ typedef struct _GLFWtimeWin32
|
|||||||
// Prototypes for platform specific internal functions
|
// Prototypes for platform specific internal functions
|
||||||
//========================================================================
|
//========================================================================
|
||||||
|
|
||||||
|
// Window class
|
||||||
|
GLboolean _glfwRegisterWindowClass(void);
|
||||||
|
void _glfwUnregisterWindowClass(void);
|
||||||
|
|
||||||
// Desktop compositing
|
// Desktop compositing
|
||||||
BOOL _glfwIsCompositionEnabled(void);
|
BOOL _glfwIsCompositionEnabled(void);
|
||||||
|
|
||||||
|
@ -34,6 +34,8 @@
|
|||||||
|
|
||||||
#define _GLFW_KEY_INVALID -2
|
#define _GLFW_KEY_INVALID -2
|
||||||
|
|
||||||
|
#define _GLFW_WNDCLASSNAME L"GLFW30"
|
||||||
|
|
||||||
|
|
||||||
// Updates the cursor clip rect
|
// Updates the cursor clip rect
|
||||||
//
|
//
|
||||||
@ -838,43 +840,6 @@ static void getFullWindowSize(_GLFWwindow* window,
|
|||||||
*fullHeight = rect.bottom - rect.top;
|
*fullHeight = rect.bottom - rect.top;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Registers the GLFW window class
|
|
||||||
//
|
|
||||||
static ATOM registerWindowClass(void)
|
|
||||||
{
|
|
||||||
WNDCLASSW wc;
|
|
||||||
ATOM classAtom;
|
|
||||||
|
|
||||||
// Set window class parameters
|
|
||||||
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
|
|
||||||
wc.lpfnWndProc = (WNDPROC) windowProc;
|
|
||||||
wc.cbClsExtra = 0; // No extra class data
|
|
||||||
wc.cbWndExtra = sizeof(void*) + sizeof(int); // Make room for one pointer
|
|
||||||
wc.hInstance = GetModuleHandleW(NULL);
|
|
||||||
wc.hCursor = LoadCursorW(NULL, IDC_ARROW);
|
|
||||||
wc.hbrBackground = NULL; // No background
|
|
||||||
wc.lpszMenuName = NULL; // No menu
|
|
||||||
wc.lpszClassName = _GLFW_WNDCLASSNAME;
|
|
||||||
|
|
||||||
// Load user-provided icon if available
|
|
||||||
wc.hIcon = LoadIconW(GetModuleHandleW(NULL), L"GLFW_ICON");
|
|
||||||
if (!wc.hIcon)
|
|
||||||
{
|
|
||||||
// No user-provided icon found, load default icon
|
|
||||||
wc.hIcon = LoadIconW(NULL, IDI_WINLOGO);
|
|
||||||
}
|
|
||||||
|
|
||||||
classAtom = RegisterClassW(&wc);
|
|
||||||
if (!classAtom)
|
|
||||||
{
|
|
||||||
_glfwInputError(GLFW_PLATFORM_ERROR,
|
|
||||||
"Win32: Failed to register window class");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return classAtom;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Creates the GLFW window and rendering context
|
// Creates the GLFW window and rendering context
|
||||||
//
|
//
|
||||||
static int createWindow(_GLFWwindow* window,
|
static int createWindow(_GLFWwindow* window,
|
||||||
@ -986,6 +951,52 @@ static void destroyWindow(_GLFWwindow* window)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
////// GLFW internal API //////
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// Registers the GLFW window class
|
||||||
|
//
|
||||||
|
GLboolean _glfwRegisterWindowClass(void)
|
||||||
|
{
|
||||||
|
WNDCLASSW wc;
|
||||||
|
|
||||||
|
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
|
||||||
|
wc.lpfnWndProc = (WNDPROC) windowProc;
|
||||||
|
wc.cbClsExtra = 0; // No extra class data
|
||||||
|
wc.cbWndExtra = sizeof(void*) + sizeof(int); // Make room for one pointer
|
||||||
|
wc.hInstance = GetModuleHandleW(NULL);
|
||||||
|
wc.hCursor = LoadCursorW(NULL, IDC_ARROW);
|
||||||
|
wc.hbrBackground = NULL; // No background
|
||||||
|
wc.lpszMenuName = NULL; // No menu
|
||||||
|
wc.lpszClassName = _GLFW_WNDCLASSNAME;
|
||||||
|
|
||||||
|
// Load user-provided icon if available
|
||||||
|
wc.hIcon = LoadIconW(GetModuleHandleW(NULL), L"GLFW_ICON");
|
||||||
|
if (!wc.hIcon)
|
||||||
|
{
|
||||||
|
// No user-provided icon found, load default icon
|
||||||
|
wc.hIcon = LoadIconW(NULL, IDI_WINLOGO);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!RegisterClassW(&wc))
|
||||||
|
{
|
||||||
|
_glfwInputError(GLFW_PLATFORM_ERROR,
|
||||||
|
"Win32: Failed to register window class");
|
||||||
|
return GL_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return GL_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unregisters the GLFW window class
|
||||||
|
//
|
||||||
|
void _glfwUnregisterWindowClass(void)
|
||||||
|
{
|
||||||
|
UnregisterClassW(_GLFW_WNDCLASSNAME, GetModuleHandleW(NULL));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
////// GLFW platform API //////
|
////// GLFW platform API //////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
@ -997,13 +1008,6 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window,
|
|||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
if (!_glfw.win32.classAtom)
|
|
||||||
{
|
|
||||||
_glfw.win32.classAtom = registerWindowClass();
|
|
||||||
if (!_glfw.win32.classAtom)
|
|
||||||
return GL_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!createWindow(window, wndconfig, ctxconfig, fbconfig))
|
if (!createWindow(window, wndconfig, ctxconfig, fbconfig))
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user