From: <sag...@us...> - 2011-05-20 14:17:08
|
Revision: 877 http://modplug.svn.sourceforge.net/modplug/?rev=877&view=rev Author: saga-games Date: 2011-05-20 14:17:01 +0000 (Fri, 20 May 2011) Log Message: ----------- [Imp] IT / FT2 envelope limitations are now adhered in the envelope editor in compatible mode. Modified Paths: -------------- 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 2011-05-17 18:33:34 UTC (rev 876) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2011-05-20 14:17:01 UTC (rev 877) @@ -274,8 +274,14 @@ { if (nTick >= 0) { - int mintick = (nPoint) ? envelope->Ticks[nPoint-1] : 0; - int maxtick = envelope->Ticks[nPoint+1]; + int mintick = (nPoint) ? envelope->Ticks[nPoint - 1] : 0; + int maxtick = envelope->Ticks[nPoint + 1]; + // Can't have multiple points on same tick + if(GetDocument()->GetSoundFile()->IsCompatibleMode(TRK_IMPULSETRACKER|TRK_FASTTRACKER2)) + { + mintick++; + maxtick--; + } if (nPoint + 1 == (int)envelope->nNodes) maxtick = ENVELOPE_MAX_LENGTH; if (nTick < mintick) nTick = mintick; if (nTick > maxtick) nTick = maxtick; @@ -2310,7 +2316,7 @@ { INSTRUMENTENVELOPE *pEnv = GetEnvelopePtr(); if(pEnv == nullptr || !IsDragItemEnvPoint()) return; - if(m_nDragItem == 1 || pEnv->Ticks[m_nDragItem - 1] == pEnv->Ticks[m_nDragItem - 2]) + if(m_nDragItem == 1 || !CanMovePoint(m_nDragItem - 1, -1)) return; pEnv->Ticks[m_nDragItem - 1]--; @@ -2324,7 +2330,7 @@ { INSTRUMENTENVELOPE *pEnv = GetEnvelopePtr(); if(pEnv == nullptr || !IsDragItemEnvPoint()) return; - if(m_nDragItem == 1 || (m_nDragItem < pEnv->nNodes && pEnv->Ticks[m_nDragItem - 1] == pEnv->Ticks[m_nDragItem])) + if(m_nDragItem == 1 || !CanMovePoint(m_nDragItem - 1, 1)) return; pEnv->Ticks[m_nDragItem - 1]++; @@ -2500,6 +2506,36 @@ } +bool CViewInstrument::CanMovePoint(UINT envPoint, int step) +//--------------------------------------------------------- +{ + INSTRUMENTENVELOPE *pEnv = GetEnvelopePtr(); + if(pEnv == nullptr) return false; + + // Can't move first point + if(envPoint == 0) + { + return false; + } + // Can't move left of previous point + if((step < 0) && (pEnv->Ticks[envPoint] - pEnv->Ticks[envPoint - 1] >= -step + GetDocument()->GetSoundFile()->IsCompatibleMode(TRK_IMPULSETRACKER|TRK_FASTTRACKER2) ? 0 : 1)) + { + return false; + } + // Can't move right of next point + if((step > 0) && (envPoint < pEnv->nNodes - 1) && (pEnv->Ticks[envPoint + 1] - pEnv->Ticks[envPoint] >= step + GetDocument()->GetSoundFile()->IsCompatibleMode(TRK_IMPULSETRACKER|TRK_FASTTRACKER2) ? 0 : 1)) + { + return false; + } + // Limit envelope length + if((envPoint == pEnv->nNodes - 1) && pEnv->Ticks[envPoint] + step > ENVELOPE_MAX_LENGTH) + { + return false; + } + return true; +} + + BOOL CViewInstrument::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) //---------------------------------------------------------------------- { Modified: trunk/OpenMPT/mptrack/View_ins.h =================================================================== --- trunk/OpenMPT/mptrack/View_ins.h 2011-05-17 18:33:34 UTC (rev 876) +++ trunk/OpenMPT/mptrack/View_ins.h 2011-05-20 14:17:01 UTC (rev 877) @@ -81,6 +81,7 @@ // Misc. bool EnvSetValue(int nPoint, int nTick=-1, int nValue=-1); + bool CanMovePoint(UINT envPoint, int step); // Set loop points bool EnvSetLoopStart(int nPoint); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |