From: <sag...@us...> - 2013-03-19 21:44:35
|
Revision: 1603 http://sourceforge.net/p/modplug/code/1603 Author: saga-games Date: 2013-03-19 21:44:23 +0000 (Tue, 19 Mar 2013) Log Message: ----------- [Ref] Removed CModDoc::SetPause (m_bPause was never read) [Ref] Changed all CSoundFile* to CSoundFile& in ctrl_seq [Ref] Removed unused modplug player code [Ref] Various small changes here and there. Modified Paths: -------------- trunk/OpenMPT/common/typedefs.h trunk/OpenMPT/mptrack/Ctrl_pat.h trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/KeyConfigDlg.h trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/soundlib/Fastmix.cpp trunk/OpenMPT/soundlib/LOAD_DBM.CPP trunk/OpenMPT/soundlib/LOAD_DSM.CPP trunk/OpenMPT/soundlib/Load_mdl.cpp trunk/OpenMPT/soundlib/Load_med.cpp trunk/OpenMPT/soundlib/Load_ptm.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/common/typedefs.h =================================================================== --- trunk/OpenMPT/common/typedefs.h 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/common/typedefs.h 2013-03-19 21:44:23 UTC (rev 1603) @@ -28,7 +28,7 @@ #define CountOf(x) (sizeof(x)/sizeof(x[0])) #endif -//Compile time assert. +// Compile time assert. #ifndef C_ASSERT #define C_ASSERT(expr) typedef char __C_ASSERT__[(expr)?1:-1] #endif @@ -38,6 +38,19 @@ #define static_assert(expr, msg) C_ASSERT(expr) #endif +// Advanced inline attributes +#if defined(_MSC_VER) +#define forceinline __forceinline +#define noinline __declspec(noinline) +#elif defined(__GNUC__) +#define forceinline __attribute__((always_inline)) inline +#define noinline __attribute__((noinline)) +#else +#define forceinline inline +#define noinline +#endif + + typedef __int8 int8; typedef __int16 int16; typedef __int32 int32; Modified: trunk/OpenMPT/mptrack/Ctrl_pat.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.h 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/mptrack/Ctrl_pat.h 2013-03-19 21:44:23 UTC (rev 1603) @@ -60,7 +60,8 @@ if(isSelectionKeyPressed && m_nScrollPos2nd == ORDERINDEX_INVALID) m_nScrollPos2nd = m_nScrollPos; else if(!isSelectionKeyPressed && m_nScrollPos2nd != ORDERINDEX_INVALID) m_nScrollPos2nd = ORDERINDEX_INVALID; }; - bool SetCurSel(ORDERINDEX sel, bool bEdit = true, bool bShiftClick = false, bool bIgnoreCurSel = false); + // Why VC wants to inline this huge function is beyond my understanding... + noinline bool SetCurSel(ORDERINDEX sel, bool bEdit = true, bool bShiftClick = false, bool bIgnoreCurSel = false); BOOL UpdateScrollInfo(); void UpdateInfoText(); int GetFontWidth(); Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2013-03-19 21:44:23 UTC (rev 1603) @@ -161,19 +161,20 @@ if ((m_pModDoc) && (m_cxFont > 0) && (rcClient.right > 0)) { CRect rect; - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); SCROLLINFO info; UINT nPage; int nMax = 0; - if(pSndFile->GetType() & (MOD_TYPE_MOD | MOD_TYPE_XM)) - { // With MOD / XM, cut shown sequence to first '---' item... - nMax = pSndFile->Order.GetLengthFirstEmpty(); + if(sndFile.GetType() & (MOD_TYPE_MOD | MOD_TYPE_XM)) + { + // With MOD / XM, cut shown sequence to first '---' item... + nMax = sndFile.Order.GetLengthFirstEmpty(); + } else + { + // ...for S3M/IT/MPT, show sequence until the last used item. + nMax = sndFile.Order.GetLengthTailTrimmed(); } - else - { // ...for S3M/IT/MPT, show sequence until the last used item. - nMax = pSndFile->Order.GetLengthTailTrimmed(); - } GetScrollInfo(SB_HORZ, &info, SIF_PAGE|SIF_RANGE); info.fMask = SIF_PAGE|SIF_RANGE; @@ -266,8 +267,8 @@ else result.lastOrd = m_nScrollPos2nd; } - LimitMax(result.firstOrd, m_pModDoc->GetSoundFile()->Order.GetLastIndex()); - LimitMax(result.lastOrd, m_pModDoc->GetSoundFile()->Order.GetLastIndex()); + LimitMax(result.firstOrd, m_pModDoc->GetrSoundFile().Order.GetLastIndex()); + LimitMax(result.lastOrd, m_pModDoc->GetrSoundFile().Order.GetLastIndex()); return result; } @@ -276,10 +277,10 @@ //------------------------------------------------------------------------------------------ { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); ORDERINDEX &nOrder = bShiftClick ? m_nScrollPos2nd : m_nScrollPos; - if ((sel < 0) || (sel >= pSndFile->Order.GetLength()) || (!m_pParent) || (!pMainFrm)) return false; + if ((sel < 0) || (sel >= sndFile.Order.GetLength()) || (!m_pParent) || (!pMainFrm)) return false; if (!bIgnoreCurSel && sel == nOrder) return true; const ORDERINDEX nShownLength = GetLength(); InvalidateSelection(); @@ -312,41 +313,41 @@ InvalidateSelection(); if ((m_pParent) && (m_pModDoc) && (bEdit)) { - PATTERNINDEX n = pSndFile->Order[m_nScrollPos]; - if ((n < pSndFile->Patterns.Size()) && (pSndFile->Patterns[n]) && !bShiftClick) + PATTERNINDEX n = sndFile.Order[m_nScrollPos]; + if ((n < sndFile.Patterns.Size()) && (sndFile.Patterns[n]) && !bShiftClick) { CriticalSection cs; bool isPlaying = (pMainFrm->GetModPlaying() == m_pModDoc); bool changedPos = false; - if(isPlaying && pSndFile->m_SongFlags[SONG_PATTERNLOOP]) + if(isPlaying && sndFile.m_SongFlags[SONG_PATTERNLOOP]) { // update channel parameters and play time m_pModDoc->SetElapsedTime(m_nScrollPos, 0); - pSndFile->m_nPattern = n; - pSndFile->m_nCurrentOrder = pSndFile->m_nNextOrder = m_nScrollPos; + sndFile.m_nPattern = n; + sndFile.m_nCurrentOrder = sndFile.m_nNextOrder = m_nScrollPos; pMainFrm->ResetNotificationBuffer(); - pSndFile->m_nNextRow = 0; + sndFile.m_nNextRow = 0; changedPos = true; } else if(m_pParent->GetFollowSong()) { - SongFlags pausedFlags = pSndFile->m_SongFlags & (SONG_PAUSED | SONG_STEP | SONG_PATTERNLOOP); + SongFlags pausedFlags = sndFile.m_SongFlags & (SONG_PAUSED | SONG_STEP | SONG_PATTERNLOOP); // update channel parameters and play time m_pModDoc->SetElapsedTime(m_nScrollPos, 0); - pSndFile->m_nCurrentOrder = m_nScrollPos; - pSndFile->SetCurrentOrder(m_nScrollPos); - pSndFile->m_SongFlags.set(pausedFlags); + sndFile.m_nCurrentOrder = m_nScrollPos; + sndFile.SetCurrentOrder(m_nScrollPos); + sndFile.m_SongFlags.set(pausedFlags); if(isPlaying) pMainFrm->ResetNotificationBuffer(); changedPos = true; } - if(changedPos && pSndFile->Order.IsPositionLocked(m_nScrollPos)) + if(changedPos && sndFile.Order.IsPositionLocked(m_nScrollPos)) { // Users wants to go somewhere else, so let him do that. OnUnlockPlayback(); @@ -364,10 +365,9 @@ UINT COrderList::GetCurrentPattern() const //---------------------------------------- { - CSoundFile* pSndFile = m_pModDoc ? m_pModDoc->GetSoundFile() : NULL; - if ((pSndFile) && (m_nScrollPos < pSndFile->Order.GetLength())) + if(m_pModDoc && (m_nScrollPos < m_pModDoc->GetrSoundFile().Order.GetLength())) { - return pSndFile->Order[m_nScrollPos]; + return m_pModDoc->GetrSoundFile().Order[m_nScrollPos]; } return 0; } @@ -437,10 +437,10 @@ // fallthroughs intended. case kcOrderlistNavigateLastSelect: case kcOrderlistNavigateLast: - if((m_pModDoc != nullptr) && (m_pModDoc->GetSoundFile() != nullptr)) + if(m_pModDoc != nullptr) { SetCurSelTo2ndSel(wParam == kcOrderlistNavigateLastSelect || wParam == kcEditSelectAll); - ORDERINDEX nLast = m_pModDoc->GetSoundFile()->Order.GetLengthTailTrimmed(); + ORDERINDEX nLast = m_pModDoc->GetrSoundFile().Order.GetLengthTailTrimmed(); if(nLast > 0) nLast--; SetCurSel(nLast); } @@ -511,17 +511,16 @@ //-------------------------------------------- { if (m_pModDoc == nullptr) return; - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); - if(pSndFile == nullptr) return; + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); - PATTERNINDEX nCurNdx = (m_nScrollPos < pSndFile->Order.GetLength()) ? pSndFile->Order[m_nScrollPos] : pSndFile->Order.GetInvalidPatIndex(); + PATTERNINDEX nCurNdx = (m_nScrollPos < sndFile.Order.GetLength()) ? sndFile.Order[m_nScrollPos] : sndFile.Order.GetInvalidPatIndex(); PATTERNINDEX nMaxNdx = 0; - for(PATTERNINDEX nPat = 0; nPat < pSndFile->Patterns.Size(); nPat++) - if (pSndFile->Patterns.IsValidPat(nPat)) nMaxNdx = nPat; + for(PATTERNINDEX nPat = 0; nPat < sndFile.Patterns.Size(); nPat++) + if (sndFile.Patterns.IsValidPat(nPat)) nMaxNdx = nPat; if (enterNum >= 0 && enterNum <= 9) // enter 0...9 { - if (nCurNdx >= pSndFile->Patterns.Size()) nCurNdx = 0; + if (nCurNdx >= sndFile.Patterns.Size()) nCurNdx = 0; nCurNdx = nCurNdx * 10 + static_cast<PATTERNINDEX>(enterNum); STATIC_ASSERT(MAX_PATTERNS < 10000); @@ -530,9 +529,9 @@ if ((nCurNdx >= 10) && (nCurNdx > nMaxNdx)) nCurNdx %= 10; } else if (enterNum == 10) // decrease pattern index { - const PATTERNINDEX nFirstInvalid = pSndFile->GetModSpecifications().hasIgnoreIndex ? pSndFile->Order.GetIgnoreIndex() : pSndFile->Order.GetInvalidPatIndex(); + const PATTERNINDEX nFirstInvalid = sndFile.GetModSpecifications().hasIgnoreIndex ? sndFile.Order.GetIgnoreIndex() : sndFile.Order.GetInvalidPatIndex(); if (nCurNdx == 0) - nCurNdx = pSndFile->Order.GetInvalidPatIndex(); + nCurNdx = sndFile.Order.GetInvalidPatIndex(); else { nCurNdx--; @@ -540,31 +539,31 @@ } } else if (enterNum == 11) // increase pattern index { - if(nCurNdx >= pSndFile->Order.GetInvalidPatIndex()) + if(nCurNdx >= sndFile.Order.GetInvalidPatIndex()) { nCurNdx = 0; } else { nCurNdx++; - const PATTERNINDEX nFirstInvalid = pSndFile->GetModSpecifications().hasIgnoreIndex ? pSndFile->Order.GetIgnoreIndex() : pSndFile->Order.GetInvalidPatIndex(); + const PATTERNINDEX nFirstInvalid = sndFile.GetModSpecifications().hasIgnoreIndex ? sndFile.Order.GetIgnoreIndex() : sndFile.Order.GetInvalidPatIndex(); if(nCurNdx > nMaxNdx && nCurNdx < nFirstInvalid) nCurNdx = nFirstInvalid; } } else if (enterNum == 12) // ignore index (+++) { - if (pSndFile->GetModSpecifications().hasIgnoreIndex) + if (sndFile.GetModSpecifications().hasIgnoreIndex) { - nCurNdx = pSndFile->Order.GetIgnoreIndex(); + nCurNdx = sndFile.Order.GetIgnoreIndex(); } } else if (enterNum == 13) // invalid index (---) { - nCurNdx = pSndFile->Order.GetInvalidPatIndex(); + nCurNdx = sndFile.Order.GetInvalidPatIndex(); } // apply - if (nCurNdx != pSndFile->Order[m_nScrollPos]) + if (nCurNdx != sndFile.Order[m_nScrollPos]) { - pSndFile->Order[m_nScrollPos] = nCurNdx; + sndFile.Order[m_nScrollPos] = nCurNdx; m_pModDoc->SetModified(); m_pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, this); InvalidateSelection(); @@ -585,7 +584,7 @@ { const OrdSelection ordsel = GetCurSel(false); BeginWaitCursor(); - PatternClipboard::Copy(*m_pModDoc->GetSoundFile(), ordsel.firstOrd, ordsel.lastOrd); + PatternClipboard::Copy(m_pModDoc->GetrSoundFile(), ordsel.firstOrd, ordsel.lastOrd); PatternClipboardDialog::UpdateList(); EndWaitCursor(); } @@ -613,14 +612,14 @@ //------------------------------- { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - CSoundFile *pSndFile; - if ((pMainFrm != nullptr) && (m_pModDoc != nullptr) && (pSndFile = m_pModDoc->GetSoundFile()) != nullptr && (::GetFocus() == m_hWnd)) + if(pMainFrm != nullptr && m_pModDoc != nullptr && ::GetFocus() == m_hWnd) { + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); CHAR s[128]; strcpy(s, ""); // MOD orderlist always ends after first empty pattern - const ORDERINDEX nLength = (pSndFile->GetType() & MOD_TYPE_MOD) ? pSndFile->Order.GetLengthFirstEmpty() : pSndFile->Order.GetLengthTailTrimmed(); + const ORDERINDEX nLength = (sndFile.GetType() & MOD_TYPE_MOD) ? sndFile.Order.GetLengthFirstEmpty() : sndFile.Order.GetLengthTailTrimmed(); if(TrackerSettings::Instance().m_dwPatternSetup & PATTERN_HEXDISPLAY) { @@ -631,13 +630,13 @@ wsprintf(s, "Position %d of %d (%02Xh of %02Xh)", m_nScrollPos, nLength, m_nScrollPos, nLength); } - if (m_nScrollPos < pSndFile->Order.GetLength()) + if (m_nScrollPos < sndFile.Order.GetLength()) { - PATTERNINDEX nPat = pSndFile->Order[m_nScrollPos]; - if (nPat < pSndFile->Patterns.Size()) + PATTERNINDEX nPat = sndFile.Order[m_nScrollPos]; + if (nPat < sndFile.Patterns.Size()) { char szpat[MAX_PATTERNNAME] = ""; - if (pSndFile->Patterns[nPat].GetName(szpat) && strcmp(szpat, "")) + if (sndFile.Patterns[nPat].GetName(szpat) && strcmp(szpat, "")) { wsprintf(s + strlen(s), ": %s", szpat); } @@ -673,17 +672,17 @@ UpdateScrollInfo(); BOOL bFocus = (::GetFocus() == m_hWnd); dc.SetBkMode(TRANSPARENT); - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); GetClientRect(&rcClient); rect = rcClient; ORDERINDEX nIndex = m_nXScroll; OrdSelection selection = GetCurSel(false); - ORDERINDEX maxEntries = pSndFile->GetModSpecifications().ordersMax; - if(pSndFile->Order.GetLength() > maxEntries) + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); + ORDERINDEX maxEntries = sndFile.GetModSpecifications().ordersMax; + if(sndFile.Order.GetLength() > maxEntries) { // Only computed if potentially needed. - maxEntries = Util::Max(maxEntries, pSndFile->Order.GetLengthTailTrimmed()); + maxEntries = Util::Max(maxEntries, sndFile.Order.GetLengthTailTrimmed()); } // Scrolling the shown orders(the showns rectangles)? @@ -691,7 +690,7 @@ { dc.SetTextColor(colorText); bool bHighLight = ((bFocus) && (nIndex >= selection.firstOrd && nIndex <= selection.lastOrd)); - const PATTERNINDEX nPat = (nIndex < pSndFile->Order.GetLength()) ? pSndFile->Order[nIndex] : PATTERNINDEX_INVALID; + const PATTERNINDEX nPat = (nIndex < sndFile.Order.GetLength()) ? sndFile.Order[nIndex] : PATTERNINDEX_INVALID; if ((rect.right = rect.left + m_cxFont) > rcClient.right) rect.right = rcClient.right; rect.right--; @@ -699,7 +698,7 @@ { // Currently selected order item FillRect(dc.m_hDC, &rect, CMainFrame::brushHighLight); - } else if(pSndFile->Order.IsPositionLocked(nIndex)) + } else if(sndFile.Order.IsPositionLocked(nIndex)) { // "Playback lock" indicator - grey out all order items which aren't played. FillRect(dc.m_hDC, &rect, CMainFrame::brushGray); @@ -720,14 +719,14 @@ LineTo(dc.m_hDC, rect.right, rect.bottom); // Drawing the 'ctrl-transition' indicator - if(nIndex == pSndFile->m_nSeqOverride) + if(nIndex == sndFile.m_nSeqOverride) { MoveToEx(dc.m_hDC, rect.left + 4, rect.bottom - 4, NULL); LineTo(dc.m_hDC, rect.right - 4, rect.bottom - 4); } // Drawing 'playing'-indicator. - if(nIndex == pSndFile->GetCurrentOrder() && CMainFrame::GetMainFrame()->IsPlaying()) + if(nIndex == sndFile.GetCurrentOrder() && CMainFrame::GetMainFrame()->IsPlaying()) { MoveToEx(dc.m_hDC, rect.left + 4, rect.top + 2, NULL); LineTo(dc.m_hDC, rect.right - 4, rect.top + 2); @@ -736,16 +735,16 @@ s[0] = '\0'; if(nIndex < maxEntries && (rect.left + m_cxFont - 4) <= rcClient.right) { - if(nPat == pSndFile->Order.GetInvalidPatIndex()) strcpy(s, "---"); - else if(nPat == pSndFile->Order.GetIgnoreIndex()) strcpy(s, "+++"); - else if(nPat < Util::Max(pSndFile->Patterns.Size(), pSndFile->GetModSpecifications().patternsMax)) wsprintf(s, "%u", nPat); + if(nPat == sndFile.Order.GetInvalidPatIndex()) strcpy(s, "---"); + else if(nPat == sndFile.Order.GetIgnoreIndex()) strcpy(s, "+++"); + else if(nPat < Util::Max(sndFile.Patterns.Size(), sndFile.GetModSpecifications().patternsMax)) wsprintf(s, "%u", nPat); else strcpy(s, "???"); } const COLORREF &textCol = (bHighLight ? colorTextSel // Highlighted pattern - : (pSndFile->Patterns.IsValidPat(nPat) + : (sndFile.Patterns.IsValidPat(nPat) ? colorText // Normal pattern : colorInvalid)); // Non-existent pattern dc.SetTextColor(textCol); @@ -910,9 +909,9 @@ ORDERINDEX n = ORDERINDEX_INVALID; if (rect.PtInRect(pt)) { - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); n = GetOrderFromPoint(rect, pt); - if (n >= pSndFile->Order.GetLength() || n >= pSndFile->GetModSpecifications().ordersMax) n = ORDERINDEX_INVALID; + if (n >= sndFile.Order.GetLength() || n >= sndFile.GetModSpecifications().ordersMax) n = ORDERINDEX_INVALID; } if (n != m_nDropPos) { @@ -953,21 +952,21 @@ } if (pt.y >= rect.bottom) return; - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); - bool multiSelection = (m_nScrollPos2nd != ORDERINDEX_INVALID); if(!multiSelection) SetCurSel(GetOrderFromPoint(rect, pt)); SetFocus(); HMENU hMenu = ::CreatePopupMenu(); if(!hMenu) return; - + + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); + // Check if at least one pattern in the current selection exists bool patExists = false; OrdSelection selection = GetCurSel(false); for(ORDERINDEX ord = selection.firstOrd; ord <= selection.lastOrd && !patExists; ord++) { - patExists = pSndFile->Patterns.IsValidPat(pSndFile->Order[ord]); + patExists = sndFile.Patterns.IsValidPat(sndFile.Order[ord]); } const DWORD greyed = patExists ? 0 : MF_GRAYED; @@ -989,7 +988,7 @@ { // Only one pattern is selected AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_INSERT, "&Insert Pattern\t" + ih->GetKeyTextFromCommand(kcOrderlistEditInsert)); - if(pSndFile->GetModSpecifications().hasIgnoreIndex) + if(sndFile.GetModSpecifications().hasIgnoreIndex) { AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_INSERT_SEPARATOR, "&Insert Separator\t" + ih->GetKeyTextFromCommand(kcOrderlistPatIgnore)); } @@ -999,41 +998,41 @@ AppendMenu(hMenu, MF_STRING | greyed, ID_ORDERLIST_COPY, "&Duplicate Pattern\t" + ih->GetKeyTextFromCommand(kcDuplicatePattern)); AppendMenu(hMenu, MF_STRING | greyed, ID_PATTERNCOPY, "&Copy Pattern"); AppendMenu(hMenu, MF_STRING, ID_PATTERNPASTE, "P&aste Pattern\t" + ih->GetKeyTextFromCommand(kcEditPaste)); - if (pSndFile->TypeIsIT_MPT_XM()) + if (sndFile.TypeIsIT_MPT_XM()) { AppendMenu(hMenu, MF_SEPARATOR, NULL, ""); AppendMenu(hMenu, MF_STRING | greyed, ID_PATTERN_PROPERTIES, "&Pattern Properties..."); } - if (pSndFile->GetType() == MOD_TYPE_MPT) + if (sndFile.GetType() == MOD_TYPE_MPT) { AppendMenu(hMenu, MF_SEPARATOR, NULL, ""); HMENU menuSequence = ::CreatePopupMenu(); AppendMenu(hMenu, MF_POPUP, (UINT_PTR)menuSequence, TEXT("Sequences")); - const SEQUENCEINDEX numSequences = pSndFile->Order.GetNumSequences(); + const SEQUENCEINDEX numSequences = sndFile.Order.GetNumSequences(); for(SEQUENCEINDEX i = 0; i < numSequences; i++) { CString str; - if(pSndFile->Order.GetSequence(i).m_sName.IsEmpty()) + if(sndFile.Order.GetSequence(i).m_sName.IsEmpty()) str.Format(TEXT("Sequence %u"), i); else - str.Format(TEXT("%u: %s"), i, (LPCTSTR)pSndFile->Order.GetSequence(i).m_sName); - const UINT flags = (pSndFile->Order.GetCurrentSequenceIndex() == i) ? MF_STRING|MF_CHECKED : MF_STRING; + str.Format(TEXT("%u: %s"), i, (LPCTSTR)sndFile.Order.GetSequence(i).m_sName); + const UINT flags = (sndFile.Order.GetCurrentSequenceIndex() == i) ? MF_STRING|MF_CHECKED : MF_STRING; AppendMenu(menuSequence, flags, ID_SEQUENCE_ITEM + i, str); } - if (pSndFile->Order.GetNumSequences() < MAX_SEQUENCES) + if (sndFile.Order.GetNumSequences() < MAX_SEQUENCES) { AppendMenu(menuSequence, MF_STRING, ID_SEQUENCE_ITEM + MAX_SEQUENCES, TEXT("&Duplicate current sequence")); AppendMenu(menuSequence, MF_STRING, ID_SEQUENCE_ITEM + MAX_SEQUENCES + 1, TEXT("&Create empty sequence")); } - if (pSndFile->Order.GetNumSequences() > 1) + if (sndFile.Order.GetNumSequences() > 1) AppendMenu(menuSequence, MF_STRING, ID_SEQUENCE_ITEM + MAX_SEQUENCES + 2, TEXT("D&elete current sequence")); } } AppendMenu(hMenu, MF_SEPARATOR, NULL, ""); - AppendMenu(hMenu, ((selection.firstOrd == pSndFile->m_lockOrderStart && selection.lastOrd == pSndFile->m_lockOrderEnd) ? (MF_STRING | MF_CHECKED) : MF_STRING), ID_ORDERLIST_LOCKPLAYBACK, "&Lock Playback to Selection\t" + ih->GetKeyTextFromCommand(kcOrderlistLockPlayback)); - AppendMenu(hMenu, (pSndFile->m_lockOrderStart == ORDERINDEX_INVALID ? (MF_STRING | MF_GRAYED) : MF_STRING), ID_ORDERLIST_UNLOCKPLAYBACK, "&Unlock Playback\t" + ih->GetKeyTextFromCommand(kcOrderlistUnlockPlayback)); + AppendMenu(hMenu, ((selection.firstOrd == sndFile.m_lockOrderStart && selection.lastOrd == sndFile.m_lockOrderEnd) ? (MF_STRING | MF_CHECKED) : MF_STRING), ID_ORDERLIST_LOCKPLAYBACK, "&Lock Playback to Selection\t" + ih->GetKeyTextFromCommand(kcOrderlistLockPlayback)); + AppendMenu(hMenu, (sndFile.m_lockOrderStart == ORDERINDEX_INVALID ? (MF_STRING | MF_GRAYED) : MF_STRING), ID_ORDERLIST_UNLOCKPLAYBACK, "&Unlock Playback\t" + ih->GetKeyTextFromCommand(kcOrderlistUnlockPlayback)); AppendMenu(hMenu, MF_SEPARATOR, NULL, ""); AppendMenu(hMenu, MF_STRING | greyed, ID_ORDERLIST_RENDER, "Render to &Wave"); @@ -1051,8 +1050,7 @@ { m_nScrollPos2nd = ORDERINDEX_INVALID; SetFocus(); - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); - m_pParent->SetCurrentPattern(pSndFile->Order[m_nScrollPos]); + m_pParent->SetCurrentPattern(m_pModDoc->GetrSoundFile().Order[m_nScrollPos]); } } @@ -1120,7 +1118,7 @@ // insert the same order(s) after the currently selected order(s) if (m_pModDoc) { - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); const OrdSelection selection = GetCurSel(false); const ORDERINDEX nInsertCount = selection.lastOrd - selection.firstOrd, nInsertEnd = selection.lastOrd; @@ -1128,25 +1126,25 @@ for(ORDERINDEX i = 0; i <= nInsertCount; i++) { // Checking whether there is some pattern at the end of orderlist. - if (pSndFile->Order.GetLength() < 1 || pSndFile->Order.Last() < pSndFile->Patterns.Size()) + if (sndFile.Order.GetLength() < 1 || sndFile.Order.Last() < sndFile.Patterns.Size()) { - if(pSndFile->Order.GetLength() < pSndFile->GetModSpecifications().ordersMax) - pSndFile->Order.Append(); + if(sndFile.Order.GetLength() < sndFile.GetModSpecifications().ordersMax) + sndFile.Order.Append(); } - for(int j = pSndFile->Order.GetLastIndex(); j > nInsertEnd; j--) - pSndFile->Order[j] = pSndFile->Order[j - 1]; + for(int j = sndFile.Order.GetLastIndex(); j > nInsertEnd; j--) + sndFile.Order[j] = sndFile.Order[j - 1]; } // now that there is enough space in the order list, overwrite the orders for(ORDERINDEX i = 0; i <= nInsertCount; i++) { - if(nInsertEnd + i + 1 < pSndFile->GetModSpecifications().ordersMax + if(nInsertEnd + i + 1 < sndFile.GetModSpecifications().ordersMax && - nInsertEnd + i + 1 < pSndFile->Order.GetLength()) - pSndFile->Order[nInsertEnd + i + 1] = pSndFile->Order[nInsertEnd - nInsertCount + i]; + nInsertEnd + i + 1 < sndFile.Order.GetLength()) + sndFile.Order[nInsertEnd + i + 1] = sndFile.Order[nInsertEnd - nInsertCount + i]; } - m_nScrollPos = min(nInsertEnd + 1, pSndFile->Order.GetLastIndex()); + m_nScrollPos = min(nInsertEnd + 1, sndFile.Order.GetLastIndex()); if(nInsertCount > 0) - m_nScrollPos2nd = min(m_nScrollPos + nInsertCount, pSndFile->Order.GetLastIndex()); + m_nScrollPos2nd = min(m_nScrollPos + nInsertCount, sndFile.Order.GetLastIndex()); else m_nScrollPos2nd = ORDERINDEX_INVALID; @@ -1168,27 +1166,27 @@ // Insert a separator pattern after the current pattern, don't move order list cursor if (m_pModDoc) { - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); const OrdSelection selection = GetCurSel(true); ORDERINDEX insertPos = selection.firstOrd; - if(pSndFile->Order[selection.firstOrd] != pSndFile->Order.GetInvalidPatIndex()) + if(sndFile.Order[selection.firstOrd] != sndFile.Order.GetInvalidPatIndex()) { // If we're not inserting on a stop (---) index, we move on by one position. insertPos++; // Checking whether there is some pattern at the end of orderlist. - if (pSndFile->Order.GetLength() < 1 || pSndFile->Order.Last() < pSndFile->Patterns.Size()) + if (sndFile.Order.GetLength() < 1 || sndFile.Order.Last() < sndFile.Patterns.Size()) { - if(pSndFile->Order.GetLength() < pSndFile->GetModSpecifications().ordersMax) - pSndFile->Order.Append(); + if(sndFile.Order.GetLength() < sndFile.GetModSpecifications().ordersMax) + sndFile.Order.Append(); } - for(int j = pSndFile->Order.GetLastIndex(); j > selection.firstOrd; j--) - pSndFile->Order[j] = pSndFile->Order[j - 1]; + for(int j = sndFile.Order.GetLastIndex(); j > selection.firstOrd; j--) + sndFile.Order[j] = sndFile.Order[j - 1]; } - pSndFile->Order[insertPos] = pSndFile->Order.GetIgnoreIndex(); + sndFile.Order[insertPos] = sndFile.Order.GetIgnoreIndex(); InvalidateRect(NULL, FALSE); m_pModDoc->SetModified(); @@ -1210,21 +1208,21 @@ { if (m_pModDoc) { - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); OrdSelection selection = GetCurSel(false); // remove selection m_nScrollPos2nd = ORDERINDEX_INVALID; - pSndFile->Order.Remove(selection.firstOrd, selection.lastOrd); + sndFile.Order.Remove(selection.firstOrd, selection.lastOrd); m_pModDoc->SetModified(); InvalidateRect(NULL, FALSE); m_pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, this); SetCurSel(selection.firstOrd); - PATTERNINDEX nNewPat = pSndFile->Order[selection.firstOrd]; - if ((nNewPat < pSndFile->Patterns.Size()) && (pSndFile->Patterns[nNewPat] != nullptr) && (m_pParent)) + PATTERNINDEX nNewPat = sndFile.Order[selection.firstOrd]; + if ((nNewPat < sndFile.Patterns.Size()) && (sndFile.Patterns[nNewPat] != nullptr) && (m_pParent)) { m_pParent->SetCurrentPattern(nNewPat); } @@ -1308,16 +1306,15 @@ LPDRAGONDROP pDropInfo = (LPDRAGONDROP)lParam; ORDERINDEX posdest; BOOL canDrop; - CSoundFile *pSndFile; CPoint pt; if ((!pDropInfo) || (!m_pModDoc) || (m_pModDoc != pDropInfo->pModDoc) || (!m_cxFont)) return FALSE; - pSndFile = m_pModDoc->GetSoundFile(); + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); canDrop = FALSE; switch(pDropInfo->dwDropType) { case DRAGONDROP_ORDER: - if (pDropInfo->dwDropItem >= pSndFile->Order.size()) break; + if (pDropInfo->dwDropItem >= sndFile.Order.size()) break; case DRAGONDROP_PATTERN: canDrop = TRUE; break; @@ -1327,15 +1324,15 @@ ScreenToClient(&pt); if (pt.x < 0) pt.x = 0; posdest = static_cast<ORDERINDEX>(m_nXScroll + (pt.x / m_cxFont)); - if (posdest >= pSndFile->Order.GetLength()) return FALSE; + if (posdest >= sndFile.Order.GetLength()) return FALSE; switch(pDropInfo->dwDropType) { case DRAGONDROP_PATTERN: - pSndFile->Order[posdest] = static_cast<PATTERNINDEX>(pDropInfo->dwDropItem); + sndFile.Order[posdest] = static_cast<PATTERNINDEX>(pDropInfo->dwDropItem); break; case DRAGONDROP_ORDER: - pSndFile->Order[posdest] = pSndFile->Order[pDropInfo->dwDropItem]; + sndFile.Order[posdest] = sndFile.Order[pDropInfo->dwDropItem]; break; } if (canDrop) @@ -1362,27 +1359,25 @@ CriticalSection cs; CMainFrame::GetMainFrame()->ResetNotificationBuffer(); - CSoundFile& rSf = *m_pModDoc->GetSoundFile(); + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); if(nSeq == MAX_SEQUENCES + 2) { - CString strParam; strParam.Format(TEXT("%u: %s"), rSf.Order.GetCurrentSequenceIndex(), (LPCTSTR)rSf.Order.m_sName); + CString strParam; strParam.Format(TEXT("%u: %s"), sndFile.Order.GetCurrentSequenceIndex(), (LPCTSTR)sndFile.Order.m_sName); CString str; AfxFormatString1(str, IDS_CONFIRM_SEQUENCE_DELETE, strParam); if (Reporting::Confirm(str) == cnfYes) - rSf.Order.RemoveSequence(); + sndFile.Order.RemoveSequence(); else - { return; - } } else if(nSeq == MAX_SEQUENCES || nSeq == MAX_SEQUENCES + 1) - rSf.Order.AddSequence((nSeq == MAX_SEQUENCES)); - else if(nSeq < rSf.Order.GetNumSequences()) - rSf.Order.SetSequence(nSeq); - ORDERINDEX nPosCandidate = rSf.Order.GetLengthTailTrimmed() - 1; + sndFile.Order.AddSequence((nSeq == MAX_SEQUENCES)); + else if(nSeq < sndFile.Order.GetNumSequences()) + sndFile.Order.SetSequence(nSeq); + ORDERINDEX nPosCandidate = sndFile.Order.GetLengthTailTrimmed() - 1; SetCurSel(min(m_nScrollPos, nPosCandidate), true, false, true); if (m_pParent) - m_pParent->SetCurrentPattern(rSf.Order[m_nScrollPos]); + m_pParent->SetCurrentPattern(sndFile.Order[m_nScrollPos]); UpdateScrollInfo(); // This won't make sense anymore in the new sequence. @@ -1404,35 +1399,34 @@ if(!rect.PtInRect(pt)) return; if(m_pModDoc == nullptr) return; - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); - if(pSndFile == nullptr) return; + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); - const PATTERNINDEX ignoreIndex = pSndFile->Order.GetIgnoreIndex(); - const PATTERNINDEX stopIndex = pSndFile->Order.GetInvalidPatIndex(); - const ORDERINDEX length = pSndFile->Order.GetLength(); + const PATTERNINDEX ignoreIndex = sndFile.Order.GetIgnoreIndex(); + const PATTERNINDEX stopIndex = sndFile.Order.GetInvalidPatIndex(); + const ORDERINDEX length = sndFile.Order.GetLength(); ORDERINDEX order = GetOrderFromPoint(rect, pt); // If this is not a playable order item, find the next valid item. - while(order < length && (pSndFile->Order[order] == ignoreIndex || pSndFile->Order[order] == stopIndex)) + while(order < length && (sndFile.Order[order] == ignoreIndex || sndFile.Order[order] == stopIndex)) { order++; } if(order < length) { - if(pSndFile->m_nSeqOverride == order) + if(sndFile.m_nSeqOverride == order) { // This item is already queued: Dequeue it. - pSndFile->m_nSeqOverride = ORDERINDEX_INVALID; + sndFile.m_nSeqOverride = ORDERINDEX_INVALID; } else { - if(pSndFile->Order.IsPositionLocked(order)) + if(sndFile.Order.IsPositionLocked(order)) { // Users wants to go somewhere else, so let him do that. OnUnlockPlayback(); } - pSndFile->m_nSeqOverride = order; + sndFile.m_nSeqOverride = order; } InvalidateRect(NULL, FALSE); } @@ -1442,16 +1436,16 @@ void COrderList::OnLockPlayback() //------------------------------- { - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); OrdSelection selection = GetCurSel(false); - if(selection.firstOrd == pSndFile->m_lockOrderStart && selection.lastOrd == pSndFile->m_lockOrderEnd) + if(selection.firstOrd == sndFile.m_lockOrderStart && selection.lastOrd == sndFile.m_lockOrderEnd) { OnUnlockPlayback(); } else { - pSndFile->m_lockOrderStart = selection.firstOrd; - pSndFile->m_lockOrderEnd = selection.lastOrd; + sndFile.m_lockOrderStart = selection.firstOrd; + sndFile.m_lockOrderEnd = selection.lastOrd; InvalidateRect(NULL, FALSE); } } @@ -1460,7 +1454,7 @@ void COrderList::OnUnlockPlayback() //---------------------------------- { - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); - pSndFile->m_lockOrderStart = pSndFile->m_lockOrderEnd = ORDERINDEX_INVALID; + CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); + sndFile.m_lockOrderStart = sndFile.m_lockOrderEnd = ORDERINDEX_INVALID; InvalidateRect(NULL, FALSE); } Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.h =================================================================== --- trunk/OpenMPT/mptrack/KeyConfigDlg.h 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/mptrack/KeyConfigDlg.h 2013-03-19 21:44:23 UTC (rev 1603) @@ -9,7 +9,6 @@ #pragma once -#include "stdafx.h" #include "mptrack.h" #include "MainFrm.h" #include "mpdlgs.h" Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2013-03-19 21:44:23 UTC (rev 1603) @@ -1341,9 +1341,6 @@ if (bPaused) { pSndFile->m_SongFlags.set(SONG_PAUSED); - } else - { - pModDoc->SetPause(FALSE); } } pSndFile->SetRepeatCount((TrackerSettings::Instance().gbLoopSong) ? -1 : 0); @@ -1388,7 +1385,6 @@ } if (m_pModPlaying) { - m_pModPlaying->SetPause(TRUE); m_wndTree.UpdatePlayPos(m_pModPlaying, NULL); } if (m_pSndFile) @@ -1422,10 +1418,8 @@ //---------------------------------------- { if ((pModDoc) && (pModDoc != m_pModPlaying)) return FALSE; - CModDoc *pPlay = m_pModPlaying; CSoundFile *pSndFile = m_pSndFile; PauseMod(); - if (pPlay) pPlay->SetPause(FALSE); if (pSndFile) pSndFile->SetCurrentPos(0); return TRUE; } @@ -1614,14 +1608,6 @@ } -void CMainFrame::StopPreview() -//---------------------------- -{ - StopSoundFile(&m_WaveFile); - m_WaveFile.Destroy(); -} - - BOOL CMainFrame::SetFollowSong(CModDoc *pDoc, HWND hwnd, BOOL bFollowSong, DWORD dwType) //-------------------------------------------------------------------------------------- { Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2013-03-19 21:44:23 UTC (rev 1603) @@ -464,7 +464,7 @@ BOOL StopSoundFile(CSoundFile *); void InitPreview(); void PreparePreview(ModCommand::NOTE note); - void StopPreview(); + void StopPreview() { StopSoundFile(&m_WaveFile); } inline BOOL IsPlaying() const { return (m_dwStatus & MODSTATUS_PLAYING); } inline BOOL IsRendering() const { return (m_dwStatus & MODSTATUS_RENDERING); } inline CModDoc *GetModPlaying() const { return (IsPlaying()||IsRendering()) ? m_pModPlaying : NULL; } Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2013-03-19 21:44:23 UTC (rev 1603) @@ -122,7 +122,6 @@ //---------------- { m_bHasValidPath = false; - m_bPaused = TRUE; m_lpszLog = NULL; m_hWndFollow = NULL; @@ -925,11 +924,8 @@ CriticalSection cs; - //find a channel if required - //if (nCurrentChn == CHANNELINDEX_INVALID) - { - nChn = FindAvailableChannel(); - } + // Find a channel to play on + nChn = FindAvailableChannel(); ModChannel *pChn = &m_SndFile.Chn[nChn]; @@ -2584,7 +2580,7 @@ if(nStoppedChannel != CHANNELINDEX_INVALID) return nStoppedChannel; - //Last resort: go for first virutal channel. + //Last resort: go for first virtual channel. return m_SndFile.m_nChannels; } Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/mptrack/Moddoc.h 2013-03-19 21:44:23 UTC (rev 1603) @@ -119,10 +119,11 @@ }; bool IsSplitActive() const { return (octaveLink && (octaveModifier != 0)) || (splitInstrument > 0) || (splitVolume != 0); } + + int octaveModifier; // determines by how many octaves the notes should be transposed up or down ModCommand::NOTE splitNote; ModCommand::INSTR splitInstrument; ModCommand::VOL splitVolume; - int octaveModifier; // determines by how many octaves the notes should be transposed up or down bool octaveLink; // apply octaveModifier SplitKeyboardSettings() @@ -151,27 +152,25 @@ std::basic_ostringstream<TCHAR> m_logEvents; // Log for general progress and error events. CSoundFile m_SndFile; - BOOL m_bPaused; HWND m_hWndFollow; DWORD m_dwNotifyType; + CSize m_szOldPatternScrollbarsPos; - bool bModifiedAutosave; // Modified since last autosave? - - bool m_ShowSavedialog; - -// -> CODE#0015 -// -> DESC="channels management dlg" - std::bitset<MAX_BASECHANNELS> m_bsMultiRecordMask; - std::bitset<MAX_BASECHANNELS> m_bsMultiSplitRecordMask; -// -! NEW_FEATURE#0015 - CPatternUndo m_PatternUndo; CSampleUndo m_SampleUndo; SplitKeyboardSettings m_SplitKeyboardSettings; // this is maybe not the best place to keep them, but it should do the job - vector<FileHistory> m_FileHistory; // File edit history + std::vector<FileHistory> m_FileHistory; // File edit history time_t m_creationTime; + bool bModifiedAutosave; // Modified since last autosave? + bool m_ShowSavedialog; public: + bool m_bHasValidPath; //becomes true if document is loaded or saved. + +protected: + std::bitset<MAX_BASECHANNELS> m_bsMultiRecordMask; + std::bitset<MAX_BASECHANNELS> m_bsMultiSplitRecordMask; +public: std::bitset<MAX_INSTRUMENTS> m_bsInstrumentModified; // which instruments have been modified? (for ITP functionality) protected: // create from serialization only @@ -186,7 +185,6 @@ const CSoundFile &GetrSoundFile() const { return m_SndFile; } void InitPlayer(); - void SetPause(BOOL bPause) { m_bPaused = bPause; } void SetModified(BOOL bModified=TRUE) { SetModifiedFlag(bModified); bModifiedAutosave = (bModified != FALSE); } bool ModifiedSinceLastAutosave() { bool bRetval = bModifiedAutosave; bModifiedAutosave = false; return bRetval; } // return "IsModified" value and reset it until the next SetModified() (as this is only used for polling) void SetShowSaveDialog(bool b) {m_ShowSavedialog = b;} @@ -199,7 +197,7 @@ LPCSTR GetLog() const { return m_lpszLog; } BOOL ClearLog(); UINT ShowLog(LPCSTR lpszTitle=NULL, CWnd *parent=NULL); - void ClearFilePath() {m_strPathName.Empty();} + void ClearFilePath() { m_strPathName.Empty(); } // Logging for general progress and error events. void AddLogEvent(LogEventType eventType, LPCTSTR pszFuncName, LPCTSTR pszFormat, ...); @@ -257,19 +255,17 @@ bool UpdateChannelMuteStatus(CHANNELINDEX nChn); bool MuteSample(SAMPLEINDEX nSample, bool bMute); bool MuteInstrument(INSTRUMENTINDEX nInstr, bool bMute); -// -> CODE#0012 -// -> DESC="midi keyboard split" + bool SoloChannel(CHANNELINDEX nChn, bool bSolo); bool IsChannelSolo(CHANNELINDEX nChn) const; -// -! NEW_FEATURE#0012 + bool SurroundChannel(CHANNELINDEX nChn, bool bSurround); bool SetChannelGlobalVolume(CHANNELINDEX nChn, uint16 nVolume); bool SetChannelDefaultPan(CHANNELINDEX nChn, uint16 nPan); bool IsChannelMuted(CHANNELINDEX nChn) const; bool IsSampleMuted(SAMPLEINDEX nSample) const; bool IsInstrumentMuted(INSTRUMENTINDEX nInstr) const; -// -> CODE#0015 -// -> DESC="channels management dlg" + bool NoFxChannel(CHANNELINDEX nChn, bool bNoFx, bool updateMix = true); bool IsChannelNoFx(CHANNELINDEX nChn) const; bool IsChannelRecord1(CHANNELINDEX channel) const; @@ -278,7 +274,7 @@ void Record1Channel(CHANNELINDEX channel, bool select = true); void Record2Channel(CHANNELINDEX channel, bool select = true); void ReinitRecordState(bool unselect = true); -// -! NEW_FEATURE#0015 + CHANNELINDEX GetNumChannels() const { return m_SndFile.m_nChannels; } UINT GetPatternSize(PATTERNINDEX nPat) const; BOOL AdjustEndOfSample(UINT nSample); @@ -294,9 +290,9 @@ LRESULT ActivateView(UINT nIdView, DWORD dwParam); void UpdateAllViews(CView *pSender, LPARAM lHint=0L, CObject *pHint=NULL); - HWND GetEditPosition(ROWINDEX &row, PATTERNINDEX &pat, ORDERINDEX &ord); //rewbs.customKeys - LRESULT OnCustomKeyMsg(WPARAM, LPARAM); //rewbs.customKeys - void TogglePluginEditor(UINT m_nCurrentPlugin); //rewbs.patPlugNames + HWND GetEditPosition(ROWINDEX &row, PATTERNINDEX &pat, ORDERINDEX &ord); + LRESULT OnCustomKeyMsg(WPARAM, LPARAM); + void TogglePluginEditor(UINT m_nCurrentPlugin); void RecordParamChange(int slot, long param); void LearnMacro(int macro, long param); void SetElapsedTime(ORDERINDEX nOrd, ROWINDEX nRow); @@ -309,7 +305,6 @@ void FixNullStrings(); - bool m_bHasValidPath; //becomes true if document is loaded or saved. // Fix: save pattern scrollbar position when switching to other tab CSize GetOldPatternScrollbarsPos() const { return m_szOldPatternScrollbarsPos; }; void SetOldPatternScrollbarsPos( CSize s ){ m_szOldPatternScrollbarsPos = s; }; @@ -327,7 +322,6 @@ // protected members protected: - CSize m_szOldPatternScrollbarsPos; BOOL InitializeMod(); void* GetChildFrame(); //rewbs.customKeys Modified: trunk/OpenMPT/soundlib/Fastmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Fastmix.cpp 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/soundlib/Fastmix.cpp 2013-03-19 21:44:23 UTC (rev 1603) @@ -15,13 +15,6 @@ #include "stdafx.h" #include "sndfile.h" -#if defined(_MSC_VER) -#elif defined(__GNUC__) -#define __forceinline __attribute__((always_inline)) -#else -#define __forceinline inline -#endif - #include "WindowedFIR.h" #pragma bss_seg(".modplug") @@ -344,8 +337,8 @@ #define ClipFilter(x) Clamp(x, 2.0f * (float)int16_min, 2.0f * (float)int16_max) // Resonant filter for Mono samples -static __forceinline void ProcessMonoFilter(int &vol, ModChannel *pChn) -//--------------------------------------------------------------------- +static forceinline void ProcessMonoFilter(int &vol, ModChannel *pChn) +//------------------------------------------------------------------- { float fy1 = pChn->nFilter_Y1; float fy2 = pChn->nFilter_Y2; @@ -361,8 +354,8 @@ // Resonant filter for Stereo samples -static __forceinline void ProcessStereoFilter(int &vol_l, int &vol_r, ModChannel *pChn) -//------------------------------------------------------------------------------------- +static forceinline void ProcessStereoFilter(int &vol_l, int &vol_r, ModChannel *pChn) +//----------------------------------------------------------------------------------- { // Left channel float fy1 = pChn->nFilter_Y1; Modified: trunk/OpenMPT/soundlib/LOAD_DBM.CPP =================================================================== --- trunk/OpenMPT/soundlib/LOAD_DBM.CPP 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/soundlib/LOAD_DBM.CPP 2013-03-19 21:44:23 UTC (rev 1603) @@ -467,12 +467,13 @@ if(sampleflags & 3) { + FileReader chunk(psh->sampledata, samplesize); SampleIO( (sampleflags & 2) ? SampleIO::_16bit : SampleIO::_8bit, SampleIO::mono, SampleIO::bigEndian, SampleIO::signedPCM) - .ReadSample(sample, (LPSTR)(psh->sampledata), samplesize); + .ReadSample(sample, chunk); } chunk_pos += samplesize; } Modified: trunk/OpenMPT/soundlib/LOAD_DSM.CPP =================================================================== --- trunk/OpenMPT/soundlib/LOAD_DSM.CPP 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/soundlib/LOAD_DSM.CPP 2013-03-19 21:44:23 UTC (rev 1603) @@ -230,12 +230,13 @@ sample.nVolume = (WORD)(pSmp->volume << 2); if (sample.nVolume > 256) sample.nVolume = 256; + FileReader chunk(lpStream + dwPos, dwMemLength - dwPos); SampleIO( SampleIO::_8bit, SampleIO::mono, SampleIO::littleEndian, (pSmp->flags & 2) ? SampleIO::signedPCM : SampleIO::unsignedPCM) - .ReadSample(sample, (LPCSTR)(lpStream + dwPos), dwMemLength - dwPos); + .ReadSample(sample, chunk); nSmp++; } else Modified: trunk/OpenMPT/soundlib/Load_mdl.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mdl.cpp 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/soundlib/Load_mdl.cpp 2013-03-19 21:44:23 UTC (rev 1603) @@ -593,7 +593,8 @@ if (!smpinfo[i]) { - dwPos += sampleIO.ReadSample(sample, (LPSTR)(lpStream+dwPos), dwMemLength - dwPos); + FileReader chunk(lpStream + dwPos, dwMemLength - dwPos); + dwPos += sampleIO.ReadSample(sample, chunk); } else { DWORD dwLen = *((DWORD *)(lpStream+dwPos)); @@ -601,7 +602,8 @@ if ( (dwLen <= dwMemLength) && (dwPos <= dwMemLength - dwLen) && (dwLen > 4) ) { sampleIO |= SampleIO::MDL; - sampleIO.ReadSample(sample, (LPSTR)(lpStream+dwPos), dwLen); + FileReader chunk(lpStream + dwPos , dwLen); + sampleIO.ReadSample(sample, chunk); } dwPos += dwLen; } Modified: trunk/OpenMPT/soundlib/Load_med.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_med.cpp 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/soundlib/Load_med.cpp 2013-03-19 21:44:23 UTC (rev 1603) @@ -802,7 +802,8 @@ } } Samples[iSmp + 1].nLength = len; - sampleIO.ReadSample(Samples[iSmp + 1], psdata, dwMemLength - dwPos - 6); + FileReader chunk(psdata, dwMemLength - dwPos - 6); + sampleIO.ReadSample(Samples[iSmp + 1], chunk); } // Reading patterns (blocks) if (wNumBlocks > MAX_PATTERNS) wNumBlocks = MAX_PATTERNS; Modified: trunk/OpenMPT/soundlib/Load_ptm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_ptm.cpp 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/soundlib/Load_ptm.cpp 2013-03-19 21:44:23 UTC (rev 1603) @@ -138,7 +138,8 @@ } if(sample.nLength && samplepos && samplepos < dwMemLength) { - sampleIO.ReadSample(sample, (LPSTR)(lpStream + samplepos), dwMemLength - samplepos); + FileReader chunk(lpStream + samplepos, dwMemLength - samplepos); + sampleIO.ReadSample(sample, chunk); } } } Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2013-03-19 21:44:23 UTC (rev 1603) @@ -192,7 +192,7 @@ // Convenient macro to help WRITE_HEADER declaration for single type members ONLY (non-array) // -------------------------------------------------------------------------------------------- #define WRITE_MPTHEADER_sized_member(name,type,code) \ -static_assert(sizeof(input->name) >= sizeof(type), "");\ +static_assert(sizeof(input->name) >= sizeof(type), "Instrument property does not fit into specified type!");\ fcode = #@code;\ fwrite(& fcode , 1 , sizeof( __int32 ) , file);\ fsize = sizeof( type );\ Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/soundlib/Sndfile.h 2013-03-19 21:44:23 UTC (rev 1603) @@ -232,7 +232,6 @@ static UINT m_nProLogicDepth, m_nProLogicDelay; static UINT m_nStereoSeparation; static UINT m_nMaxMixChannels; - static LONG m_nStreamVolume; static DWORD gdwSysInfo, gdwSoundSetup, gdwMixingFreq, gnBitsPerSample, gnChannels; static UINT gnAGC; static double gdWFIRCutoff; @@ -336,8 +335,6 @@ bool TypeIsIT_MPT() const { return (m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) != 0; } bool TypeIsIT_MPT_XM() const { return (m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_XM)) != 0; } bool TypeIsS3M_IT_MPT() const { return (m_nType & (MOD_TYPE_S3M | MOD_TYPE_IT | MOD_TYPE_MPT)) != 0; } - bool TypeIsXM_MOD() const { return (m_nType & (MOD_TYPE_XM | MOD_TYPE_MOD)) != 0; } - bool TypeIsMOD_S3M() const { return (m_nType & (MOD_TYPE_MOD | MOD_TYPE_S3M)) != 0; } void SetMasterVolume(UINT vol, bool adjustAGC = false); UINT GetMasterVolume() const { return m_nMasterVolume; } @@ -463,7 +460,6 @@ void RecalculateGainForAllPlugs(); void ResetChannels(); UINT Read(LPVOID lpBuffer, UINT cbBuffer); - UINT ReadMix(LPVOID lpBuffer, UINT cbBuffer, CSoundFile *, DWORD *, LPBYTE ps=NULL); UINT CreateStereoMix(int count); UINT GetResamplingFlag(const ModChannel *pChannel); BOOL FadeSong(UINT msec); Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2013-03-19 20:56:21 UTC (rev 1602) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2013-03-19 21:44:23 UTC (rev 1603) @@ -27,7 +27,6 @@ // SNDMIX: These are global flags for playback control UINT CSoundFile::m_nStereoSeparation = 128; -LONG CSoundFile::m_nStreamVolume = 0x8000; UINT CSoundFile::m_nMaxMixChannels = MAX_CHANNELS; // Mixing Configuration (SetWaveConfig) DWORD CSoundFile::gdwSysInfo = 0; @@ -391,202 +390,6 @@ } -#ifdef MODPLUG_PLAYER -UINT CSoundFile::ReadMix(LPVOID lpDestBuffer, UINT cbBuffer, CSoundFile *pSndFile, DWORD *pstatus, LPBYTE pstream) -//---------------------------------------------------------------------------------------------------------------- -{ - LPBYTE lpBuffer = (LPBYTE)lpDestBuffer; - LPCONVERTPROC pCvt = X86_Convert32To8; - UINT lRead, lMax, lSampleSize, lCount, lSampleCount, nStat1=0, nStat2=0; - BOOL active1, active2, bstream = FALSE, b16stream = FALSE; - DWORD dwenable = *pstatus; - UINT nMaxPlugins; - - { - nMaxPlugins = MAX_MIXPLUGINS; - while ((nMaxPlugins > 0) && (!m_MixPlugins[nMaxPlugins-1].pMixPlugin)) nMaxPlugins--; - } - lSampleSize = gnChannels; - if (gnBitsPerSample == 16) { lSampleSize *= 2; pCvt = X86_Convert32To16; } - else if (gnBitsPerSample == 24) { lSampleSize *= 3; pCvt = X86_Convert32To24; } - else if (gnBitsPerSample == 32) { lSampleSize *= 4; pCvt = X86_Convert32To32; } - lMax = cbBuffer / lSampleSize; - if ((!lMax) || (!lpBuffer) || (!pSndFile) || (!pstatus)) return 0; - if (*pstatus & 4) bstream = TRUE; - if (*pstatus & 8) b16stream = TRUE; - m_nMixStat = 0; - pSndFile->m_nMixStat = 0; - lRead = lMax; - *pstatus = 0; - while (lRead > 0) - { - active1 = active2 = FALSE; - lCount = 0; - if ((m_nChannels) && (dwenable & 1)) - { - if (!m_nBufferCount) - { - if(m_SongFlags[SONG_ENDREACHED]) - { - m_nBufferCount = 0; - *pstatus &= ~1; - } else - if(m_SongFlags[SONG_FADINGSONG]) - { - m_SongFlags.set(SONG_ENDREACHED); - m_nBufferCount = lRead; - *pstatus &= ~1; - } else - if (!ReadNote()) - { - if (!FadeSong(FADESONGDELAY)) - { - m_SongFlags.set(SONG_ENDREACHED); - m_nBufferCount = lRead; - *pstatus &= ~1; - } - } - } - lCount = m_nBufferCount; - if (lCount) - { - *pstatus |= 1; - active1 = TRUE; - } - } - if ((pSndFile->m_nChannels) && (dwenable & 2)) - { - if (!pSndFile->m_nBufferCount) - { - if(pSndFile->m_SongFlags[SONG_ENDREACHED]) - { - pSndFile->m_nBufferCount = 0; - *pstatus &= ~2; - } else - if(pSndFile->m_SongFlags[SONG_FADINGSONG]) - { - pSndFile->m_SongFlags.set(SONG_ENDREACHED); - pSndFile->m_nBufferCount = lRead; - *pstatus &= ~2; - } else - if (!pSndFile->ReadNote()) - { - if (!pSndFile->FadeSong(FADESONGDELAY)) - { - pSndFile->m_SongFlags.set(SONG_ENDREACHED); - pSndFile->m_nBufferCount = lRead; - *pstatus &= ~2; - } - } - } - if (pSndFile->m_nBufferCount) - { - *pstatus |= 2; - active2 = TRUE; - if ((!lCount) || (pSndFile->m_nBufferCount < lCount)) lCount = pSndFile->m_nBufferCount; - } - } - // No sound? - if (!lCount) - { - if ((lRead == lMax) && (!bstream)) break; - lCount = lRead; - } - if (lCount > MIXBUFFERSIZE) lCount = MIXBUFFERSIZE; - if (lCount > lRead) lCount = lRead; - lSampleCount = lCount; - if (!lCount) break; - // Resetting sound buffer - #ifndef NO_REVERB - gnReverbSend = 0; - #endif - X86_StereoFill(MixSoundBuffer, lSampleCount, &gnDryROfsVol, &gnDryLOfsVol); - if (pstream) - { - if (b16stream) - { - signed short *p = (signed short *)pstream; - for (UINT i=0; i<lSampleCount; i++, p++) - { - int k = (int)(*p) * (m_nStreamVolume >> MIXING_ATTENUATION); - MixSoundBuffer[i*2] += k; - MixSoundBuffer[i*2+1] += k; - } - pstream = (LPBYTE)p; - } else - { - BYTE *p = (BYTE *)pstream; - for (UINT i=0; i<lSampleCount; i++, p++) - { - int k = ((((int)(*p)) - 0x80) << 8) * (m_nStreamVolume >> MIXING_ATTENUATION); - MixSoundBuffer[i*2] += k; - MixSoundBuffer[i*2+1] += k; - } - pstream = (LPBYTE)p; - } - } - if (gnChannels >= 2) - { - lSampleCount *= 2; - if (active1) { m_nMixStat += CreateStereoMix(lCount); nStat1++; } - if (active2) { pSndFile->m_nMixStat += pSndFile->CreateStereoMix(lCount); nStat2++; } - #ifndef NO_REVERB - ProcessReverb(lCount); - #endif - ProcessStereoDSP(lCount); - } else - { - if (active1) { m_nMixStat += CreateStereoMix(lCount); nStat1++; } - if (active2) { pSndFile->m_nMixStat += pSndFile->CreateStereoMix(lCount); nStat2++; } - #ifndef NO_REVERB - ProcessReverb(lCount); - #endif - X86_MonoFromStereo(MixSoundBuffer, lCount); - ProcessMonoDSP(lCount); - } -#ifdef ENABLE_EQ - if (gdwSoundSetup & SNDMIX_EQ) - { - if (gnChannels >= 2) - EQStereo(MixSoundBuffer, lCount); - else - EQMono(MixSoundBuffer, lCount); - } -#endif -#ifndef NO_AGC - // Automatic Gain Control - if (gdwSoundSetup & SNDMIX_AGC) ProcessAGC(lSampleCount); -#endif - UINT lTotalSampleCount = lSampleCount; - // Multichannel - if (gnChannels > 2) - { - X86_InterleaveFrontRear(MixSoundBuffer, MixRearBuffer, lSampleCount); - lTotalSampleCount *= 2; - } - // Noise Shaping - if (gnBitsPerSample <= 24) - { - if ((gdwSoundSetup & SNDMIX_HQRESAMPLER) - && ((gnCPUUsage < 25) || (gdwSoundSetup & SNDMIX_DIRECTTODISK))) - X86_Dither(MixSoundBuffer, lTotalSampleCount, gnBitsPerSample); - } - - // Perform clipping + VU-Meter - lpBuffer += pCvt(lpBuffer, MixSoundBuffer, lTotalSampleCount); - // Buffer ready - lRead -= lCount; - if (active1) m_nBufferCount -= lCount; - if (active2) pSndFile->m_nBufferCount -= lCount; - } - if (lRead) memset(lpBuffer, (gnBitsPerSample == 8) ? 0x80 : 0, lRead * lSampleSize); - if (nStat1) { m_nMixStat += nStat1 - 1; m_nMixStat /= nStat1; } - if (nStat2) { pSndFile->m_nMixStat += nStat2 - 1; pSndFile->m_nMixStat /= nStat2; } - return lMax - lRead; -} -#endif // MODPLUG_PLAYER - - ///////////////////////////////////////////////////////////////////////////// // Handles navigation/effects @@ -2127,22 +1930,9 @@ IncrementEnvelopePositions(pChn); } -#ifdef MODPLUG_PLAYER - // Limit CPU -> > 80% -> don't ramp - if ((gnCPUUsage >= 80) && (!pChn->nRealVolume)) - { - pChn->nLeftVol = pChn->nRightVol = 0; - } -#endif // MODPLUG_PLAYER - // Volume ramping pChn->dwFlags.set(CHN_VOLUMERAMP, (pChn->nRealVolume | pChn->nLeftVol | pChn->nRightVol) != 0); -#ifdef MODPLUG_PLAYER - // Decrease VU-Meter - if (pChn->nVUMeter > VUMETER_DECAY) pChn->nVUMeter -= VUMETER_DECAY; else pChn->nVUMeter = 0; -#endif // MODPLUG_PLAYER - #ifdef ENABLE_STEREOVU if (pChn->nLeftVU > VUMETER_DECAY) pChn->nLeftVU -= VUMETER_DECAY; else pChn->nLeftVU = 0; if (pChn->nRightVU > VUMETER_DECAY) pChn->nRightVU -= VUMETER_DECAY; else pChn->nRightVU = 0; @@ -2155,14 +1945,6 @@ if (pChn->pCurrentSample) { // Update VU-Meter (nRealVolume is 14-bit) -#ifdef MODPLUG_PLAYER - UINT vutmp = pChn->nRealVolume >> (14 - 8); - if (vutmp > 0xFF) vutmp = 0xFF; - if (pChn->nVUMeter >= 0x100) pChn->nVUMeter = vutmp; - vutmp >>= 1; - if (pChn->nVUMeter < vutmp) pChn->nVUMeter = vutmp; -#endif // MODPLUG_PLAYER - #ifdef ENABLE_STEREOVU UINT vul = (pChn->nRealVolume * pChn->nRealPan) >> 14; if (vul > 127) vul = 127; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |