st/wgl: Allow to create pbuffers bigger than the desktop.

We use a hidden window for pbuffer contexts, but Windows limits window
sizes to the desktop size by default. This means that creating a big
pbuffer on a small resolution single monitor would truncate the pbuffer
size to the desktop.

This change overrides the windows maximum size, allow to create windows
arbitrarily large.
This commit is contained in:
José Fonseca
2011-05-03 19:09:53 +01:00
parent c636daa145
commit 9fbd708932
@@ -40,6 +40,30 @@
#include "stw_framebuffer.h"
#define LARGE_WINDOW_SIZE 60000
static LRESULT CALLBACK
WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
MINMAXINFO *pMMI;
switch (uMsg) {
case WM_GETMINMAXINFO:
// Allow to create a window bigger than the desktop
pMMI = (MINMAXINFO *)lParam;
pMMI->ptMaxSize.x = LARGE_WINDOW_SIZE;
pMMI->ptMaxSize.y = LARGE_WINDOW_SIZE;
pMMI->ptMaxTrackSize.x = LARGE_WINDOW_SIZE;
pMMI->ptMaxTrackSize.y = LARGE_WINDOW_SIZE;
break;
default:
break;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
HPBUFFERARB WINAPI
wglCreatePbufferARB(HDC _hDC,
int iPixelFormat,
@@ -109,7 +133,7 @@ wglCreatePbufferARB(HDC _hDC,
wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.lpfnWndProc = DefWindowProc;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = "wglpbuffer";
wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wc);