From 14dc5af2231a544ecbd5eebde545d4b1178fbada Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sat, 19 Sep 2020 14:38:25 -0400 Subject: [PATCH] Pass optional extra information into TrackShifter::HitTest ... ... Because LabelTrack, unlike the others, will also need a mouse y coordinate. The extra information is present when using the time-shift tool but not when using the items in ClipMenus. --- .../notetrack/ui/NoteTrackView.cpp | 2 +- .../wavetrack/ui/WaveTrackView.cpp | 2 +- src/tracks/ui/TimeShiftHandle.cpp | 7 +++++-- src/tracks/ui/TimeShiftHandle.h | 18 ++++++++++++++++-- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackView.cpp b/src/tracks/playabletrack/notetrack/ui/NoteTrackView.cpp index 3af61d5e5..096af6e50 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackView.cpp +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackView.cpp @@ -742,7 +742,7 @@ public: ~NoteTrackShifter() override {} Track &GetTrack() const override { return *mpTrack; } - HitTestResult HitTest( double ) override + HitTestResult HitTest( double, HitTestParams* ) override { return HitTestResult::Intervals; } diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp index d0c0ab732..72520ed34 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp @@ -1314,7 +1314,7 @@ public: ~WaveTrackShifter() override {} Track &GetTrack() const override { return *mpTrack; } - HitTestResult HitTest( double time ) override + HitTestResult HitTest( double time, HitTestParams* ) override { auto pClip = mpTrack->GetClipAtTime( time ); diff --git a/src/tracks/ui/TimeShiftHandle.cpp b/src/tracks/ui/TimeShiftHandle.cpp index e7a59a40a..f4860796e 100644 --- a/src/tracks/ui/TimeShiftHandle.cpp +++ b/src/tracks/ui/TimeShiftHandle.cpp @@ -241,7 +241,7 @@ CoarseTrackShifter::CoarseTrackShifter( Track &track ) CoarseTrackShifter::~CoarseTrackShifter() = default; -auto CoarseTrackShifter::HitTest( double ) -> HitTestResult +auto CoarseTrackShifter::HitTest( double, HitTestParams* ) -> HitTestResult { return HitTestResult::Track; } @@ -462,7 +462,10 @@ UIHandle::Result TimeShiftHandle::Click auto pShifter = MakeTrackShifter::Call( *pTrack ); if (!event.ShiftDown()) { - switch( pShifter->HitTest( clickTime ) ) { + TrackShifter::HitTestParams params{ + rect, event.m_x, event.m_y + }; + switch( pShifter->HitTest( clickTime, ¶ms ) ) { case TrackShifter::HitTestResult::Miss: return Cancelled; case TrackShifter::HitTestResult::Intervals: { diff --git a/src/tracks/ui/TimeShiftHandle.h b/src/tracks/ui/TimeShiftHandle.h index b81af77ee..76b92f4aa 100644 --- a/src/tracks/ui/TimeShiftHandle.h +++ b/src/tracks/ui/TimeShiftHandle.h @@ -25,6 +25,8 @@ class TrackList; class Track; class TrackInterval; +class ViewInfo; + //! Abstract base class for policies to manipulate a track type with the Time Shift tool class TrackShifter { public: @@ -39,9 +41,21 @@ public: Track //viewInfo.PositionToTime(pParams->xx, pParams->rect.x))` + */ + virtual HitTestResult HitTest( + double time, //!< A time value to test + HitTestParams *pParams = nullptr //!< Optional extra information + ) = 0; using Intervals = std::vector; @@ -158,7 +172,7 @@ public: ~CoarseTrackShifter() override; Track &GetTrack() const override { return *mpTrack; } - HitTestResult HitTest( double ) override; + HitTestResult HitTest( double, HitTestParams* ) override; //! Returns false bool SyncLocks() override;