]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/scrlwing.cpp
Add wxSizer::Detach so we can detach child sizers without deletion.
[wxWidgets.git] / src / generic / scrlwing.cpp
index 489db5bbf7a3332983442a1b8bf38540f9a230ea..4da24ea3119bdfc16297c1dd0e27e83445c28fc9 100644 (file)
@@ -340,16 +340,36 @@ void wxScrollHelper::SetScrollbars(int pixelsPerUnitX,
     m_xScrollPosition = xPos;
     m_yScrollPosition = yPos;
 
-    m_targetWindow->SetVirtualSizeHints( noUnitsX * pixelsPerUnitX, noUnitsY * pixelsPerUnitY );
+    // For better backward compatibility we set persisting limits
+    // here not just the size.  It makes SetScrollbars 'sticky'
+    // emulating the old non-autoscroll behaviour.
 
-    AdjustScrollbars();
+    wxSize sz = m_targetWindow->GetClientSize();
+#if 1
+    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.
+
+    m_targetWindow->SetVirtualSize( x, y );
 
     if (do_refresh && !noRefresh)
         m_targetWindow->Refresh(TRUE, GetRect());
 
+    // TODO: check if we can use AdjustScrollbars always.
+#ifdef __WXUNIVERSAL__
+    AdjustScrollbars();
+#else    
+    // This is also done by AdjustScrollbars, above
 #ifdef __WXMAC__
     m_targetWindow->MacUpdateImmediately() ;
 #endif
+#endif
 }
 
 // ----------------------------------------------------------------------------
@@ -867,17 +887,19 @@ void wxScrollHelper::DoCalcUnscrolledPosition(int x, int y, int *xx, int *yy) co
 // Default OnSize resets scrollbars, if any
 void wxScrollHelper::HandleOnSize(wxSizeEvent& WXUNUSED(event))
 {
-    if ( m_targetWindow != m_win )
-        m_targetWindow->SetVirtualSize( m_targetWindow->GetClientSize() );
-
-    m_win->SetVirtualSize( m_win->GetClientSize() );
+    if( m_win->GetAutoLayout() )
+    {
+        if ( m_targetWindow != m_win )
+            m_targetWindow->FitInside();
 
-    AdjustScrollbars();
+        m_win->FitInside();
 
 #if wxUSE_CONSTRAINTS
-    if (m_win->GetAutoLayout())
         m_win->Layout();
 #endif
+    }
+    else
+        AdjustScrollbars();
 }
 
 // This calls OnDraw, having adjusted the origin according to the current
@@ -1084,10 +1106,6 @@ void wxScrollHelper::HandleOnMouseLeave(wxMouseEvent& event)
 
 #if wxUSE_MOUSEWHEEL
 
-#ifndef  WHEEL_PAGESCROLL
-#define WHEEL_PAGESCROLL  (UINT_MAX)   // signifies to scroll a page
-#endif
-
 void wxScrollHelper::HandleOnMouseWheel(wxMouseEvent& event)
 {
     m_wheelRotation += event.GetWheelRotation();
@@ -1103,7 +1121,7 @@ void wxScrollHelper::HandleOnMouseWheel(wxMouseEvent& event)
         newEvent.SetOrientation(wxVERTICAL);
         newEvent.m_eventObject = m_win;
 
-        if (event.GetLinesPerAction() == WHEEL_PAGESCROLL)
+        if (event.IsPageScroll())
         {
             if (lines > 0)
                 newEvent.m_eventType = wxEVT_SCROLLWIN_PAGEUP;
@@ -1175,6 +1193,17 @@ bool wxGenericScrolledWindow::Layout()
     return wxPanel::Layout();
 }
 
+void wxGenericScrolledWindow::DoSetVirtualSize(int x, int y)
+{
+    wxPanel::DoSetVirtualSize( x, y );
+    AdjustScrollbars();
+
+#if wxUSE_CONSTRAINTS
+    if (GetAutoLayout())
+        Layout();
+#endif
+}
+
 void wxGenericScrolledWindow::OnPaint(wxPaintEvent& event)
 {
     // the user code didn't really draw the window if we got here, so set this