Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(959)

Unified Diff: src/views/win/SkOSWindow_win.cpp

Issue 1181723006: Move closeWindow()/setFullscreen()/setVSynv() from SkWindow to SkOSWindow (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/views/unix/SkOSWindow_Unix.cpp ('k') | tools/VisualBench.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/views/win/SkOSWindow_win.cpp
diff --git a/src/views/win/SkOSWindow_win.cpp b/src/views/win/SkOSWindow_win.cpp
index a0288d973c9d15b671dc24ed77885d0d3023d2e5..b0bb76ca19cc05071a108a6902cce64b5e4fee2e 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
« no previous file with comments | « src/views/unix/SkOSWindow_Unix.cpp ('k') | tools/VisualBench.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698