diff options
author | 2015-06-16 12:47:25 -0700 | |
---|---|---|
committer | 2015-06-16 12:47:25 -0700 | |
commit | 85ab55114f3e2d688d0705e3482fc77ec8a46a64 (patch) | |
tree | 8be1f8a1da3e985e7fa5a4fb18af54707ce4cc90 /src/views | |
parent | 5b16e740fe6ab6d679083d06f07651602265081b (diff) |
Move closeWindow()/setFullscreen()/setVSynv() from SkWindow to SkOSWindow
Rename setFullscreen to makeFullscreen, drop the param, return a bool.
Review URL: https://codereview.chromium.org/1181723006
Diffstat (limited to 'src/views')
-rw-r--r-- | src/views/unix/SkOSWindow_Unix.cpp | 7 | ||||
-rw-r--r-- | src/views/win/SkOSWindow_win.cpp | 167 |
2 files changed, 74 insertions, 100 deletions
diff --git a/src/views/unix/SkOSWindow_Unix.cpp b/src/views/unix/SkOSWindow_Unix.cpp index f7aaceef02..79fd011fb2 100644 --- a/src/views/unix/SkOSWindow_Unix.cpp +++ b/src/views/unix/SkOSWindow_Unix.cpp @@ -456,10 +456,10 @@ enum { _NET_WM_STATE_TOGGLE =2 }; -void SkOSWindow::setFullscreen(bool setFullscreen) { +bool SkOSWindow::makeFullscreen() { Display* dsp = fUnixWindow.fDisplay; if (NULL == dsp) { - return; + return false; } // Full screen @@ -472,12 +472,13 @@ void SkOSWindow::setFullscreen(bool setFullscreen) { evt.xclient.window = fUnixWindow.fWin; evt.xclient.message_type = wm_state; evt.xclient.format = 32; - evt.xclient.data.l[0] = setFullscreen ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE; + evt.xclient.data.l[0] = _NET_WM_STATE_ADD; evt.xclient.data.l[1] = fullscreen; evt.xclient.data.l[2] = 0; XSendEvent(dsp, DefaultRootWindow(dsp), False, SubstructureRedirectMask | SubstructureNotifyMask, &evt); + return true; } void SkOSWindow::setVsync(bool vsync) { diff --git a/src/views/win/SkOSWindow_win.cpp b/src/views/win/SkOSWindow_win.cpp index a0288d973c..b0bb76ca19 100644 --- a/src/views/win/SkOSWindow_win.cpp +++ b/src/views/win/SkOSWindow_win.cpp @@ -60,7 +60,6 @@ SkOSWindow::SkOSWindow(const void* winInit) { } SkOSWindow::~SkOSWindow() { - this->setFullscreen(false); #if SK_SUPPORT_GPU if (fHGLRC) { wglDeleteContext((HGLRC)fHGLRC); @@ -82,8 +81,7 @@ SkOSWindow::~SkOSWindow() { } #endif // SK_ANGLE #endif // SK_SUPPORT_GPU - gHwndToOSWindowMap.remove(fHWND); - DestroyWindow((HWND)fHWND); + this->closeWindow(); } static SkKey winToskKey(WPARAM vk) { @@ -613,106 +611,78 @@ void SkOSWindow::present() { } } -void SkOSWindow::setFullscreen(bool fullscreen) { - if (fullscreen == fFullscreen) { - return; +bool SkOSWindow::makeFullscreen() { + if (fFullscreen) { + return true; } if (fHGLRC) { this->detachGL(); } // This is hacked together from various sources on the web. It can certainly be improved and be // made more robust. - if (fullscreen) { - // Save current window/resolution information. - fSavedWindowState.fZoomed = SkToBool(IsZoomed((HWND)fHWND)); - if (fSavedWindowState.fZoomed) { - SendMessage((HWND)fHWND, WM_SYSCOMMAND, SC_RESTORE, 0); - } - fSavedWindowState.fStyle = GetWindowLong((HWND)fHWND, GWL_STYLE); - fSavedWindowState.fExStyle = GetWindowLong((HWND)fHWND, GWL_EXSTYLE); - GetWindowRect((HWND)fHWND, &fSavedWindowState.fRect); - DEVMODE dmScreenSettings; // Device Mode - memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); // Makes Sure Memory's Cleared - dmScreenSettings.dmSize=sizeof(dmScreenSettings); // Size Of The Devmode Structure - EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dmScreenSettings); - fSavedWindowState.fScreenWidth = dmScreenSettings.dmPelsWidth; - fSavedWindowState.fScreenHeight = dmScreenSettings.dmPelsHeight; - fSavedWindowState.fScreenBits = dmScreenSettings.dmBitsPerPel; - fSavedWindowState.fHWND = fHWND; - } - - if (fullscreen) { - // Try different sizes to find an allowed setting? Use ChangeDisplaySettingsEx? - static const int kWidth = 1280; - static const int kHeight = 1024; - DEVMODE dmScreenSettings; - memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); - dmScreenSettings.dmSize=sizeof(dmScreenSettings); - dmScreenSettings.dmPelsWidth = kWidth; - dmScreenSettings.dmPelsHeight = kHeight; - dmScreenSettings.dmBitsPerPel = 32; - dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; - if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) { - return; - } - RECT WindowRect; - WindowRect.left = 0; - WindowRect.right = kWidth; - WindowRect.top = 0; - WindowRect.bottom = kHeight; - ShowCursor(FALSE); - AdjustWindowRectEx(&WindowRect, WS_POPUP, FALSE, WS_EX_APPWINDOW); - HWND fsHWND = CreateWindowEx( - WS_EX_APPWINDOW, - fWinInit.fClass, - NULL, - WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_POPUP, - 0, 0, WindowRect.right-WindowRect.left, WindowRect.bottom-WindowRect.top, - NULL, - NULL, - fWinInit.fInstance, - NULL - ); - if (!fsHWND) { - return; - } - // Hide the old window and set the entry in the global mapping for this SkOSWindow to the - // new HWND. - ShowWindow((HWND)fHWND, SW_HIDE); - gHwndToOSWindowMap.remove(fHWND); - fHWND = fsHWND; - gHwndToOSWindowMap.set(fHWND, this); - this->updateSize(); - } else { - DEVMODE dmScreenSettings; - memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); - dmScreenSettings.dmSize=sizeof(dmScreenSettings); - dmScreenSettings.dmPelsWidth = fSavedWindowState.fScreenWidth; - dmScreenSettings.dmPelsHeight = fSavedWindowState.fScreenHeight; - dmScreenSettings.dmBitsPerPel = fSavedWindowState.fScreenBits; - dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; - if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) { - return; - } - gHwndToOSWindowMap.remove(fHWND); - DestroyWindow((HWND)fHWND); - fHWND = fSavedWindowState.fHWND; - gHwndToOSWindowMap.set(fHWND, this); - ShowWindow((HWND)fHWND, SW_SHOW); - SetWindowLong((HWND)fHWND, GWL_STYLE, fSavedWindowState.fStyle); - SetWindowLong((HWND)fHWND, GWL_EXSTYLE, fSavedWindowState.fExStyle); - - int width = fSavedWindowState.fRect.right - fSavedWindowState.fRect.left; - int height = fSavedWindowState.fRect.right - fSavedWindowState.fRect.left; - SetWindowPos((HWND)fHWND, NULL, fSavedWindowState.fRect.left, fSavedWindowState.fRect.top, - width, height, - SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); - if (fSavedWindowState.fZoomed) { - SendMessage((HWND)fHWND, WM_SYSCOMMAND, SC_MAXIMIZE, 0); - } - this->updateSize(); + + // Save current window/resolution information. We do this in case we ever implement switching + // back to windowed mode. + fSavedWindowState.fZoomed = SkToBool(IsZoomed((HWND)fHWND)); + if (fSavedWindowState.fZoomed) { + SendMessage((HWND)fHWND, WM_SYSCOMMAND, SC_RESTORE, 0); } - fFullscreen = fullscreen; + fSavedWindowState.fStyle = GetWindowLong((HWND)fHWND, GWL_STYLE); + fSavedWindowState.fExStyle = GetWindowLong((HWND)fHWND, GWL_EXSTYLE); + GetWindowRect((HWND)fHWND, &fSavedWindowState.fRect); + DEVMODE currScreenSettings; + memset(&currScreenSettings,0,sizeof(currScreenSettings)); + currScreenSettings.dmSize = sizeof(currScreenSettings); + EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &currScreenSettings); + fSavedWindowState.fScreenWidth = currScreenSettings.dmPelsWidth; + fSavedWindowState.fScreenHeight = currScreenSettings.dmPelsHeight; + fSavedWindowState.fScreenBits = currScreenSettings.dmBitsPerPel; + fSavedWindowState.fHWND = fHWND; + + // Try different sizes to find an allowed setting? Use ChangeDisplaySettingsEx? + static const int kWidth = 1280; + static const int kHeight = 1024; + DEVMODE newScreenSettings; + memset(&newScreenSettings, 0, sizeof(newScreenSettings)); + newScreenSettings.dmSize = sizeof(newScreenSettings); + newScreenSettings.dmPelsWidth = kWidth; + newScreenSettings.dmPelsHeight = kHeight; + newScreenSettings.dmBitsPerPel = 32; + newScreenSettings.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; + if (ChangeDisplaySettings(&newScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) { + return false; + } + RECT WindowRect; + WindowRect.left = 0; + WindowRect.right = kWidth; + WindowRect.top = 0; + WindowRect.bottom = kHeight; + ShowCursor(FALSE); + AdjustWindowRectEx(&WindowRect, WS_POPUP, FALSE, WS_EX_APPWINDOW); + HWND fsHWND = CreateWindowEx( + WS_EX_APPWINDOW, + fWinInit.fClass, + NULL, + WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_POPUP, + 0, 0, WindowRect.right-WindowRect.left, WindowRect.bottom-WindowRect.top, + NULL, + NULL, + fWinInit.fInstance, + NULL + ); + if (!fsHWND) { + return false; + } + // Hide the old window and set the entry in the global mapping for this SkOSWindow to the + // new HWND. + ShowWindow((HWND)fHWND, SW_HIDE); + gHwndToOSWindowMap.remove(fHWND); + fHWND = fsHWND; + gHwndToOSWindowMap.set(fHWND, this); + this->updateSize(); + + fFullscreen = true; + return true; } void SkOSWindow::setVsync(bool enable) { @@ -721,7 +691,10 @@ void SkOSWindow::setVsync(bool enable) { } void SkOSWindow::closeWindow() { - this->setFullscreen(false); DestroyWindow((HWND)fHWND); + if (fFullscreen) { + DestroyWindow((HWND)fSavedWindowState.fHWND); + } + gHwndToOSWindowMap.remove(fHWND); } #endif |