save window position and size

This commit is contained in:
Eduardo Bart
2012-01-06 06:48:59 -02:00
parent 0cb5facd7a
commit 028441831d
31 changed files with 315 additions and 158 deletions

View File

@@ -31,3 +31,11 @@ X11Window window;
#endif
PlatformWindow& g_window = window;
void PlatformWindow::updateUnmaximizedCoords()
{
if(!isMaximized()) {
m_unmaximizedPos = m_pos;
m_unmaximizedSize = m_size;
}
}

View File

@@ -59,9 +59,11 @@ public:
int getDisplayWidth() { return getDisplaySize().width(); }
int getDisplayHeight() { return getDisplaySize().width(); }
Size getUnmaximizedSize() { return m_unmaximizedSize; }
Size getSize() { return m_size; }
int getWidth() { return m_size.width(); }
int getHeight() { return m_size.height(); }
Point getUnmaximizedPos() { return m_unmaximizedPos; }
Point getPos() { return m_pos; }
int getX() { return m_pos.x; }
int getY() { return m_pos.y; }
@@ -70,6 +72,7 @@ public:
bool isVisible() { return m_visible; }
bool isFullscreen() { return m_fullscreen; }
virtual bool isMaximized() = 0;
bool hasFocus() { return m_focused; }
void setOnClose(const SimpleCallback& onClose) { m_onClose = onClose; }
@@ -77,8 +80,12 @@ public:
void setOnInputEvent(const OnInputEventCallback& onInputEvent) { m_onInputEvent = onInputEvent; }
protected:
void updateUnmaximizedCoords();
Size m_size;
Point m_pos;
Size m_unmaximizedSize;
Point m_unmaximizedPos;
InputEvent m_inputEvent;
Boolean<false> m_created;

View File

@@ -354,6 +354,7 @@ void WIN32Window::resize(const Size& size)
void WIN32Window::show()
{
updateUnmaximizedCoords();
if(m_maximized)
ShowWindow(m_window, SW_MAXIMIZE);
else
@@ -472,6 +473,7 @@ LRESULT WIN32Window::windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
case WM_MOVE: {
m_pos.x = LOWORD(lParam);
m_pos.y = HIWORD(lParam);
updateUnmaximizedCoords();
break;
}
case WM_SIZE: {
@@ -487,6 +489,7 @@ LRESULT WIN32Window::windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
m_visible = !(wParam == SIZE_MINIMIZED);
m_size.setWidth(LOWORD(lParam));
m_size.setHeight(HIWORD(lParam));
updateUnmaximizedCoords();
m_onResize(m_size);
break;
}

View File

@@ -278,6 +278,7 @@ void X11Window::internalCreateWindow()
vis = CopyFromParent;
}
updateUnmaximizedCoords();
m_window = XCreateWindow(m_display, m_rootWindow,
m_pos.x, m_pos.y, m_size.width(), m_size.height(),
0,
@@ -494,6 +495,8 @@ void X11Window::hide()
void X11Window::maximize()
{
updateUnmaximizedCoords();
Atom wmState = XInternAtom(m_display, "_NET_WM_STATE", False);
Atom wmStateMaximizedVert = XInternAtom(m_display, "_NET_WM_STATE_MAXIMIZED_VERT", False);
Atom wmStateMaximizedHorz = XInternAtom(m_display, "_NET_WM_STATE_MAXIMIZED_HORZ", False);
@@ -561,6 +564,7 @@ void X11Window::poll()
// updates window pos
m_pos = newPos;
updateUnmaximizedCoords();
break;
}
case SelectionRequest: {
@@ -916,6 +920,9 @@ std::string X11Window::getPlatformType()
bool X11Window::isMaximized()
{
if(!m_display || !m_window)
return false;
Atom wmState = XInternAtom(m_display, "_NET_WM_STATE", False);
Atom wmStateMaximizedVert = XInternAtom(m_display, "_NET_WM_STATE_MAXIMIZED_VERT", False);
Atom wmStateMaximizedHorz = XInternAtom(m_display, "_NET_WM_STATE_MAXIMIZED_HORZ", False);
@@ -940,7 +947,7 @@ bool X11Window::isMaximized()
}
if(maximizedMask == 3)
maximizedMask = true;
maximized = true;
XFree(propertyValue);
}