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:
Stefan Csomor
2007-05-02 14:01:12 +00:00
parent a3c484e025
commit c9c94a99ff
2 changed files with 8 additions and 12 deletions

View File

@@ -483,11 +483,7 @@ void wxScrollHelper::HandleOnScroll(wxScrollWinEvent& event)
} }
bool needsRefresh = false; 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, int dx = 0,
dy = 0; dy = 0;
int orient = event.GetOrientation(); 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 // flush all pending repaints before we change m_{x,y}ScrollPosition, as
// otherwise invalidated area could be updated incorrectly later when // otherwise invalidated area could be updated incorrectly later when
// ScrollWindow() makes sure they're repainted before scrolling them // 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(); m_targetWindow->Update();
#endif
} }
if (orient == wxHORIZONTAL) if (orient == wxHORIZONTAL)

View File

@@ -2634,7 +2634,8 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
if ( m_peer->GetNeedsDisplay() ) 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 // either immediate redraw or full invalidate
#if 1 #if 1
// is the better overall solution, as it does not slow down scrolling // 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() ) ; scrollrect.Offset( -MacGetLeftBorderSize() , -MacGetTopBorderSize() ) ;
m_peer->ScrollRect( &scrollrect , dx , dy ) ; 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 #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 // this would be the preferred version for fast drawing controls
HIViewRender(m_peer->GetControlRef()) ; HIViewRender(m_peer->GetControlRef()) ;
#endif #endif
} }