1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-16 16:10:06 +02:00

A few more minor fixes to Quick-Play.

Ensure that Quick-Play is within usable region of Track panel.
Fix Quick-Play Cut-preview.
This commit is contained in:
Steve Daulton 2015-04-23 12:21:03 +00:00
parent 293ebe1ab0
commit 9aa8885d9b

View File

@ -1826,6 +1826,8 @@ bool AdornedRulerPanel::IsWithinMarker(int mousePosX, double markerTime)
void AdornedRulerPanel::OnMouseEvents(wxMouseEvent &evt) void AdornedRulerPanel::OnMouseEvents(wxMouseEvent &evt)
{ {
//TODO: Ensure that cursor is refreshed when necessary.
// Disable mouse actions on Timeline while recording. // Disable mouse actions on Timeline while recording.
if (mIsRecording) if (mIsRecording)
return; return;
@ -1839,14 +1841,20 @@ void AdornedRulerPanel::OnMouseEvents(wxMouseEvent &evt)
mProject->OnUnlockPlayRegion(); mProject->OnUnlockPlayRegion();
} }
// Keep Quick-Play within usable track area.
TrackPanel *tp = mProject->GetTrackPanel();
int mousePosX, width, height;
tp->GetTracksUsableArea(&width, &height);
mousePosX = wxMax(evt.GetX(), tp->GetLeftOffset());
mousePosX = wxMin(mousePosX, tp->GetLeftOffset() + width - 1);
bool isWithinStart = IsWithinMarker(evt.GetX(), mPlayRegionStart); bool isWithinStart = IsWithinMarker(mousePosX, mPlayRegionStart);
bool isWithinEnd = IsWithinMarker(evt.GetX(), mPlayRegionEnd); bool isWithinEnd = IsWithinMarker(mousePosX, mPlayRegionEnd);
bool canDragLoopSel = !mPlayRegionLock && mPlayRegionDragsSelection; bool canDragLoopSel = !mPlayRegionLock && mPlayRegionDragsSelection;
mLastMouseX = evt.GetX(); mLastMouseX = mousePosX;
mQuickPlayPos = Pos2Time(evt.GetX()); mQuickPlayPos = Pos2Time(mousePosX);
double t0 = mProject->GetTracks()->GetStartTime(); double t0 = mProject->GetTracks()->GetStartTime();
double t1 = mProject->GetTracks()->GetEndTime(); double t1 = mProject->GetTracks()->GetEndTime();
@ -1907,7 +1915,7 @@ void AdornedRulerPanel::OnMouseEvents(wxMouseEvent &evt)
if (evt.LeftDown()) if (evt.LeftDown())
{ {
mButtonDownMousePos = evt.GetX(); mButtonDownMousePos = mousePosX;
if (isWithinStart && isWithinEnd) { if (isWithinStart && isWithinEnd) {
// Both could be selected, check which marker is nearer // Both could be selected, check which marker is nearer
@ -1951,7 +1959,7 @@ void AdornedRulerPanel::OnMouseEvents(wxMouseEvent &evt)
Refresh(); Refresh();
break; break;
case mesSelectingPlayRegionClick: case mesSelectingPlayRegionClick:
if (abs(evt.GetX() - mButtonDownMousePos) > SELECT_TOLERANCE_PIXEL) if (abs(mousePosX - mButtonDownMousePos) > SELECT_TOLERANCE_PIXEL)
{ {
// User moved mouse at least SELECT_TOLERANCE_PIXEL, so change // User moved mouse at least SELECT_TOLERANCE_PIXEL, so change
// from "click" mode to "range" mode to allow selecting a range // from "click" mode to "range" mode to allow selecting a range
@ -2043,7 +2051,11 @@ void AdornedRulerPanel::OnMouseEvents(wxMouseEvent &evt)
AudioIOStartStreamOptions options(mProject->GetDefaultPlayOptions()); AudioIOStartStreamOptions options(mProject->GetDefaultPlayOptions());
options.playLooped = (loopEnabled && evt.ShiftDown()); options.playLooped = (loopEnabled && evt.ShiftDown());
options.pStartTime = &mPlayRegionStart; if (!evt.ControlDown())
options.pStartTime = &mPlayRegionStart;
else
options.timeTrack = NULL;
ctb->PlayPlayRegion((SelectedRegion(start, end)), ctb->PlayPlayRegion((SelectedRegion(start, end)),
options, options,
evt.ControlDown(), evt.ControlDown(),
@ -2342,6 +2354,7 @@ void AdornedRulerPanel::DrawIndicator( double pos, bool rec )
Refresh(false); Refresh(false);
} }
// Draws the play/recording position indicator.
void AdornedRulerPanel::DoDrawIndicator(wxDC * dc) void AdornedRulerPanel::DoDrawIndicator(wxDC * dc)
{ {
if (mIndType < 0) { if (mIndType < 0) {