diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 41dac2312..6fc4809c6 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -505,7 +505,13 @@ void BBLTopbar::OnFullScreen(wxAuiToolBarEvent& event) else { wxDisplay display(this); auto size = display.GetClientArea().GetSize(); - m_frame->SetMaxSize(size + wxSize{16, 16}); +#ifdef __WXMSW__ + HWND hWnd = m_frame->GetHandle(); + RECT borderThickness; + SetRectEmpty(&borderThickness); + AdjustWindowRectEx(&borderThickness, GetWindowLongPtr(hWnd, GWL_STYLE), FALSE, 0); + m_frame->SetMaxSize(size + wxSize{-borderThickness.left + borderThickness.right, -borderThickness.top + borderThickness.bottom}); +#endif // __WXMSW__ m_normalRect = m_frame->GetRect(); m_frame->Maximize(); } @@ -530,16 +536,8 @@ void BBLTopbar::OnMouseLeftDClock(wxMouseEvent& mouse) return; #endif // __WXMSW__ - if (m_frame->IsMaximized()) { - m_frame->Restore(); - } - else { - wxDisplay display(this); - auto size = display.GetClientArea().GetSize(); - m_frame->SetMaxSize(size + wxSize{16, 16}); - m_normalRect = m_frame->GetRect(); - m_frame->Maximize(); - } + wxAuiToolBarEvent evt; + OnFullScreen(evt); } void BBLTopbar::OnFileToolItem(wxAuiToolBarEvent& evt) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index fe6e64cfd..4a313a15d 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -384,18 +384,27 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ auto setMaxSize = [this]() { wxDisplay display(this); auto size = display.GetClientArea().GetSize(); - // 8 pixels shadow - SetMaxSize(size + wxSize{16, 16}); + HWND hWnd = GetHandle(); + RECT borderThickness; + SetRectEmpty(&borderThickness); + AdjustWindowRectEx(&borderThickness, GetWindowLongPtr(hWnd, GWL_STYLE), FALSE, 0); + SetMaxSize(size + wxSize{-borderThickness.left + borderThickness.right, -borderThickness.top + borderThickness.bottom}); }; this->Bind(wxEVT_DPI_CHANGED, [setMaxSize](auto & e) { setMaxSize(); e.Skip(); }); setMaxSize(); + // SetMaximize already position window at left/top corner, even if Windows Task Bar is at left side. + // Not known why, but fix it here this->Bind(wxEVT_MAXIMIZE, [this](auto &e) { wxDisplay display(this); auto pos = display.GetClientArea().GetPosition(); - Move(pos - wxPoint{8, 8}); + HWND hWnd = GetHandle(); + RECT borderThickness; + SetRectEmpty(&borderThickness); + AdjustWindowRectEx(&borderThickness, GetWindowLongPtr(hWnd, GWL_STYLE), FALSE, 0); + Move(pos + wxPoint{borderThickness.left, borderThickness.top}); e.Skip(); }); #endif // WIN32