* revert my change to windowmanager move/size handling.
* made win32 ghost getClientBounds so that it returns area compatible with osx getClientBounds - if a window is non-fullscreen, substract decoration, since that'll be added by GHOST_WindowWin32() * use SetWindowLongPtr/GetWindowLongPtr (instead of SetWindowLong) as it is compatible with 64bit windows.
This commit is contained in:
@@ -750,8 +750,7 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
||||
* message without calling DefWindowProc.
|
||||
*/
|
||||
event = processWindowEvent(GHOST_kEventWindowSize, window);
|
||||
::ValidateRect(hwnd, NULL);
|
||||
break;
|
||||
break;
|
||||
case WM_CAPTURECHANGED:
|
||||
window->lostMouseCapture();
|
||||
break;
|
||||
@@ -775,8 +774,7 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
|
||||
* message without calling DefWindowProc.
|
||||
*/
|
||||
event = processWindowEvent(GHOST_kEventWindowMove, window);
|
||||
::ValidateRect(hwnd, NULL);
|
||||
break;
|
||||
break;
|
||||
case WM_ERASEBKGND:
|
||||
/* An application sends the WM_ERASEBKGND message when the window background must be
|
||||
* erased (for example, when a window is resized). The message is sent to prepare an
|
||||
|
||||
@@ -255,8 +255,8 @@ void GHOST_WindowCarbon::getClientBounds(GHOST_Rect& bounds) const
|
||||
{
|
||||
Rect rect;
|
||||
GHOST_ASSERT(getValid(), "GHOST_WindowCarbon::getClientBounds(): window invalid")
|
||||
::GetPortBounds(m_grafPtr, &rect);
|
||||
//::GetWindowBounds(m_windowRef, kWindowContentRgn, &rect);
|
||||
//::GetPortBounds(m_grafPtr, &rect);
|
||||
::GetWindowBounds(m_windowRef, kWindowContentRgn, &rect);
|
||||
|
||||
bounds.m_b = rect.bottom;
|
||||
bounds.m_l = rect.left;
|
||||
|
||||
@@ -145,7 +145,7 @@ GHOST_WindowWin32::GHOST_WindowWin32(
|
||||
}
|
||||
if (m_hWnd) {
|
||||
// Store a pointer to this class in the window structure
|
||||
LONG result = ::SetWindowLong(m_hWnd, GWL_USERDATA, (LONG)this);
|
||||
LONG result = ::SetWindowLongPtr(m_hWnd, GWL_USERDATA, (LONG)this);
|
||||
|
||||
// Store the device context
|
||||
m_hDC = ::GetDC(m_hWnd);
|
||||
@@ -292,12 +292,20 @@ void GHOST_WindowWin32::getWindowBounds(GHOST_Rect& bounds) const
|
||||
void GHOST_WindowWin32::getClientBounds(GHOST_Rect& bounds) const
|
||||
{
|
||||
RECT rect;
|
||||
::GetClientRect(m_hWnd, &rect);
|
||||
//::GetWindowRect(m_hWnd, &rect);
|
||||
bounds.m_b = rect.bottom;
|
||||
bounds.m_l = rect.left;
|
||||
bounds.m_r = rect.right;
|
||||
bounds.m_t = rect.top;
|
||||
::GetWindowRect(m_hWnd, &rect);
|
||||
|
||||
LONG_PTR result = ::GetWindowLongPtr(m_hWnd, GWL_STYLE);
|
||||
if((result & (WS_POPUP | WS_MAXIMIZE)) != (WS_POPUP | WS_MAXIMIZE)) {
|
||||
bounds.m_b = rect.bottom-GetSystemMetrics(SM_CYCAPTION)-GetSystemMetrics(SM_CYSIZEFRAME)*2;
|
||||
bounds.m_l = rect.left;
|
||||
bounds.m_r = rect.right-GetSystemMetrics(SM_CYSIZEFRAME)*2;
|
||||
bounds.m_t = rect.top;
|
||||
} else {
|
||||
bounds.m_b = rect.bottom;
|
||||
bounds.m_l = rect.left;
|
||||
bounds.m_r = rect.right;
|
||||
bounds.m_t = rect.top;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -406,11 +414,11 @@ GHOST_TSuccess GHOST_WindowWin32::setState(GHOST_TWindowState state)
|
||||
//Solves redraw problems when switching from fullscreen to normal.
|
||||
|
||||
wp.showCmd = SW_SHOWMAXIMIZED;
|
||||
SetWindowLong(m_hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW);
|
||||
SetWindowLongPtr(m_hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW);
|
||||
break;
|
||||
case GHOST_kWindowStateFullScreen:
|
||||
wp.showCmd = SW_SHOWMAXIMIZED;
|
||||
SetWindowLong(m_hWnd, GWL_STYLE, WS_POPUP | WS_MAXIMIZE);
|
||||
SetWindowLongPtr(m_hWnd, GWL_STYLE, WS_POPUP | WS_MAXIMIZE);
|
||||
break;
|
||||
case GHOST_kWindowStateNormal:
|
||||
default:
|
||||
|
||||
@@ -368,23 +368,20 @@ int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private)
|
||||
}
|
||||
case GHOST_kEventWindowSize:
|
||||
case GHOST_kEventWindowMove: {
|
||||
GHOST_RectangleHandle client_rect, window_rect;
|
||||
GHOST_RectangleHandle client_rect;
|
||||
int l, t, r, b, scr_w, scr_h;
|
||||
int wl, wt, wr, wb;
|
||||
|
||||
window_rect = GHOST_GetWindowBounds(win->ghostwin);
|
||||
client_rect= GHOST_GetClientBounds(win->ghostwin);
|
||||
GHOST_GetRectangle(client_rect, &l, &t, &r, &b);
|
||||
GHOST_GetRectangle(window_rect, &wl, &wt, &wr, &wb);
|
||||
|
||||
GHOST_DisposeRectangle(client_rect);
|
||||
GHOST_DisposeRectangle(window_rect);
|
||||
|
||||
wm_get_screensize(&scr_w, &scr_h);
|
||||
win->sizex= r-l;
|
||||
win->sizey= b-t;
|
||||
win->posx= wl;
|
||||
win->posy= scr_h - wt - win->sizey;
|
||||
win->posx= l;
|
||||
win->posy= scr_h - t - win->sizey;
|
||||
|
||||
if(type!=GHOST_kEventWindowSize)
|
||||
printf("win move event pos %d %d size %d %d\n", win->posx, win->posy, win->sizex, win->sizey);
|
||||
|
||||
Reference in New Issue
Block a user