void SetSizeTestCase::BestSize() { CPPUNIT_ASSERT_EQUAL( wxSize(50, 250), m_win->GetBestSize() ); m_win->SetMinSize(wxSize(100, 100)); CPPUNIT_ASSERT_EQUAL( wxSize(100, 250), m_win->GetBestSize() ); m_win->SetMaxSize(wxSize(200, 200)); CPPUNIT_ASSERT_EQUAL( wxSize(100, 200), m_win->GetBestSize() ); }
void wxDynamicSashWindowLeaf::ResizeChild(const wxSize& size) { if (m_child) { if (m_impl->m_window->HasFlag(wxDS_MANAGE_SCROLLBARS)) { wxSize best_size = m_child->GetBestSize(); if (best_size.GetWidth() < size.GetWidth()) best_size.SetWidth(size.GetWidth()); if (best_size.GetHeight() < size.GetHeight()) best_size.SetHeight(size.GetHeight()); m_child->SetSize(best_size); int hpos = m_hscroll->GetThumbPosition(); int vpos = m_vscroll->GetThumbPosition(); if (hpos < 0) hpos = 0; if (vpos < 0) vpos = 0; if (hpos > best_size.GetWidth() - size.GetWidth()) hpos = best_size.GetWidth() - size.GetWidth(); if (vpos > best_size.GetHeight() - size.GetHeight()) vpos = best_size.GetHeight() - size.GetHeight(); m_hscroll->SetScrollbar(hpos, size.GetWidth(), best_size.GetWidth(), size.GetWidth()); m_vscroll->SetScrollbar(vpos, size.GetHeight(), best_size.GetHeight(), size.GetHeight()); // Umm, the scrollbars are doing something insane under GTK+ and subtracting // one from the position I pass in. This works around that. m_hscroll->SetThumbPosition(hpos + hpos - m_hscroll->GetThumbPosition()); m_vscroll->SetThumbPosition(vpos + vpos - m_vscroll->GetThumbPosition()); wxPoint pos = m_child->GetPosition(); m_viewport->ScrollWindow(-hpos - pos.x, -vpos - pos.y); } else // !wxDS_MANAGE_SCROLLBARS { m_child->SetSize(size); } } }