Backported SetScrollbars bug fix

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@20004 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2003-04-06 12:03:09 +00:00
parent 6c11eb5b41
commit 98a67aa507
5 changed files with 32 additions and 20 deletions

View File

@@ -177,6 +177,7 @@ All:
- fixed wxLANGUAGE_CHINESE_TAIWAN to use zh_TW catalogs - fixed wxLANGUAGE_CHINESE_TAIWAN to use zh_TW catalogs
- added missing wx/quantize.h to install - added missing wx/quantize.h to install
- improved wxScrolledWindow/sizer interaction
Unix (GUI): Unix (GUI):
@@ -197,7 +198,7 @@ wxGTK:
wxMSW: wxMSW:
- no longer take ampersand into account in wxStaticText::GetBestSize. - no longer take ampersand into account in wxStaticText::GetBestSize
2.4.0 2.4.0
----- -----

View File

@@ -622,10 +622,8 @@ wxSize wxWindowBase::DoGetVirtualSize() const
{ {
wxSize s( GetClientSize() ); wxSize s( GetClientSize() );
if( m_virtualSize.GetWidth() != -1 ) return wxSize( wxMax( m_virtualSize.GetWidth(), s.GetWidth() ),
s.SetWidth( m_virtualSize.GetWidth() ); wxMax( m_virtualSize.GetHeight(), s.GetHeight() ) );
if( m_virtualSize.GetHeight() != -1 )
s.SetHeight( m_virtualSize.GetHeight() );
return s; return s;
} }

View File

@@ -344,19 +344,15 @@ void wxScrollHelper::SetScrollbars(int pixelsPerUnitX,
// here not just the size. It makes SetScrollbars 'sticky' // here not just the size. It makes SetScrollbars 'sticky'
// emulating the old non-autoscroll behaviour. // emulating the old non-autoscroll behaviour.
int w = noUnitsX * pixelsPerUnitX;
int h = noUnitsY * pixelsPerUnitY;
wxSize sz = m_targetWindow->GetClientSize(); wxSize sz = m_targetWindow->GetClientSize();
#if 1 m_targetWindow->SetVirtualSizeHints( w, h );
int x = wxMax(noUnitsX * pixelsPerUnitX, sz.x);
int y = wxMax(noUnitsY * pixelsPerUnitY, sz.y);
#else
int x = noUnitsX * pixelsPerUnitX;
int y = noUnitsY * pixelsPerUnitY;
#endif
m_targetWindow->SetVirtualSizeHints( x, y );
// The above should arguably be deprecated, this however we still need. // The above should arguably be deprecated, this however we still need.
m_targetWindow->SetVirtualSize( x, y ); m_targetWindow->SetVirtualSize( w, h );
if (do_refresh && !noRefresh) if (do_refresh && !noRefresh)
m_targetWindow->Refresh(TRUE, GetRect()); m_targetWindow->Refresh(TRUE, GetRect());
@@ -887,16 +883,19 @@ void wxScrollHelper::DoCalcUnscrolledPosition(int x, int y, int *xx, int *yy) co
// Default OnSize resets scrollbars, if any // Default OnSize resets scrollbars, if any
void wxScrollHelper::HandleOnSize(wxSizeEvent& WXUNUSED(event)) void wxScrollHelper::HandleOnSize(wxSizeEvent& WXUNUSED(event))
{ {
if( m_win->GetAutoLayout() ) if( m_win->GetAutoLayout() || m_targetWindow->GetAutoLayout() )
{ {
if ( m_targetWindow != m_win ) if ( m_targetWindow != m_win )
m_targetWindow->FitInside(); m_targetWindow->FitInside();
m_win->FitInside(); m_win->FitInside();
#if wxUSE_CONSTRAINTS // FIXME: Something is really weird here... This should be
m_win->Layout(); // called by FitInside above (and apparently is), yet the
#endif // scrollsub sample will get the scrollbar wrong if resized
// quickly. This masks the bug, but is surely not the right
// answer at all.
AdjustScrollbars();
} }
else else
AdjustScrollbars(); AdjustScrollbars();

View File

@@ -842,12 +842,19 @@ bool wxScrolledWindow::Layout()
// Default OnSize resets scrollbars, if any // Default OnSize resets scrollbars, if any
void wxScrolledWindow::OnSize(wxSizeEvent& WXUNUSED(event)) void wxScrolledWindow::OnSize(wxSizeEvent& WXUNUSED(event))
{ {
if( GetAutoLayout() ) if( GetAutoLayout() || m_targetWindow->GetAutoLayout() )
{ {
if( m_targetWindow != this ) if( m_targetWindow != this )
m_targetWindow->FitInside(); m_targetWindow->FitInside();
FitInside(); FitInside();
// FIXME: Something is really weird here... This should be
// called by FitInside above (and apparently is), yet the
// scrollsub sample will get the scrollbar wrong if resized
// quickly. This masks the bug, but is surely not the right
// answer at all.
AdjustScrollbars();
} }
else else
{ {

View File

@@ -842,12 +842,19 @@ bool wxScrolledWindow::Layout()
// Default OnSize resets scrollbars, if any // Default OnSize resets scrollbars, if any
void wxScrolledWindow::OnSize(wxSizeEvent& WXUNUSED(event)) void wxScrolledWindow::OnSize(wxSizeEvent& WXUNUSED(event))
{ {
if( GetAutoLayout() ) if( GetAutoLayout() || m_targetWindow->GetAutoLayout() )
{ {
if( m_targetWindow != this ) if( m_targetWindow != this )
m_targetWindow->FitInside(); m_targetWindow->FitInside();
FitInside(); FitInside();
// FIXME: Something is really weird here... This should be
// called by FitInside above (and apparently is), yet the
// scrollsub sample will get the scrollbar wrong if resized
// quickly. This masks the bug, but is surely not the right
// answer at all.
AdjustScrollbars();
} }
else else
{ {