void TopWindow::SerializePlacement(Stream& s, bool reminimize) { GuiLock __; int version = 0; s / version; Rect rect = GetRect(); s % overlapped % rect; bool mn = state == MINIMIZED; bool mx = state == MAXIMIZED; s.Pack(mn, mx); LLOG("TopWindow::SerializePlacement / " << (s.IsStoring() ? "write" : "read")); LLOG("minimized = " << mn << ", maximized = " << mx); LLOG("rect = " << rect << ", overlapped = " << overlapped); if(s.IsLoading()) { if(mn) rect = overlapped; Rect limit = GetVirtualWorkArea(); Rect fm = windowFrameMargin; if((fm.left|fm.right|fm.top|fm.bottom) == 0) fm = Rect(8, 32, 8, 8); limit.left += fm.left; limit.right -= fm.right; limit.top += fm.top; limit.bottom -= fm.bottom; Size sz = min(rect.Size(), limit.Size()); rect = RectC( minmax(rect.left, limit.left, limit.right - sz.cx), minmax(rect.top, limit.top, limit.bottom - sz.cy), sz.cx, sz.cy); state = OVERLAPPED; if(mn && reminimize) state = MINIMIZED; if(mx) state = MAXIMIZED; if(state == OVERLAPPED) SetRect(rect); if(IsOpen()) { if(state == MINIMIZED) Minimize(false); if(state == MAXIMIZED) Maximize(false); } } }
void TopWindow::SerializePlacement(Stream& s, bool reminimize) { GuiLock __; #ifndef PLATFORM_WINCE int version = 1; s / version; Rect rect = GetRect(); s % overlapped % rect; bool mn = state == MINIMIZED; bool mx = state == MAXIMIZED; bool fs = fullscreen; // 12-05-23 Tom added fullscreen serialization if(version >= 1) s.Pack(mn, mx, fs); // 12-05-23 Tom changed from: s.Pack(mn, mx); else s.Pack(mn, mx); LLOG("TopWindow::SerializePlacement / " << (s.IsStoring() ? "write" : "read")); LLOG("minimized = " << mn << ", maximized = " << mx << ", fullscreen = " << fs); // 12-05-23 Tom extended with fullscreen LLOG("rect = " << rect << ", overlapped = " << overlapped); if(s.IsLoading()) { rect = overlapped; Rect limit = GetVirtualWorkArea(); Rect outer = rect; ::AdjustWindowRect(outer, WS_OVERLAPPEDWINDOW, FALSE); limit.left += rect.left - outer.left; limit.top += rect.top - outer.top; limit.right += rect.right - outer.right; limit.bottom += rect.bottom - outer.bottom; Size sz = min(rect.Size(), limit.Size()); rect = RectC( minmax(rect.left, limit.left, limit.right - sz.cx), minmax(rect.top, limit.top, limit.bottom - sz.cy), sz.cx, sz.cy); Overlap(); SetRect(rect); if(mn && reminimize){ state = MINIMIZED; //Minimize(); // 12-05-23 Tom removed } if(mx){ state = MAXIMIZED; //Maximize(); // 12-05-23 Tom removed } if(IsOpen()) { switch(state) { case MINIMIZED: Minimize(); break; case MAXIMIZED: Maximize(); break; } /* WINDOWPLACEMENT wp; memset(&wp,0,sizeof(WINDOWPLACEMENT)); wp.length=sizeof(WINDOWPLACEMENT); wp.showCmd = state==MINIMIZED ? SW_MINIMIZE : state==MAXIMIZED ? SW_MAXIMIZE : SW_RESTORE; wp.rcNormalPosition.left=rect.left; wp.rcNormalPosition.top=rect.top; wp.rcNormalPosition.right=rect.right; wp.rcNormalPosition.bottom=rect.bottom; ::SetWindowPlacement(GetHWND(),&wp); */ if(fs) { Overlap(); // Needed to restore normal position before fullscreen mode FullScreen(fs); // 12-05-23 Tom added for fullscreen serialization } } else // 12-05-23 Tom added for fullscreen serialization fullscreen=fs; // 12-05-23 Tom added for fullscreen serialization } #endif }