Merge remote-tracking branch 'jturney/master'
This commit is contained in:
commit
61f87a75f2
|
@ -48,9 +48,7 @@ glapi_sources = \
|
|||
glthread.c \
|
||||
glthread.h
|
||||
|
||||
libglxdri_la_SOURCES = \
|
||||
extension_string.c \
|
||||
extension_string.h
|
||||
libglxdri_la_SOURCES =
|
||||
|
||||
if DRI
|
||||
libglxdri_la_SOURCES += glxdri.c
|
||||
|
@ -65,6 +63,8 @@ libglxdri_la_LIBADD = $(DLOPEN_LIBS)
|
|||
libglx_la_SOURCES = \
|
||||
$(indirect_sources) \
|
||||
$(glapi_sources) \
|
||||
extension_string.c \
|
||||
extension_string.h \
|
||||
indirect_util.c \
|
||||
indirect_util.h \
|
||||
indirect_program.c \
|
||||
|
|
|
@ -395,8 +395,15 @@ void __glXScreenInit(__GLXscreen *pGlxScreen, ScreenPtr pScreen)
|
|||
if (depth == pScreen->visuals[i].nplanes)
|
||||
break;
|
||||
}
|
||||
/* if it can't, fix up the fbconfig to not advertise window support */
|
||||
if (i == pScreen->numVisuals)
|
||||
config->drawableType &= ~(GLX_WINDOW_BIT);
|
||||
|
||||
/* fbconfig must support window drawables */
|
||||
if (!(config->drawableType & GLX_WINDOW_BIT)) {
|
||||
config->visualID = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Create a new X visual for our FBconfig. */
|
||||
visual = AddScreenVisuals(pScreen, 1, depth);
|
||||
|
|
|
@ -50,7 +50,7 @@ BEGIN
|
|||
LTEXT BUILDERSTRING, IDC_STATIC, 36, 28, 220, 8
|
||||
LTEXT "This software is licensed under the terms of the MIT/X11 License.", IDC_STATIC, 36, 48, 220, 20
|
||||
CONTROL __VENDORDWEBSUPPORT__, ID_ABOUT_WEBSITE, "Button",
|
||||
BS_OWNERDRAW | WS_TABSTOP, 36, 68, 68, 8
|
||||
BS_OWNERDRAW | WS_TABSTOP, 36, 68, 220, 8
|
||||
DEFPUSHBUTTON "&OK", IDOK, 105, 85, 50, 15
|
||||
END
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ winDrawURLWindow (LPARAM lParam)
|
|||
/* Draw it */
|
||||
SetBkMode (draw->hDC, OPAQUE);
|
||||
SelectObject (draw->hDC, font);
|
||||
DrawText (draw->hDC, str, strlen (str),&rect,DT_CENTER | DT_VCENTER);
|
||||
DrawText (draw->hDC, str, strlen (str),&rect,DT_LEFT | DT_VCENTER);
|
||||
/* Delete the created font, replace it with stock font */
|
||||
DeleteObject (SelectObject (draw->hDC, GetStockObject (ANSI_VAR_FONT)));
|
||||
}
|
||||
|
|
|
@ -493,6 +493,8 @@ winCreateWindowsWindow (WindowPtr pWin)
|
|||
winPrivScreenPtr pScreenPriv = pWinPriv->pScreenPriv;
|
||||
WinXSizeHints hints;
|
||||
WindowPtr pDaddy;
|
||||
DWORD dwStyle, dwExStyle;
|
||||
RECT rc;
|
||||
|
||||
winInitMultiWindowClass();
|
||||
|
||||
|
@ -517,6 +519,8 @@ winCreateWindowsWindow (WindowPtr pWin)
|
|||
iY = CW_USEDEFAULT;
|
||||
}
|
||||
|
||||
winDebug("winCreateWindowsWindow - %dx%d @ %dx%d\n", iWidth, iHeight, iX, iY);
|
||||
|
||||
if (winMultiWindowGetTransientFor (pWin, &pDaddy))
|
||||
{
|
||||
if (pDaddy)
|
||||
|
@ -538,16 +542,35 @@ winCreateWindowsWindow (WindowPtr pWin)
|
|||
}
|
||||
}
|
||||
|
||||
/* Create the window */
|
||||
/* Make it OVERLAPPED in create call since WS_POPUP doesn't support */
|
||||
/* Make it WS_OVERLAPPED in create call since WS_POPUP doesn't support */
|
||||
/* CW_USEDEFAULT, change back to popup after creation */
|
||||
hWnd = CreateWindowExA (WS_EX_TOOLWINDOW, /* Extended styles */
|
||||
dwStyle = WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
|
||||
dwExStyle = WS_EX_TOOLWINDOW;
|
||||
|
||||
/*
|
||||
Calculate the window coordinates containing the requested client area,
|
||||
being careful to preseve CW_USEDEFAULT
|
||||
*/
|
||||
rc.top = (iY != CW_USEDEFAULT) ? iY : 0;
|
||||
rc.left = (iX != CW_USEDEFAULT) ? iX : 0;
|
||||
rc.bottom = rc.top + iHeight;
|
||||
rc.right = rc.left + iWidth;
|
||||
AdjustWindowRectEx(&rc, dwStyle, FALSE, dwExStyle);
|
||||
if (iY != CW_USEDEFAULT) iY = rc.top;
|
||||
if (iX != CW_USEDEFAULT) iX = rc.left;
|
||||
iHeight = rc.bottom - rc.top;
|
||||
iWidth = rc.right - rc.left;
|
||||
|
||||
winDebug("winCreateWindowsWindow - %dx%d @ %dx%d\n", iWidth, iHeight, iX, iY);
|
||||
|
||||
/* Create the window */
|
||||
hWnd = CreateWindowExA (dwExStyle, /* Extended styles */
|
||||
WINDOW_CLASS_X, /* Class name */
|
||||
WINDOW_TITLE_X, /* Window name */
|
||||
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
|
||||
dwStyle, /* Styles */
|
||||
iX, /* Horizontal position */
|
||||
iY, /* Vertical position */
|
||||
iWidth, /* Right edge */
|
||||
iWidth, /* Right edge */
|
||||
iHeight, /* Bottom edge */
|
||||
hFore, /* Null or Parent window if transient*/
|
||||
(HMENU) NULL, /* No menu */
|
||||
|
@ -569,6 +592,10 @@ winCreateWindowsWindow (WindowPtr pWin)
|
|||
SetWindowLongPtr(hWnd, GWL_STYLE, WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
|
||||
SetWindowPos (hWnd, 0, 0, 0, 0, 0,
|
||||
SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
|
||||
|
||||
/* Adjust the X window to match the window placement we actually got... */
|
||||
winAdjustXWindow (pWin, hWnd);
|
||||
|
||||
/* Make sure it gets the proper system menu for a WS_POPUP, too */
|
||||
GetSystemMenu (hWnd, TRUE);
|
||||
|
||||
|
|
|
@ -1008,6 +1008,64 @@ winTopLevelWindowProc (HWND hwnd, UINT message,
|
|||
winAdjustXWindow (pWin, hwnd);
|
||||
return 0; /* end of WM_SIZE handler */
|
||||
|
||||
case WM_STYLECHANGING:
|
||||
/*
|
||||
When the style changes, adjust the Windows window size so the client area remains the same size,
|
||||
and adjust the Windows window position so that the client area remains in the same place.
|
||||
*/
|
||||
{
|
||||
RECT newWinRect;
|
||||
DWORD dwExStyle;
|
||||
DWORD dwStyle;
|
||||
DWORD newStyle = ((STYLESTRUCT *)lParam)->styleNew;
|
||||
WINDOWINFO wi;
|
||||
|
||||
dwExStyle = GetWindowLongPtr (hwnd, GWL_EXSTYLE);
|
||||
dwStyle = GetWindowLongPtr (hwnd, GWL_STYLE);
|
||||
|
||||
winDebug("winTopLevelWindowProc - WM_STYLECHANGING from %08x %08x\n", dwStyle, dwExStyle);
|
||||
|
||||
if (wParam == GWL_EXSTYLE)
|
||||
dwExStyle = newStyle;
|
||||
|
||||
if (wParam == GWL_STYLE)
|
||||
dwStyle = newStyle;
|
||||
|
||||
winDebug("winTopLevelWindowProc - WM_STYLECHANGING to %08x %08x\n", dwStyle, dwExStyle);
|
||||
|
||||
/* Get client rect in screen coordinates */
|
||||
wi.cbSize = sizeof(WINDOWINFO);
|
||||
GetWindowInfo(hwnd, &wi);
|
||||
|
||||
winDebug("winTopLevelWindowProc - WM_STYLECHANGING client area {%d, %d, %d, %d}, {%d x %d}\n", wi.rcClient.left, wi.rcClient.top, wi.rcClient.right, wi.rcClient.bottom, wi.rcClient.right - wi.rcClient.left, wi.rcClient.bottom - wi.rcClient.top);
|
||||
|
||||
newWinRect = wi.rcClient;
|
||||
if (!AdjustWindowRectEx(&newWinRect, dwStyle, FALSE, dwExStyle))
|
||||
winDebug("winTopLevelWindowProc - WM_STYLECHANGING AdjustWindowRectEx failed\n");
|
||||
|
||||
winDebug("winTopLevelWindowProc - WM_STYLECHANGING window area should be {%d, %d, %d, %d}, {%d x %d}\n", newWinRect.left, newWinRect.top, newWinRect.right, newWinRect.bottom, newWinRect.right - newWinRect.left, newWinRect.bottom - newWinRect.top);
|
||||
|
||||
/*
|
||||
Style change hasn't happened yet, so we can't adjust the window size yet, as the winAdjustXWindow()
|
||||
which WM_SIZE does will use the current (unchanged) style. Instead make a note to change it when
|
||||
WM_STYLECHANGED is received...
|
||||
*/
|
||||
pWinPriv->hDwp = BeginDeferWindowPos(1);
|
||||
pWinPriv->hDwp = DeferWindowPos(pWinPriv->hDwp, hwnd, NULL, newWinRect.left, newWinRect.top, newWinRect.right - newWinRect.left, newWinRect.bottom - newWinRect.top, SWP_NOACTIVATE | SWP_NOZORDER);
|
||||
}
|
||||
return 0;
|
||||
|
||||
case WM_STYLECHANGED:
|
||||
{
|
||||
if (pWinPriv->hDwp)
|
||||
{
|
||||
EndDeferWindowPos(pWinPriv->hDwp);
|
||||
pWinPriv->hDwp = NULL;
|
||||
}
|
||||
winDebug("winTopLevelWindowProc - WM_STYLECHANGED done\n");
|
||||
}
|
||||
return 0;
|
||||
|
||||
case WM_MOUSEACTIVATE:
|
||||
|
||||
/* Check if this window needs to be made active when clicked */
|
||||
|
|
|
@ -79,6 +79,7 @@ typedef struct
|
|||
HWND hWnd;
|
||||
winPrivScreenPtr pScreenPriv;
|
||||
Bool fXKilled;
|
||||
HDWP hDwp;
|
||||
|
||||
/* Privates used by primary fb DirectDraw server */
|
||||
LPDDSURFACEDESC pddsdPrimary;
|
||||
|
|
Loading…
Reference in New Issue
Block a user