trying optimal scrolling solution perf-wise
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@45756 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -483,11 +483,7 @@ void wxScrollHelper::HandleOnScroll(wxScrollWinEvent& event)
|
||||
}
|
||||
|
||||
bool needsRefresh = false;
|
||||
#ifdef __WXMAC__
|
||||
// OS X blocks on immediate redraws, so make this a refresh
|
||||
if (!wxScrolledWindowHasChildren(m_targetWindow))
|
||||
needsRefresh = true;
|
||||
#endif
|
||||
|
||||
int dx = 0,
|
||||
dy = 0;
|
||||
int orient = event.GetOrientation();
|
||||
@@ -519,7 +515,12 @@ void wxScrollHelper::HandleOnScroll(wxScrollWinEvent& event)
|
||||
// flush all pending repaints before we change m_{x,y}ScrollPosition, as
|
||||
// otherwise invalidated area could be updated incorrectly later when
|
||||
// ScrollWindow() makes sure they're repainted before scrolling them
|
||||
#ifdef __WXMAC__
|
||||
// wxWindowMac is taking care of making sure the update area is correctly
|
||||
// set up, while not forcing an immediate redraw
|
||||
#else
|
||||
m_targetWindow->Update();
|
||||
#endif
|
||||
}
|
||||
|
||||
if (orient == wxHORIZONTAL)
|
||||
|
@@ -2634,7 +2634,8 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
|
||||
|
||||
if ( m_peer->GetNeedsDisplay() )
|
||||
{
|
||||
// because HIViewScrollRect does not scroll the already invalidated area we have two options:
|
||||
// because HIViewScrollRect does not scroll the already invalidated area we have two options
|
||||
// in case there is already a pending redraw on that area
|
||||
// either immediate redraw or full invalidate
|
||||
#if 1
|
||||
// is the better overall solution, as it does not slow down scrolling
|
||||
@@ -2655,14 +2656,8 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
|
||||
scrollrect.Offset( -MacGetLeftBorderSize() , -MacGetTopBorderSize() ) ;
|
||||
m_peer->ScrollRect( &scrollrect , dx , dy ) ;
|
||||
|
||||
// becuase HIViewScrollRect does not scroll the already invalidated area we have two options
|
||||
// either immediate redraw or full invalidate
|
||||
#if 0
|
||||
// is the better overall solution, as it does not slow down scrolling
|
||||
m_peer->SetNeedsDisplay() ;
|
||||
#else
|
||||
// this would be the preferred version for fast drawing controls
|
||||
|
||||
HIViewRender(m_peer->GetControlRef()) ;
|
||||
#endif
|
||||
}
|
||||
|
Reference in New Issue
Block a user