wxMSW could return negative client size for tiny windows with borders, this
was unexpected and shouldn't happen so explicitly ensure it does not.
Also add a unit test to check that this problem doesn't exist in other ports.
Closes #13184.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67754
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
if ( y )
*y = rect.bottom;
}
if ( y )
*y = rect.bottom;
}
+
+ // The size of the client window can't be negative but ::GetClientRect()
+ // can return negative size for an extremely small (1x1) window with
+ // borders so ensure that we correct it here as having negative sizes is
+ // completely unexpected.
+ if ( x && *x < 0 )
+ *x = 0;
+ if ( y && *y < 0 )
+ *y = 0;
}
void wxWindowMSW::DoGetPosition(int *x, int *y) const
}
void wxWindowMSW::DoGetPosition(int *x, int *y) const
private:
CPPUNIT_TEST_SUITE( ClientSizeTestCase );
CPPUNIT_TEST( ClientToWindow );
private:
CPPUNIT_TEST_SUITE( ClientSizeTestCase );
CPPUNIT_TEST( ClientToWindow );
+ CPPUNIT_TEST( ClientSizeNotNegative );
CPPUNIT_TEST( WindowToClient );
CPPUNIT_TEST_SUITE_END();
void ClientToWindow();
CPPUNIT_TEST( WindowToClient );
CPPUNIT_TEST_SUITE_END();
void ClientToWindow();
+ void ClientSizeNotNegative();
void WindowToClient();
wxWindow *m_win;
void WindowToClient();
wxWindow *m_win;
m_win->ClientToWindowSize(m_win->GetClientSize()));
}
m_win->ClientToWindowSize(m_win->GetClientSize()));
}
+void ClientSizeTestCase::ClientSizeNotNegative()
+{
+ wxWindow* w = new wxWindow(wxTheApp->GetTopWindow(), -1,
+ wxDefaultPosition, wxDefaultSize,
+ wxBORDER_THEME);
+ w->SetSize(wxSize(1,1));
+ const wxSize szw = w->GetClientSize();
+ CPPUNIT_ASSERT(szw.GetWidth() >= 0);
+ CPPUNIT_ASSERT(szw.GetHeight() >= 0);
+ w->Destroy();
+}
+
void ClientSizeTestCase::WindowToClient()
{
CPPUNIT_ASSERT(m_win->GetClientSize() ==
void ClientSizeTestCase::WindowToClient()
{
CPPUNIT_ASSERT(m_win->GetClientSize() ==