From: <sv...@op...> - 2024-11-19 17:43:20
|
Author: sagamusix Date: Tue Nov 19 18:43:06 2024 New Revision: 22237 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22237 Log: [Imp] Instrument tab: When moving the last envelope point, avoid it snapping back quickly when moving backwards (https://bugs.openmpt.org/view.php?id=297). Modified: trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_ins.h Modified: trunk/OpenMPT/mptrack/View_ins.cpp ============================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp Tue Nov 19 09:47:36 2024 (r22236) +++ trunk/OpenMPT/mptrack/View_ins.cpp Tue Nov 19 18:43:06 2024 (r22237) @@ -171,9 +171,9 @@ if(pModDoc) { SIZE sizeTotal, sizePage, sizeLine; - uint32 maxTick = EnvGetTick(EnvGetLastPoint()); + uint32 maxTick = std::max(EnvGetTick(EnvGetLastPoint()), m_maxTickDrag); - sizeTotal.cx = mpt::saturate_round<int>((maxTick + 2) * m_zoom); + sizeTotal.cx = mpt::saturate_round<int>((maxTick + 8) * m_zoom); sizeTotal.cy = 1; sizeLine.cx = mpt::saturate_round<int>(m_zoom); sizeLine.cy = 2; @@ -1480,6 +1480,7 @@ { // Ctrl pressed -> move tail of envelope changed = EnvSetValue(m_nDragItem - 1, nTick, nVal, CInputHandler::CtrlPressed()); + m_maxTickDrag = std::max(m_maxTickDrag, EnvGetTick(EnvGetLastPoint())); } else { int nPoint = ScreenToPoint(pt.x, pt.y); @@ -1659,6 +1660,7 @@ if(rect.PtInRect(pt)) { m_nDragItem = i + 1; + m_maxTickDrag = EnvGetTick(EnvGetLastPoint()); break; } } @@ -1727,6 +1729,11 @@ void CViewInstrument::OnLButtonUp(UINT, CPoint) { m_mouseMoveModified = false; + if(m_maxTickDrag) + { + m_maxTickDrag = 0; + UpdateScrollSize(); + } if(m_dwStatus & INSSTATUS_SPLITCURSOR) { m_dwStatus &= ~INSSTATUS_SPLITCURSOR; Modified: trunk/OpenMPT/mptrack/View_ins.h ============================================================================== --- trunk/OpenMPT/mptrack/View_ins.h Tue Nov 19 09:47:36 2024 (r22236) +++ trunk/OpenMPT/mptrack/View_ins.h Tue Nov 19 18:43:06 2024 (r22237) @@ -60,6 +60,7 @@ float m_zoom = 4; int m_envPointSize = 4; + uint32 m_maxTickDrag = 0; // Maximum tick for scroll size during envelope node dragging bool m_bGrid = true; bool m_bGridForceRedraw = false; |