From b0919ba44fddeb29af7a24bdac38e264b135a2f4 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Wed, 18 May 2016 09:27:03 -0400 Subject: [PATCH] Bug 1392: don't draw indicator over track control during quick play --- src/tracks/ui/PlayIndicatorOverlay.cpp | 28 ++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/tracks/ui/PlayIndicatorOverlay.cpp b/src/tracks/ui/PlayIndicatorOverlay.cpp index b1322cf63..512097028 100644 --- a/src/tracks/ui/PlayIndicatorOverlay.cpp +++ b/src/tracks/ui/PlayIndicatorOverlay.cpp @@ -142,12 +142,20 @@ void PlayIndicatorOverlay::OnTimer(wxCommandEvent &event) } } + auto trackPanel = mProject->GetTrackPanel(); + if (!mProject->IsAudioActive()) { + mNewIndicatorX = -1; const auto &scrubber = mProject->GetScrubber(); - if (scrubber.HasStartedScrubbing()) - mNewIndicatorX = scrubber.GetScrubStartPosition(); - else - mNewIndicatorX = -1; + if (scrubber.HasStartedScrubbing()) { + auto position = scrubber.GetScrubStartPosition(); + int width; + trackPanel->GetTracksUsableArea(&width, nullptr); + const auto offset = trackPanel->GetLeftOffset(); + if(position >= trackPanel->GetLeftOffset() && + position < offset + width) + mNewIndicatorX = position; + } } else { ViewInfo &viewInfo = mProject->GetViewInfo(); @@ -155,7 +163,7 @@ void PlayIndicatorOverlay::OnTimer(wxCommandEvent &event) // Calculate the horizontal position of the indicator const double playPos = viewInfo.mRecentStreamTime; - const bool onScreen = playPos >= 0.0 && + bool onScreen = playPos >= 0.0 && between_incexc(viewInfo.h, playPos, mProject->GetScreenEndTime()); @@ -176,6 +184,11 @@ void PlayIndicatorOverlay::OnTimer(wxCommandEvent &event) !gAudioIO->IsPaused()) { mProject->TP_ScrollWindow(playPos); + // Might yet be off screen, check it + onScreen = playPos >= 0.0 && + between_incexc(viewInfo.h, + playPos, + mProject->GetScreenEndTime()); } // Always update scrollbars even if not scrolling the window. This is @@ -183,7 +196,10 @@ void PlayIndicatorOverlay::OnTimer(wxCommandEvent &event) // length of the project and therefore the appearance of the scrollbar. mProject->TP_RedrawScrollbars(); - mNewIndicatorX = viewInfo.TimeToPosition(playPos, mProject->GetTrackPanel()->GetLeftOffset()); + if (onScreen) + mNewIndicatorX = viewInfo.TimeToPosition(playPos, trackPanel->GetLeftOffset()); + else + mNewIndicatorX = -1; } if(mPartner)