From: <sag...@us...> - 2011-05-08 20:24:56
|
Revision: 867 http://modplug.svn.sourceforge.net/modplug/?rev=867&view=rev Author: saga-games Date: 2011-05-08 20:24:49 +0000 (Sun, 08 May 2011) Log Message: ----------- [Ref] More pattern cursor refactoring. Modified Paths: -------------- trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2011-05-08 19:43:27 UTC (rev 866) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2011-05-08 20:24:49 UTC (rev 867) @@ -217,7 +217,7 @@ bUpdateScroll = true; } if (m_nRow >= pSndFile->Patterns[m_nPattern].GetNumRows()) m_nRow = 0; - int sel = m_dwCursor | (m_nRow << 16); + int sel = CreateCursor(m_nRow) | m_dwCursor; SetCurSel(sel, sel); UpdateSizes(); UpdateScrollSize(); @@ -331,7 +331,7 @@ // Fix: Horizontal scrollbar pos screwed when selecting with mouse UpdateScrollbarPositions(bUpdateHorizontalScrollbar); InvalidateRow(); - int sel = m_dwCursor | (m_nRow << 16); + int sel = CreateCursor(m_nRow) | m_dwCursor; int sel0 = sel; if ((m_dwStatus & (PATSTATUS_KEYDRAGSEL|PATSTATUS_MOUSEDRAGSEL)) && (!(m_dwStatus & PATSTATUS_DRAGNDROPEDIT))) sel0 = m_dwStartSel; @@ -367,7 +367,7 @@ } if ((ncol >> 3) >= pSndFile->GetNumChannels()) return FALSE; m_dwCursor = ncol; - int sel = m_dwCursor | (m_nRow << 16); + int sel = CreateCursor(m_nRow) | m_dwCursor; int sel0 = sel; if ((m_dwStatus & (PATSTATUS_KEYDRAGSEL|PATSTATUS_MOUSEDRAGSEL)) && (!(m_dwStatus & PATSTATUS_DRAGNDROPEDIT))) sel0 = m_dwStartSel; @@ -609,7 +609,7 @@ } if (m_pEditWnd) { - m_pEditWnd->ShowEditWindow(m_nPattern, (m_nRow << 16) | m_dwCursor); + m_pEditWnd->ShowEditWindow(m_nPattern, CreateCursor(m_nRow) | m_dwCursor); return TRUE; } return FALSE; @@ -1110,7 +1110,7 @@ //----------------------------------------------------------- { DWORD dwPos = GetPositionFromPoint(point); - if ((dwPos == ((m_nRow << 16) | m_dwCursor)) && (point.y >= m_szHeader.cy)) + if ((dwPos == (CreateCursor(m_nRow) | m_dwCursor)) && (point.y >= m_szHeader.cy)) { if (ShowEditWindow()) return; } @@ -1437,7 +1437,7 @@ UINT max = pModDoc->GetSoundFile()->Patterns[m_nPattern].GetNumRows(); if ((row) && (row >= max)) row = max-1; dwPos &= 0xFFFF; - dwPos |= (row << 16); + dwPos |= CreateCursor(row); } // Drag & Drop editing if (m_dwStatus & PATSTATUS_DRAGNDROPEDIT) @@ -1474,9 +1474,7 @@ if (pModDoc) { CSoundFile *pSndFile = pModDoc->GetSoundFile(); - SetCurSel(0, ((pSndFile->Patterns[m_nPattern].GetNumRows()-1) << 16) - | ((pSndFile->m_nChannels - 1) << 3) - | (4)); + SetCurSel(CreateCursor(0), CreateCursor(pSndFile->Patterns[m_nPattern].GetNumRows() - 1, pSndFile->GetNumChannels() - 1, LAST_COLUMN)); } } @@ -1488,9 +1486,7 @@ if (pModDoc) { CSoundFile *pSndFile = pModDoc->GetSoundFile(); - SetCurSel(m_nMenuParam & 0xFFF8, - ((pSndFile->Patterns[m_nPattern].GetNumRows()-1) << 16) - | ((m_nMenuParam & 0xFFF8)+4)); + SetCurSel(CreateCursor(0, GetChanFromCursor(m_nMenuParam), 0), CreateCursor(pSndFile->Patterns[m_nPattern].GetNumRows() - 1, GetChanFromCursor(m_nMenuParam), LAST_COLUMN)); } } @@ -1502,14 +1498,13 @@ if (pModDoc) { CSoundFile *pSndFile = pModDoc->GetSoundFile(); - DWORD dwBeginSel = m_dwCursor & 0xFFF8; - DWORD dwEndSel = ((pSndFile->Patterns[m_nPattern].GetNumRows()-1) << 16) | ((m_dwCursor & 0xFFF8)+4); + DWORD dwBeginSel = CreateCursor(0, GetChanFromCursor(m_dwCursor), 0); + DWORD dwEndSel = CreateCursor(pSndFile->Patterns[m_nPattern].GetNumRows() - 1, GetChanFromCursor(m_dwCursor), LAST_COLUMN); // If column is already selected, select the current pattern if ((dwBeginSel == m_dwBeginSel) && (dwEndSel == m_dwEndSel)) { - dwBeginSel = 0; - dwEndSel &= 0xFFFF0000; - dwEndSel |= ((pSndFile->m_nChannels-1) << 3) + 4; + dwBeginSel = CreateCursor(0); + dwEndSel = CreateCursor(pSndFile->Patterns[m_nPattern].GetNumRows() - 1, pSndFile->GetNumChannels() - 1, LAST_COLUMN); } SetCurSel(dwBeginSel, dwEndSel); } @@ -1690,7 +1685,7 @@ } } //rewbs.customKeys - DWORD finalPos = (GetSelectionStartRow() << 16) | (m_dwEndSel & 0xFFFF); + DWORD finalPos = CreateCursor(GetSelectionStartRow()) | (m_dwEndSel & 0xFFFF); SetCurSel(finalPos, finalPos); // Fix: Horizontal scrollbar pos screwed when selecting with mouse SetCursorPosition( GetRowFromCursor(finalPos), finalPos & 0xFFFF ); @@ -2259,10 +2254,10 @@ if (((pMainFrm->GetFollowSong(pModDoc) != m_hWnd) || (pSndFile->IsPaused()) || (!(m_dwStatus & PATSTATUS_FOLLOWSONG)))) { - DWORD sel = (nChn << 3) | (m_nRow << 16); + DWORD sel = CreateCursor(m_nRow, nChn, 0); InvalidateArea(sel, sel + LAST_COLUMN); SetCurrentRow(m_nRow + m_nSpacing); - sel = m_dwCursor | (m_nRow << 16); + sel = CreateCursor(m_nRow) | m_dwCursor; SetCurSel(sel, sel); } } @@ -3695,7 +3690,7 @@ case kcNavigateLeftSelect: case kcNavigateLeft: if ((CMainFrame::m_dwPatternSetup & PATTERN_WRAP) && (!m_dwCursor)) - SetCurrentColumn((((pSndFile->m_nChannels-1) << 3) | 4)); + SetCurrentColumn((((pSndFile->GetNumChannels() - 1) << 3) | 4)); else SetCurrentColumn(m_dwCursor - 1); return wParam; @@ -3712,7 +3707,7 @@ SetCurrentColumn((((GetChanFromCursor(m_dwCursor) - 1) % pSndFile->m_nChannels) << 3) | GetColTypeFromCursor(m_dwCursor)); else SetCurrentColumn(GetColTypeFromCursor(m_dwCursor) | ((pSndFile->m_nChannels-1) << 3)); - UINT n = (m_nRow << 16) | (m_dwCursor); + UINT n = CreateCursor(m_nRow) | m_dwCursor; SetCurSel(n, n); return wParam;} case kcHomeHorizontalSelect: @@ -3727,15 +3722,15 @@ case kcHomeAbsolute: if (m_dwCursor) SetCurrentColumn(0); if (m_nRow > 0) SetCurrentRow(0); return wParam; case kcEndHorizontalSelect: - case kcEndHorizontal: if (m_dwCursor!=(((pSndFile->m_nChannels-1) << 3) | 4)) SetCurrentColumn(((pSndFile->m_nChannels-1) << 3) | 4); + case kcEndHorizontal: if (m_dwCursor!=(((pSndFile->GetNumChannels() - 1) << 3) | 4)) SetCurrentColumn(((pSndFile->m_nChannels-1) << 3) | 4); else if (m_nRow < pModDoc->GetPatternSize(m_nPattern) - 1) SetCurrentRow(pModDoc->GetPatternSize(m_nPattern) - 1); return wParam; case kcEndVerticalSelect: case kcEndVertical: if (m_nRow < pModDoc->GetPatternSize(m_nPattern) - 1) SetCurrentRow(pModDoc->GetPatternSize(m_nPattern) - 1); - else if (m_dwCursor!=(((pSndFile->m_nChannels-1) << 3) | 4)) SetCurrentColumn(((pSndFile->m_nChannels-1) << 3) | 4); + else if (m_dwCursor!=(((pSndFile->GetNumChannels() - 1) << 3) | 4)) SetCurrentColumn(((pSndFile->m_nChannels-1) << 3) | 4); return wParam; case kcEndAbsoluteSelect: - case kcEndAbsolute: SetCurrentColumn(((pSndFile->m_nChannels-1) << 3) | 4); if (m_nRow < pModDoc->GetPatternSize(m_nPattern) - 1) SetCurrentRow(pModDoc->GetPatternSize(m_nPattern) - 1); return wParam; + case kcEndAbsolute: SetCurrentColumn(((pSndFile->GetNumChannels() - 1) << 3) | 4); if (m_nRow < pModDoc->GetPatternSize(m_nPattern) - 1) SetCurrentRow(pModDoc->GetPatternSize(m_nPattern) - 1); return wParam; case kcNextPattern: { UINT n = m_nPattern + 1; while ((n < pSndFile->Patterns.Size()) && (!pSndFile->Patterns[n])) n++; @@ -3753,14 +3748,14 @@ return wParam; } case kcSelectWithCopySelect: case kcSelectWithNav: - case kcSelect: if (!(m_dwStatus & (PATSTATUS_DRAGNDROPEDIT|PATSTATUS_SELECTROW))) m_dwStartSel = (m_nRow << 16) | m_dwCursor; + case kcSelect: if (!(m_dwStatus & (PATSTATUS_DRAGNDROPEDIT|PATSTATUS_SELECTROW))) m_dwStartSel = CreateCursor(m_nRow) | m_dwCursor; m_dwStatus |= PATSTATUS_KEYDRAGSEL; return wParam; case kcSelectOffWithCopySelect: case kcSelectOffWithNav: case kcSelectOff: m_dwStatus &= ~PATSTATUS_KEYDRAGSEL; return wParam; case kcCopySelectWithSelect: case kcCopySelectWithNav: - case kcCopySelect: if (!(m_dwStatus & (PATSTATUS_DRAGNDROPEDIT|PATSTATUS_SELECTROW))) m_dwStartSel = (m_nRow << 16) | m_dwCursor; + case kcCopySelect: if (!(m_dwStatus & (PATSTATUS_DRAGNDROPEDIT|PATSTATUS_SELECTROW))) m_dwStartSel = CreateCursor(m_nRow) | m_dwCursor; m_dwStatus |= PATSTATUS_CTRLDRAGSEL; return wParam; case kcCopySelectOffWithSelect: case kcCopySelectOffWithNav: @@ -3777,15 +3772,15 @@ case kcClearFieldStep: OnClearField(GetColTypeFromCursor(m_dwCursor), true); return wParam; case kcClearFieldStepITStyle: OnClearField(GetColTypeFromCursor(m_dwCursor), true, true); return wParam; case kcDeleteRows: OnDeleteRows(); return wParam; - case kcDeleteAllRows: DeleteRows(0, pSndFile->m_nChannels-1,1); return wParam; + case kcDeleteAllRows: DeleteRows(0, pSndFile->GetNumChannels() - 1, 1); return wParam; case kcInsertRow: OnInsertRows(); return wParam; - case kcInsertAllRows: InsertRows(0, pSndFile->m_nChannels-1); return wParam; + case kcInsertAllRows: InsertRows(0, pSndFile->GetNumChannels() - 1); return wParam; case kcShowNoteProperties: ShowEditWindow(); return wParam; case kcShowPatternProperties: OnPatternProperties(); return wParam; case kcShowMacroConfig: SendCtrlMessage(CTRLMSG_SETUPMACROS); return wParam; case kcShowSplitKeyboardSettings: SetSplitKeyboardSettings(); return wParam; - case kcShowEditMenu: {CPoint pt = GetPointFromPosition((m_nRow << 16) | m_dwCursor); + case kcShowEditMenu: {CPoint pt = GetPointFromPosition(CreateCursor(m_nRow) | m_dwCursor); OnRButtonDown(0, pt); } return wParam; case kcPatternGoto: OnEditGoto(); return wParam; @@ -3807,7 +3802,7 @@ case kcCopyAndLoseSelection: { OnEditCopy(); - int sel = m_dwCursor | (m_nRow << 16); + int sel = CreateCursor(m_nRow) | m_dwCursor; SetCurSel(sel, sel); return wParam; } @@ -3971,7 +3966,7 @@ if (IsEditingEnabled_bmsg()) { - DWORD sel = (m_nRow << 16) | m_dwCursor; + DWORD sel = CreateCursor(m_nRow) | m_dwCursor; SetCurSel(sel, sel); sel &= ~7; if(oldcmd != *p) @@ -4046,7 +4041,7 @@ } } - DWORD sel = (m_nRow << 16) | m_dwCursor; + DWORD sel = CreateCursor(m_nRow) | m_dwCursor; SetCurSel(sel, sel); sel &= ~7; if(oldcmd != *p) @@ -4093,7 +4088,7 @@ } } - DWORD sel = (m_nRow << 16) | m_dwCursor; + DWORD sel = CreateCursor(m_nRow) | m_dwCursor; SetCurSel(sel, sel); sel &= ~7; if(*p != oldcmd) @@ -4232,7 +4227,7 @@ // Update only if not recording live. if(bIsLiveRecord == false) { - DWORD sel = (nRow << 16) | (nChn << 3); + DWORD sel = CreateCursor(nRow, nChn, 0); InvalidateArea(sel, sel + LAST_COLUMN); UpdateIndicator(); } @@ -4307,7 +4302,7 @@ if (IsEditingEnabled_bmsg()) { - DWORD sel = (m_nRow << 16) | m_dwCursor; + DWORD sel = CreateCursor(m_nRow) | m_dwCursor; SetCurSel(sel, sel); sel &= ~7; if(*p != oldcmd) @@ -4369,7 +4364,7 @@ { pModDoc->GetPatternUndo()->PrepareUndo(m_nPattern, nChn, nRow, 1, 1); pSndFile->Patterns[m_nPattern].GetpModCommand(nRow, nChn)->note = note; - const DWORD sel = (nRow << 16) | m_dwCursor; + const DWORD sel = CreateCursor(nRow) | m_dwCursor; pModDoc->SetModified(); InvalidateArea(sel, sel + LAST_COLUMN); UpdateIndicator(); @@ -4508,7 +4503,7 @@ // -- if recording, handle post note entry behaviour (move cursor etc..) if(bRecordEnabled) { - DWORD sel = (nRow << 16) | m_dwCursor; + DWORD sel = CreateCursor(nRow) | m_dwCursor; if(bIsLiveRecord == false) { // Update only when not recording live. SetCurSel(sel, sel); @@ -4540,7 +4535,7 @@ } // we must remember to not step back should the next note form a chord. } - DWORD sel = m_dwCursor | (m_nRow << 16); + DWORD sel = CreateCursor(m_nRow) | m_dwCursor; SetCurSel(sel, sel); } @@ -4679,9 +4674,9 @@ // -- write notedata if(bRecordEnabled) { - DWORD sel = (m_nRow << 16) | m_dwCursor; + DWORD sel = CreateCursor(m_nRow) | m_dwCursor; SetCurSel(sel, sel); - sel &= ~7; + sel = GetRowFromCursor(sel) | GetChanFromCursor(sel); if(modified) { for(CHANNELINDEX n = 0; n < pSndFile->GetNumChannels(); n++) @@ -4750,7 +4745,7 @@ { if ((m_nSpacing > 0) && (m_nSpacing <= MAX_SPACING)) SetCurrentRow(m_nRow + m_nSpacing); - DWORD sel = m_dwCursor | (m_nRow << 16); + DWORD sel = CreateCursor(m_nRow) | m_dwCursor; SetCurSel(sel, sel); } @@ -4793,9 +4788,9 @@ if(IsEditingEnabled_bmsg()) { - DWORD sel = (m_nRow << 16) | m_dwCursor; + DWORD sel = CreateCursor(m_nRow) | m_dwCursor; SetCurSel(sel, sel); - sel &= ~7; + sel = GetRowFromCursor(sel) | GetChanFromCursor(sel); if(*p != oldcmd) { pModDoc->SetModified(); @@ -4807,7 +4802,7 @@ { if ((m_nSpacing > 0) && (m_nSpacing <= MAX_SPACING)) SetCurrentRow(m_nRow+m_nSpacing); - DWORD sel = m_dwCursor | (m_nRow << 16); + DWORD sel = CreateCursor(m_nRow) | m_dwCursor; SetCurSel(sel, sel); } } else @@ -5733,31 +5728,33 @@ // Snap to end of beat / measure of lower-right corner of current selection const ROWINDEX endRow = GetSelectionEndRow() + adjust - (GetSelectionEndRow() % adjust) - 1; - DWORD startMask = (GetSelectionStartChan() << 3), endMask = (GetSelectionEndChan() << 3); + CHANNELINDEX startChannel = GetSelectionStartChan(), endChannel = GetSelectionEndChan(); + UINT startColumn = 0, endColumn = 0; if(m_dwBeginSel == m_dwEndSel) { // No selection has been made yet => expand selection to whole channel. - endMask |= LAST_COLUMN; // Extend to param column; + endColumn = LAST_COLUMN; // Extend to param column } else if(startRow == GetSelectionStartRow() && endRow == GetSelectionEndRow()) { // Whole beat or measure is already selected if(GetColTypeFromCursor(m_dwBeginSel) == NOTE_COLUMN && GetColTypeFromCursor(m_dwEndSel) == LAST_COLUMN) { // Whole channel is already selected => expand selection to whole row. - startMask = 0; - endMask = 0xFFFF; + startChannel = startColumn = 0; + endChannel = MAX_BASECHANNELS; + endColumn = LAST_COLUMN; } else { // Channel is only partly selected => expand to whole channel first. - endMask |= LAST_COLUMN; // Extend to param column; + endColumn = LAST_COLUMN; // Extend to param column } } else { // Some arbitrary selection: Remember start / end column - startMask |= GetColTypeFromCursor(m_dwBeginSel); - endMask |= GetColTypeFromCursor(m_dwEndSel); + startColumn = GetColTypeFromCursor(m_dwBeginSel); + endColumn = GetColTypeFromCursor(m_dwEndSel); } - SetCurSel((startRow << 16) | startMask, (endRow << 16) | endMask); + SetCurSel(CreateCursor(startRow, startChannel, startColumn), CreateCursor(endRow, endChannel, endColumn)); } Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2011-05-08 19:43:27 UTC (rev 866) +++ trunk/OpenMPT/mptrack/View_pat.h 2011-05-08 20:24:49 UTC (rev 867) @@ -375,6 +375,7 @@ static ROWINDEX GetRowFromCursor(DWORD cursor) { return (cursor >> 16); }; static CHANNELINDEX GetChanFromCursor(DWORD cursor) { return static_cast<CHANNELINDEX>((cursor & 0xFFFF) >> 3); }; static UINT GetColTypeFromCursor(DWORD cursor) { return (cursor & 0x07); }; + static DWORD CreateCursor(ROWINDEX row, CHANNELINDEX channel = 0, UINT column = 0) { return (row << 16) | ((channel << 3) & 0x1FFF) | (column & 0x07); }; bool IsInterpolationPossible(ROWINDEX startRow, ROWINDEX endRow, CHANNELINDEX chan, PatternColumns colType, CSoundFile* pSndFile); void Interpolate(PatternColumns type); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |