From: <sv...@op...> - 2024-03-02 21:17:18
|
Author: sagamusix Date: Sat Mar 2 22:17:07 2024 New Revision: 20180 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=20180 Log: [Fix] Pattern tab: Avoid selecting an invisible column when pattern detail is medium or high and right-clicking past the last channel. Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/PatternCursor.h trunk/OpenMPT/mptrack/PatternFindReplace.cpp trunk/OpenMPT/mptrack/View_pat.cpp Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp Sat Mar 2 21:22:13 2024 (r20179) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp Sat Mar 2 22:17:07 2024 (r20180) @@ -1520,7 +1520,7 @@ m_Selection = PatternRect(beginSel, endSel); if(const CSoundFile *sndFile = GetSoundFile(); sndFile != nullptr && sndFile->Patterns.IsValidPat(m_nPattern)) { - m_Selection.Sanitize(sndFile->Patterns[m_nPattern].GetNumRows(), sndFile->GetNumChannels()); + m_Selection.Sanitize(sndFile->Patterns[m_nPattern].GetNumRows(), sndFile->GetNumChannels(), m_nDetailLevel); } UpdateIndicator(); Modified: trunk/OpenMPT/mptrack/PatternCursor.h ============================================================================== --- trunk/OpenMPT/mptrack/PatternCursor.h Sat Mar 2 21:22:13 2024 (r20179) +++ trunk/OpenMPT/mptrack/PatternCursor.h Sat Mar 2 22:17:07 2024 (r20180) @@ -173,7 +173,7 @@ // Ensure that the point lies within a given pattern size. - void Sanitize(ROWINDEX maxRows, CHANNELINDEX maxChans) + void Sanitize(ROWINDEX maxRows, CHANNELINDEX maxChans, Columns maxColumn = PatternCursor::lastColumn) { ROWINDEX row = std::min(GetRow(), static_cast<ROWINDEX>(maxRows - 1)); CHANNELINDEX chn = GetChannel(); @@ -182,10 +182,10 @@ if(chn >= maxChans) { chn = maxChans - 1; - col = lastColumn; - } else if(col > lastColumn) + col = maxColumn; + } else if(col > maxColumn) { - col = lastColumn; + col = maxColumn; } Set(row, chn, col); }; @@ -272,11 +272,11 @@ } // Ensure that the selection doesn't exceed a given pattern size. - void Sanitize(ROWINDEX maxRows, CHANNELINDEX maxChans) + void Sanitize(ROWINDEX maxRows, CHANNELINDEX maxChans, PatternCursor::Columns maxColumn = PatternCursor::lastColumn) { - upperLeft.Sanitize(maxRows, maxChans); - lowerRight.Sanitize(maxRows, maxChans); - }; + upperLeft.Sanitize(maxRows, maxChans, maxColumn); + lowerRight.Sanitize(maxRows, maxChans, maxColumn); + } // Get first row of selection Modified: trunk/OpenMPT/mptrack/PatternFindReplace.cpp ============================================================================== --- trunk/OpenMPT/mptrack/PatternFindReplace.cpp Sat Mar 2 21:22:13 2024 (r20179) +++ trunk/OpenMPT/mptrack/PatternFindReplace.cpp Sat Mar 2 22:17:07 2024 (r20180) @@ -40,7 +40,7 @@ } else if(sndFile.Patterns.IsValidPat(m_nPattern)) { const CPattern &pat = sndFile.Patterns[m_nPattern]; - m_Cursor.Sanitize(pat.GetNumRows(), pat.GetNumChannels()); + m_Cursor.Sanitize(pat.GetNumRows(), pat.GetNumChannels(), m_nDetailLevel); m = *pat.GetpModCommand(m_Cursor.GetRow(), m_Cursor.GetChannel()); } Modified: trunk/OpenMPT/mptrack/View_pat.cpp ============================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp Sat Mar 2 21:22:13 2024 (r20179) +++ trunk/OpenMPT/mptrack/View_pat.cpp Sat Mar 2 22:17:07 2024 (r20180) @@ -3844,8 +3844,8 @@ if(pSndFile != nullptr && pSndFile->Patterns.IsValidPat(GetCurrentPattern())) { const auto &pattern = GetSoundFile()->Patterns[m_nPattern]; - m_Cursor.Sanitize(pattern.GetNumRows(), pattern.GetNumChannels()); - m_Selection.Sanitize(pattern.GetNumRows(), pattern.GetNumChannels()); + m_Cursor.Sanitize(pattern.GetNumRows(), pattern.GetNumChannels(), m_nDetailLevel); + m_Selection.Sanitize(pattern.GetNumRows(), pattern.GetNumChannels(), m_nDetailLevel); } }; |