From: <sv...@op...> - 2024-08-03 12:52:22
|
Author: sagamusix Date: Sat Aug 3 14:52:09 2024 New Revision: 21318 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21318 Log: Merged revision(s) 21265 from trunk/OpenMPT: [Imp] Note Properties: For XM, automatically round to the 16 available panning positions. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/mptrack/EffectInfo.cpp branches/OpenMPT-1.31/mptrack/EffectInfo.h branches/OpenMPT-1.31/mptrack/PatternEditorDialogs.cpp Modified: branches/OpenMPT-1.31/mptrack/EffectInfo.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/EffectInfo.cpp Sat Aug 3 14:43:58 2024 (r21317) +++ branches/OpenMPT-1.31/mptrack/EffectInfo.cpp Sat Aug 3 14:52:09 2024 (r21318) @@ -988,25 +988,29 @@ bool EffectInfo::GetVolCmdInfo(UINT ndx, CString *s, ModCommand::VOL *prangeMin, ModCommand::VOL *prangeMax) const { - if (s) s->Empty(); - if (prangeMin) *prangeMin = 0; - if (prangeMax) *prangeMax = 0; - if (ndx >= std::size(gVolCmdInfo)) return false; - if (s) - { + if(s) + s->Empty(); + if(prangeMin) + *prangeMin = 0; + if(prangeMax) + *prangeMax = 0; + if(ndx >= std::size(gVolCmdInfo)) + return false; + if(s) s->Format(_T("%c: %s"), sndFile.GetModSpecifications().GetVolEffectLetter(GetVolCmdFromIndex(ndx)), gVolCmdInfo[ndx].name); - } - if ((prangeMin) && (prangeMax)) + if(prangeMin && prangeMax) { switch(gVolCmdInfo[ndx].volCmd) { case VOLCMD_VOLUME: - case VOLCMD_PANNING: *prangeMax = 64; break; - + case VOLCMD_PANNING: + *prangeMax = (sndFile.GetType() & MOD_TYPE_XM) ? 15 : 64; + break; default: *prangeMax = (sndFile.GetType() & MOD_TYPE_XM) ? 15 : 9; + break; } } return (sndFile.GetType() & gVolCmdInfo[ndx].supportedFormats); @@ -1106,5 +1110,24 @@ return true; } + // Map an effect value to slider position +UINT EffectInfo::MapVolumeToPos(VolumeCommand cmd, ModCommand::VOL param) const +{ + if(cmd == VOLCMD_PANNING && sndFile.GetType() == MOD_TYPE_XM) + return param / 4u; + else + return param; +} + + +// Map slider position to an effect value +ModCommand::VOL EffectInfo::MapPosToVolume(VolumeCommand cmd, UINT pos) const +{ + if(cmd == VOLCMD_PANNING && sndFile.GetType() == MOD_TYPE_XM) + return static_cast<ModCommand::VOL>(std::min(pos * 4u, 64u)); + else + return static_cast<ModCommand::VOL>(std::min(pos, 64u)); +} + OPENMPT_NAMESPACE_END Modified: branches/OpenMPT-1.31/mptrack/EffectInfo.h ============================================================================== --- branches/OpenMPT-1.31/mptrack/EffectInfo.h Sat Aug 3 14:43:58 2024 (r21317) +++ branches/OpenMPT-1.31/mptrack/EffectInfo.h Sat Aug 3 14:52:09 2024 (r21318) @@ -62,6 +62,10 @@ bool GetVolCmdInfo(UINT ndx, CString *s, ModCommand::VOL *prangeMin = nullptr, ModCommand::VOL *prangeMax = nullptr) const; // Get effect name and parameter description bool GetVolCmdParamInfo(const ModCommand &m, CString *s) const; + // Map an effect value to slider position + UINT MapVolumeToPos(VolumeCommand cmd, ModCommand::VOL param) const; + // Map slider position to an effect value + ModCommand::VOL MapPosToVolume(VolumeCommand cmd, UINT pos) const; }; OPENMPT_NAMESPACE_END Modified: branches/OpenMPT-1.31/mptrack/PatternEditorDialogs.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/PatternEditorDialogs.cpp Sat Aug 3 14:43:58 2024 (r21317) +++ branches/OpenMPT-1.31/mptrack/PatternEditorDialogs.cpp Sat Aug 3 14:52:09 2024 (r21318) @@ -598,7 +598,7 @@ sldVolParam.EnableWindow(TRUE); sldVolParam.SetRange(rangeMin, rangeMax); Limit(m->vol, rangeMin, rangeMax); - sldVolParam.SetPos(m->vol); + sldVolParam.SetPos(effectInfo.MapVolumeToPos(m->volcmd, m->vol)); } else { // Why does this not update the display at all? @@ -706,7 +706,7 @@ newVolCmd = effectInfo.GetVolCmdFromIndex(static_cast<UINT>(cbnVolCmd.GetItemData(n))); } - newVol = static_cast<ModCommand::VOL>(sldVolParam.GetPos()); + newVol = effectInfo.MapPosToVolume(newVolCmd, sldVolParam.GetPos()); const bool volCmdChanged = m->volcmd != newVolCmd; if(volCmdChanged || m->vol != newVol) @@ -1439,7 +1439,7 @@ bool update = false; // Volume slider - if(bar == reinterpret_cast<CScrollBar *>(&m_volSlider)) + if(bar->m_hWnd == m_volSlider.m_hWnd) { uint16 pos = static_cast<uint16>(m_volSlider.GetPos()); PrepareUndo(); @@ -1450,7 +1450,7 @@ } } // Pan slider - if(bar == reinterpret_cast<CScrollBar *>(&m_panSlider)) + if(bar->m_hWnd == m_panSlider.m_hWnd) { uint16 pos = static_cast<uint16>(m_panSlider.GetPos()); PrepareUndo(); |