Began using monitor position for window placement.

This commit is contained in:
Camilla Berglund 2012-10-05 04:10:42 +02:00
parent ddeca47117
commit 6ac7af38d9
2 changed files with 27 additions and 9 deletions

View File

@ -728,8 +728,7 @@ static int createWindow(_GLFWwindow* window,
const _GLFWfbconfig* fbconfig) const _GLFWfbconfig* fbconfig)
{ {
DWORD dwStyle, dwExStyle; DWORD dwStyle, dwExStyle;
int fullWidth, fullHeight; int screenX, screenY, fullWidth, fullHeight;
RECT wa;
POINT pos; POINT pos;
WCHAR* wideTitle; WCHAR* wideTitle;
@ -772,14 +771,23 @@ static int createWindow(_GLFWwindow* window,
// Adjust window size for frame and title bar // Adjust window size for frame and title bar
getFullWindowSize(window, window->width, window->height, &fullWidth, &fullHeight); getFullWindowSize(window, window->width, window->height, &fullWidth, &fullHeight);
// Adjust window position to working area (e.g. if the task bar is at
// the top of the display). Fullscreen windows are always opened in
// the upper left corner regardless of the desktop working area.
if (window->monitor) if (window->monitor)
wa.left = wa.top = 0; {
// Fullscreen windows are always opened in the upper left corner
// regardless of the desktop working area
screenX = wndconfig->monitor->screenX;
screenY = wndconfig->monitor->screenY;
}
else else
{
RECT wa;
SystemParametersInfo(SPI_GETWORKAREA, 0, &wa, 0); SystemParametersInfo(SPI_GETWORKAREA, 0, &wa, 0);
// Adjust window position to working area
screenX = wa.left;
screenY = wa.top;
}
wideTitle = _glfwCreateWideStringFromUTF8(wndconfig->title); wideTitle = _glfwCreateWideStringFromUTF8(wndconfig->title);
if (!wideTitle) if (!wideTitle)
{ {
@ -792,7 +800,7 @@ static int createWindow(_GLFWwindow* window,
_GLFW_WNDCLASSNAME, _GLFW_WNDCLASSNAME,
wideTitle, wideTitle,
window->Win32.dwStyle, window->Win32.dwStyle,
wa.left, wa.top, // Window position screenX, screenY,
fullWidth, // Decorated window width fullWidth, // Decorated window width
fullHeight, // Decorated window height fullHeight, // Decorated window height
NULL, // No parent window NULL, // No parent window

View File

@ -98,6 +98,8 @@ static GLboolean createWindow(_GLFWwindow* window,
// Create the actual window // Create the actual window
{ {
int screenX, screenY;
wamask = CWBorderPixel | CWColormap | CWEventMask; wamask = CWBorderPixel | CWColormap | CWEventMask;
wa.colormap = window->X11.colormap; wa.colormap = window->X11.colormap;
@ -107,7 +109,12 @@ static GLboolean createWindow(_GLFWwindow* window,
ExposureMask | FocusChangeMask | VisibilityChangeMask | ExposureMask | FocusChangeMask | VisibilityChangeMask |
EnterWindowMask | LeaveWindowMask; EnterWindowMask | LeaveWindowMask;
if (!wndconfig->monitor) if (wndconfig->monitor)
{
screenX = wndconfig->monitor->screenX;
screenY = wndconfig->monitor->screenY;
}
else
{ {
// The /only/ reason for setting the background pixel here is that // The /only/ reason for setting the background pixel here is that
// otherwise our window won't get any decorations on systems using // otherwise our window won't get any decorations on systems using
@ -115,11 +122,14 @@ static GLboolean createWindow(_GLFWwindow* window,
wa.background_pixel = BlackPixel(_glfwLibrary.X11.display, wa.background_pixel = BlackPixel(_glfwLibrary.X11.display,
_glfwLibrary.X11.screen); _glfwLibrary.X11.screen);
wamask |= CWBackPixel; wamask |= CWBackPixel;
screenX = 0;
screenY = 0;
} }
window->X11.handle = XCreateWindow(_glfwLibrary.X11.display, window->X11.handle = XCreateWindow(_glfwLibrary.X11.display,
_glfwLibrary.X11.root, _glfwLibrary.X11.root,
0, 0, // Position screenX, screenY,
window->width, window->height, window->width, window->height,
0, // Border width 0, // Border width
visual->depth, // Color depth visual->depth, // Color depth