diff --git a/src/AdornedRulerPanel.cpp b/src/AdornedRulerPanel.cpp index cba26a3fb..8e081536d 100644 --- a/src/AdornedRulerPanel.cpp +++ b/src/AdornedRulerPanel.cpp @@ -2150,13 +2150,8 @@ void AdornedRulerPanel::DoDrawIndicator dc->DrawPolygon( 3, tri ); } else { - bool pinned = Scrubber::Get( *mProject ).IsTransportingPinned(); - wxBitmap & bmp = theTheme.Bitmap( pinned ? - (playing ? bmpPlayPointerPinned : bmpRecordPointerPinned) : - (playing ? bmpPlayPointer : bmpRecordPointer) - ); - const int IndicatorHalfWidth = bmp.GetWidth() / 2; - dc->DrawBitmap( bmp, xx - IndicatorHalfWidth -1, mInner.y ); + auto pair = GetIndicatorBitmap( xx, playing ); + dc->DrawBitmap( pair.second, pair.first.x, pair.first.y ); #if 0 // Down pointing triangle @@ -2173,6 +2168,23 @@ void AdornedRulerPanel::DoDrawIndicator } } +// Returns the appropriate bitmap, and panel-relative coordinates for its +// upper left corner. +std::pair< wxPoint, wxBitmap > +AdornedRulerPanel::GetIndicatorBitmap(wxCoord xx, bool playing) const +{ + bool pinned = Scrubber::Get( *mProject ).IsTransportingPinned(); + wxBitmap & bmp = theTheme.Bitmap( pinned ? + (playing ? bmpPlayPointerPinned : bmpRecordPointerPinned) : + (playing ? bmpPlayPointer : bmpRecordPointer) + ); + const int IndicatorHalfWidth = bmp.GetWidth() / 2; + return { + { xx - IndicatorHalfWidth - 1, mInner.y }, + bmp + }; +} + void AdornedRulerPanel::SetPlayRegion(double playRegionStart, double playRegionEnd) { diff --git a/src/AdornedRulerPanel.h b/src/AdornedRulerPanel.h index ca66f8df1..c86a7f618 100644 --- a/src/AdornedRulerPanel.h +++ b/src/AdornedRulerPanel.h @@ -100,6 +100,8 @@ private: void DoDrawSelection(wxDC * dc); public: + std::pair< wxPoint, wxBitmap > + GetIndicatorBitmap(wxCoord xx, bool playing) const; void DoDrawIndicator(wxDC * dc, wxCoord xx, bool playing, int width, bool scrub, bool seek); void UpdateButtonStates(); diff --git a/src/tracks/ui/PlayIndicatorOverlay.cpp b/src/tracks/ui/PlayIndicatorOverlay.cpp index 3d7897d59..eb4e89ea5 100644 --- a/src/tracks/ui/PlayIndicatorOverlay.cpp +++ b/src/tracks/ui/PlayIndicatorOverlay.cpp @@ -55,10 +55,19 @@ unsigned PlayIndicatorOverlayBase::SequenceNumber() const std::pair PlayIndicatorOverlayBase::DoGetRectangle(wxSize size) { - auto width = mIsMaster ? 1 : IndicatorMediumWidth; + wxCoord width = 1, xx = mLastIndicatorX; + + if ( !mIsMaster ) { + auto &ruler = AdornedRulerPanel::Get( *mProject ); + auto gAudioIO = AudioIO::Get(); + bool rec = gAudioIO->IsCapturing(); + auto pair = ruler.GetIndicatorBitmap( xx, !rec ); + xx = pair.first.x; + width = pair.second.GetWidth(); + } // May be excessive height, but little matter - wxRect rect(mLastIndicatorX - width / 2, 0, width, size.GetHeight()); + wxRect rect( xx, 0, width, size.GetHeight()); return { rect, (mLastIndicatorX != mNewIndicatorX @@ -113,7 +122,8 @@ void PlayIndicatorOverlayBase::Draw(OverlayPanel &panel, wxDC &dc) else if(auto ruler = dynamic_cast(&panel)) { wxASSERT(!mIsMaster); - ruler->DoDrawIndicator(&dc, mLastIndicatorX, !rec, IndicatorMediumWidth, false, false); + auto pair = ruler->GetIndicatorBitmap( mLastIndicatorX, !rec ); + dc.DrawBitmap( pair.second, pair.first.x, pair.first.y ); } else wxASSERT(false);