Backported from wx2.9: Greatly reduce rare animation garbage in wxOwnerDrawnComboBox drop-down animation (see #12087)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@64477 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jaakko Salli
2010-06-03 15:25:41 +00:00
parent f790864585
commit 74589ae82f
2 changed files with 11 additions and 3 deletions

View File

@@ -102,6 +102,8 @@ wxMSW:
have more native-like focus indicator rendering.
- Fixed wxOwnerDrawnComboBox keyboard handling: drop-down is no longer
displayed when arrow key is pressed (without Alt).
- In some rare cases wxOwnerDrawnComboBox drop-down animation could display
as garbage. This has now been greatly reduced (mcben).
2.8.11:
-------

View File

@@ -799,6 +799,7 @@ void wxComboCtrl::OnTimerEvent( wxTimerEvent& WXUNUSED(event) )
{
bool stopTimer = false;
wxWindow* win = GetPopupWindow();
wxWindow* popup = GetPopupControl()->GetControl();
// Popup was hidden before it was fully shown?
@@ -810,7 +811,6 @@ void wxComboCtrl::OnTimerEvent( wxTimerEvent& WXUNUSED(event) )
{
wxLongLong t = ::wxGetLocalTimeMillis();
const wxRect& rect = m_animRect;
wxWindow* win = GetPopupWindow();
int pos = (int) (t-m_animStart).GetLo();
if ( pos < COMBOBOX_ANIMATION_DURATION )
@@ -828,8 +828,10 @@ void wxComboCtrl::OnTimerEvent( wxTimerEvent& WXUNUSED(event) )
}
else
{
popup->Move( 0, -y );
// Note that apparently Move() should be called after
// SetSize() to reduce (or even eliminate) animation garbage
win->SetSize( rect.x, rect.y, rect.width, h );
popup->Move( 0, -y );
}
}
else
@@ -840,9 +842,13 @@ void wxComboCtrl::OnTimerEvent( wxTimerEvent& WXUNUSED(event) )
if ( stopTimer )
{
popup->Move( 0, 0 );
m_animTimer.Stop();
DoShowPopup( m_animRect, m_animFlags );
popup->Move( 0, 0 );
// Do a one final refresh to clean up the rare cases of animation
// garbage
win->Refresh();
}
}
#endif