| 1809 | } |
| 1810 | |
| 1811 | void AdornedRulerPanel::HandleQPDrag(wxMouseEvent &/*event*/, wxCoord mousePosX) |
| 1812 | { |
| 1813 | bool isWithinClick = |
| 1814 | (mLeftDownClickUnsnapped >= 0) && |
| 1815 | IsWithinMarker(mousePosX, mLeftDownClickUnsnapped); |
| 1816 | bool isWithinStart = IsWithinMarker(mousePosX, mOldPlayRegion.GetStart()); |
| 1817 | bool isWithinEnd = IsWithinMarker(mousePosX, mOldPlayRegion.GetEnd()); |
| 1818 | bool canDragSel = !mOldPlayRegion.Active() && mPlayRegionDragsSelection; |
| 1819 | auto &viewInfo = ViewInfo::Get( *GetProject() ); |
| 1820 | auto &playRegion = viewInfo.playRegion; |
| 1821 | |
| 1822 | switch (mMouseEventState) |
| 1823 | { |
| 1824 | case mesNone: |
| 1825 | // If close to either end of play region, snap to closest |
| 1826 | if (isWithinStart || isWithinEnd) { |
| 1827 | if (fabs(mQuickPlayPos[0] - mOldPlayRegion.GetStart()) < fabs(mQuickPlayPos[0] - mOldPlayRegion.GetEnd())) |
| 1828 | mQuickPlayPos[0] = mOldPlayRegion.GetStart(); |
| 1829 | else |
| 1830 | mQuickPlayPos[0] = mOldPlayRegion.GetEnd(); |
| 1831 | } |
| 1832 | break; |
| 1833 | case mesDraggingPlayRegionStart: |
| 1834 | // Don't start dragging until beyond tolerance initial playback start |
| 1835 | if (!mIsDragging && isWithinStart) |
| 1836 | mQuickPlayPos[0] = mOldPlayRegion.GetStart(); |
| 1837 | else |
| 1838 | mIsDragging = true; |
| 1839 | // avoid accidental tiny selection |
| 1840 | if (isWithinEnd) |
| 1841 | mQuickPlayPos[0] = mOldPlayRegion.GetEnd(); |
| 1842 | playRegion.SetStart( mQuickPlayPos[0] ); |
| 1843 | if (canDragSel) { |
| 1844 | DragSelection(*GetProject()); |
| 1845 | } |
| 1846 | break; |
| 1847 | case mesDraggingPlayRegionEnd: |
| 1848 | if (!mIsDragging && isWithinEnd) { |
| 1849 | mQuickPlayPos[0] = mOldPlayRegion.GetEnd(); |
| 1850 | } |
| 1851 | else |
| 1852 | mIsDragging = true; |
| 1853 | if (isWithinStart) { |
| 1854 | mQuickPlayPos[0] = mOldPlayRegion.GetStart(); |
| 1855 | } |
| 1856 | playRegion.SetEnd( mQuickPlayPos[0] ); |
| 1857 | if (canDragSel) { |
| 1858 | DragSelection(*GetProject()); |
| 1859 | } |
| 1860 | break; |
| 1861 | case mesSelectingPlayRegionClick: |
| 1862 | |
| 1863 | // Don't start dragging until mouse is beyond tolerance of initial click. |
| 1864 | if (isWithinClick || mLeftDownClick == -1) { |
| 1865 | mQuickPlayPos[0] = mLeftDownClick; |
| 1866 | playRegion.SetTimes(mLeftDownClick, mLeftDownClick); |
| 1867 | } |
| 1868 | else { |