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;
|
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)
|
||||||
|
@@ -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
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user