1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-25 08:38:39 +02:00

static overloads of Track::SharedPointer when null check is needed...

... Some optimizing compilers don't let us get away with null check on this
in a nonstatic member function.
This commit is contained in:
Paul Licameli 2019-03-23 13:23:46 -04:00
parent 1af342ff64
commit bb634614e6
6 changed files with 15 additions and 8 deletions

View File

@ -97,7 +97,7 @@ void SelectionState::ChangeSelectionOnShiftClick
// Our track was earlier than the first. Extend from the last.
if( !pExtendFrom )
pExtendFrom = (*trackRange.rbegin())->SharedPointer();
pExtendFrom = Track::SharedPointer( *trackRange.rbegin() );
}
SelectNone( tracks );

View File

@ -238,7 +238,6 @@ class AUDACITY_DLL_API Track /* not final */
{
// shared_from_this is injected into class scope by base class
// std::enable_shared_from_this<Track>
if (!this) return {};
return std::static_pointer_cast<Subclass>( shared_from_this() );
}
@ -250,10 +249,18 @@ class AUDACITY_DLL_API Track /* not final */
{
// shared_from_this is injected into class scope by base class
// std::enable_shared_from_this<Track>
if (!this) return {};
return std::static_pointer_cast<Subclass>( shared_from_this() );
}
// Static overloads of SharedPointer for when the pointer may be null
template<typename Subclass = Track>
static inline std::shared_ptr<Subclass> SharedPointer( Track *pTrack )
{ return pTrack ? pTrack->SharedPointer<Subclass>() : nullptr; }
template<typename Subclass = const Track>
static inline std::shared_ptr<Subclass> SharedPointer( const Track *pTrack )
{ return pTrack ? pTrack->SharedPointer<Subclass>() : nullptr; }
// Find anything registered with TrackList::RegisterPendingChangedTrack and
// not yet cleared or applied; if no such exists, return this track
std::shared_ptr<const Track> SubstitutePendingChangedTrack() const;

View File

@ -2247,7 +2247,7 @@ void TrackPanel::SetFocusedTrack( Track *t )
// Make sure we always have the first linked track of a stereo track
t = *GetTracks()->FindLeader(t);
auto cell = mAx->SetFocus( t->SharedPointer() ).get();
auto cell = mAx->SetFocus( Track::SharedPointer( t ) ).get();
if (cell) {
AudacityProject::CaptureKeyboard(this);

View File

@ -64,7 +64,7 @@ std::shared_ptr<Track> TrackPanelAx::GetFocus()
}
if (!focusedTrack) {
focusedTrack =
(*mTrackPanel->GetTracks()->Any().first)->SharedPointer();
Track::SharedPointer( *mTrackPanel->GetTracks()->Any().first );
// only call SetFocus if the focus has changed to avoid
// unnecessary focus events
if (focusedTrack)
@ -99,7 +99,7 @@ std::shared_ptr<Track> TrackPanelAx::SetFocus( std::shared_ptr<Track> track )
#endif
if( !track )
track = (*mTrackPanel->GetTracks()->Any().begin())->SharedPointer();
track = Track::SharedPointer( *mTrackPanel->GetTracks()->Any().begin() );
mFocusedTrack = track;
mNumFocusedTrack = TrackNum(track);

View File

@ -1144,7 +1144,7 @@ void SelectHandle::AdjustSelection
std::max(0.0, viewInfo.PositionToTime(mouseXCoordinate, trackLeftEdge));
double origSelend = selend;
auto pTrack = track->SharedPointer();
auto pTrack = Track::SharedPointer( track );
if (!pTrack)
pTrack = pProject->GetTracks()->Lock(mpTrack);

View File

@ -695,7 +695,7 @@ UIHandle::Result TimeShiftHandle::Drag
}
// May need a shared_ptr to reassign mCapturedTrack below
auto pTrack = track->SharedPointer();
auto pTrack = Track::SharedPointer( track );
if (!pTrack)
return RefreshCode::RefreshNone;