aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/views
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2015-06-16 12:47:25 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-06-16 12:47:25 -0700
commit85ab55114f3e2d688d0705e3482fc77ec8a46a64 (patch)
tree8be1f8a1da3e985e7fa5a4fb18af54707ce4cc90 /src/views
parent5b16e740fe6ab6d679083d06f07651602265081b (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.cpp7
-rw-r--r--src/views/win/SkOSWindow_win.cpp167
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