Reduce the amount of repainting done when the selection changes to a new one that doesn't overlap the old selection
Originally committed to SVN as r5068.
This commit is contained in:
parent
364f398c5f
commit
f3d1bc23bd
1 changed files with 8 additions and 5 deletions
|
@ -1206,13 +1206,15 @@ void AudioDisplay::OnSelectionChanged()
|
||||||
SampleRange sel(controller->GetPrimaryPlaybackRange());
|
SampleRange sel(controller->GetPrimaryPlaybackRange());
|
||||||
scrollbar->SetSelection(AbsoluteXFromSamples(sel.begin()), AbsoluteXFromSamples(sel.length()));
|
scrollbar->SetSelection(AbsoluteXFromSamples(sel.begin()), AbsoluteXFromSamples(sel.length()));
|
||||||
|
|
||||||
|
|
||||||
|
int s1 = RelativeXFromSamples(sel.begin());
|
||||||
|
int e1 = RelativeXFromSamples(sel.end());
|
||||||
|
int s2 = RelativeXFromSamples(old_selection.begin());
|
||||||
|
int e2 = RelativeXFromSamples(old_selection.end());
|
||||||
|
|
||||||
if (sel.overlaps(old_selection))
|
if (sel.overlaps(old_selection))
|
||||||
{
|
{
|
||||||
// Only redraw the parts of the selection that changed, to avoid flicker
|
// Only redraw the parts of the selection that changed, to avoid flicker
|
||||||
int s1 = RelativeXFromSamples(sel.begin());
|
|
||||||
int e1 = RelativeXFromSamples(sel.end());
|
|
||||||
int s2 = RelativeXFromSamples(old_selection.begin());
|
|
||||||
int e2 = RelativeXFromSamples(old_selection.end());
|
|
||||||
if (s1 != s2)
|
if (s1 != s2)
|
||||||
{
|
{
|
||||||
wxRect r(std::min(s1, s2)-10, audio_top, abs(s1-s2)+20, audio_height);
|
wxRect r(std::min(s1, s2)-10, audio_top, abs(s1-s2)+20, audio_height);
|
||||||
|
@ -1226,7 +1228,8 @@ void AudioDisplay::OnSelectionChanged()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RefreshRect(wxRect(0, audio_top, GetClientSize().GetX(), audio_height));
|
RefreshRect(wxRect(s1 - 10, audio_top, e1 + 20, audio_height));
|
||||||
|
RefreshRect(wxRect(s2 - 10, audio_top, e2 + 20, audio_height));
|
||||||
}
|
}
|
||||||
|
|
||||||
RefreshRect(scrollbar->GetBounds());
|
RefreshRect(scrollbar->GetBounds());
|
||||||
|
|
Loading…
Reference in a new issue