]> git.saurik.com Git - wxWidgets.git/commitdiff
porting forward scrolling fix
authorStefan Csomor <csomor@advancedconcepts.ch>
Thu, 29 Nov 2007 08:28:12 +0000 (08:28 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Thu, 29 Nov 2007 08:28:12 +0000 (08:28 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50321 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mac/carbon/utils.cpp

index 5cbb3089a0c07fc7c4b794d8d9918771a0351757..f97f8da6b684a35c1f8096a7a6eb5162209772a7 100644 (file)
@@ -1878,9 +1878,18 @@ void wxMacDataItemBrowserControl::MacScrollTo( unsigned int n )
     GetScrollPosition( &top , &left ) ;
     wxMacDataItem * item = (wxMacDataItem*) GetItemFromLine( n );
 
     GetScrollPosition( &top , &left ) ;
     wxMacDataItem * item = (wxMacDataItem*) GetItemFromLine( n );
 
+    // there is a bug in RevealItem that leads to situations
+    // in large lists, where the item does not get scrolled
+    // into sight, so we do a pre-scroll if necessary
     UInt16 height ;
     GetRowHeight( (DataBrowserItemID) item , &height ) ;
     UInt16 height ;
     GetRowHeight( (DataBrowserItemID) item , &height ) ;
-    SetScrollPosition( n * ((UInt32)height) , left ) ;
+    UInt32 linetop = n * ((UInt32) height );
+    UInt32 linebottom = linetop + height;
+    Rect rect ;
+    GetRect( &rect );
+    
+    if ( linetop < top || linebottom > (top + rect.bottom - rect.top ) )
+        SetScrollPosition( wxMax( n-2, 0 ) * ((UInt32)height) , left ) ;
 
     RevealItem( item , kDataBrowserRevealWithoutSelecting );
 }
 
     RevealItem( item , kDataBrowserRevealWithoutSelecting );
 }