From: <sag...@us...> - 2012-03-17 19:42:23
|
Revision: 1222 http://modplug.svn.sourceforge.net/modplug/?rev=1222&view=rev Author: saga-games Date: 2012-03-17 19:42:16 +0000 (Sat, 17 Mar 2012) Log Message: ----------- [Fix] Pattern Editor: Tried to fix pattern navigation in low/med detail view. Some of this (home/end keys) was already broken before the "great refactoring commit", some bugs were new. [Fix] VST: Fixed potential problems with multi-threading VSTs when loading a plugin for the first time (tx manx) [Mod] Updated my keymap a bit. [Mod] OpenMPT: Version is now 1.20.00.79 Modified Paths: -------------- trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/version.h trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2012-03-17 19:06:05 UTC (rev 1221) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2012-03-17 19:42:16 UTC (rev 1222) @@ -260,12 +260,18 @@ POINT pt; int xofs = GetXScrollPos(); int yofs = GetYScrollPos(); - pt.x = (cursor.GetChannel() - xofs) * GetColumnWidth(); PatternCursor::Columns imax = cursor.GetColumnType(); LimitMax(imax, PatternCursor::lastColumn); - LimitMax(imax, static_cast<PatternCursor::Columns>(m_nDetailLevel)); +// if(imax > m_nDetailLevel) +// { +// // Extend to next channel +// imax = PatternCursor::firstColumn; +// cursor.Move(0, 1, 0); +// } + pt.x = (cursor.GetChannel() - xofs) * GetColumnWidth(); + for(int i = 0; i < imax; i++) { pt.x += pfnt->nEltWidths[i]; Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2012-03-17 19:06:05 UTC (rev 1221) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2012-03-17 19:42:16 UTC (rev 1222) @@ -4013,23 +4013,14 @@ case kcNavigateUpBySpacing: SetCurrentRow(GetCurrentRow() - m_nSpacing, TRUE); return wParam; case kcNavigateLeftSelect: - case kcNavigateLeft: if ((CMainFrame::GetSettings().m_dwPatternSetup & PATTERN_WRAP) && m_Cursor.IsInFirstColumn()) - SetCurrentColumn(pSndFile->GetNumChannels() - 1, PatternCursor::lastColumn); - else - { - m_Cursor.Move(0, 0, -1); - SetCurrentColumn(m_Cursor); - } - return wParam; + case kcNavigateLeft: + MoveCursor(false); + break; case kcNavigateRightSelect: - case kcNavigateRight: if ((CMainFrame::GetSettings().m_dwPatternSetup & PATTERN_WRAP) && (m_Cursor.CompareColumn(PatternCursor(0, pSndFile->GetNumChannels() - 1, PatternCursor::lastColumn)) >= 0)) - SetCurrentColumn(0); - else - { - m_Cursor.Move(0, 0, 1); - SetCurrentColumn(m_Cursor); - } - return wParam; + case kcNavigateRight: + MoveCursor(true); + break; + case kcNavigateNextChanSelect: case kcNavigateNextChan: SetCurrentColumn((GetCurrentChannel() + 1) % pSndFile->GetNumChannels(), m_Cursor.GetColumnType()); return wParam; case kcNavigatePrevChanSelect: @@ -4054,20 +4045,20 @@ return wParam; case kcEndHorizontalSelect: - case kcEndHorizontal: if (m_Cursor.CompareColumn(PatternCursor(0, pSndFile->GetNumChannels() - 1, PatternCursor::lastColumn)) < 0) SetCurrentColumn(pSndFile->GetNumChannels() - 1, PatternCursor::lastColumn); + case kcEndHorizontal: if (m_Cursor.CompareColumn(PatternCursor(0, pSndFile->GetNumChannels() - 1, m_nDetailLevel)) < 0) SetCurrentColumn(pSndFile->GetNumChannels() - 1, m_nDetailLevel); else if (GetCurrentRow() < pModDoc->GetPatternSize(m_nPattern) - 1) SetCurrentRow(pModDoc->GetPatternSize(m_nPattern) - 1); return wParam; case kcEndVerticalSelect: case kcEndVertical: if (GetCurrentRow() < pModDoc->GetPatternSize(m_nPattern) - 1) SetCurrentRow(pModDoc->GetPatternSize(m_nPattern) - 1); - else if (m_Cursor.CompareColumn(PatternCursor(0, pSndFile->GetNumChannels() - 1, PatternCursor::lastColumn)) < 0) SetCurrentColumn(pSndFile->GetNumChannels() - 1, PatternCursor::lastColumn); + else if (m_Cursor.CompareColumn(PatternCursor(0, pSndFile->GetNumChannels() - 1, m_nDetailLevel)) < 0) SetCurrentColumn(pSndFile->GetNumChannels() - 1, m_nDetailLevel); return wParam; case kcEndAbsoluteSelect: - case kcEndAbsolute: SetCurrentColumn(pSndFile->GetNumChannels() - 1, PatternCursor::lastColumn); + case kcEndAbsolute: SetCurrentColumn(pSndFile->GetNumChannels() - 1, m_nDetailLevel); if (GetCurrentRow() < pModDoc->GetPatternSize(m_nPattern) - 1) SetCurrentRow(pModDoc->GetPatternSize(m_nPattern) - 1); return wParam; case kcNextPattern: { PATTERNINDEX n = m_nPattern + 1; - while ((n < pSndFile->Patterns.Size()) && !pSndFile->Patterns.IsValidPat(n)) n++; + while ((n < pSndFile->Patterns.Size()) && !pSndFile->Patterns.IsValidPat(n)) n++; SetCurrentPattern((n < pSndFile->Patterns.Size()) ? n : 0); ORDERINDEX currentOrder = SendCtrlMessage(CTRLMSG_GETCURRENTORDER); ORDERINDEX newOrder = pSndFile->Order.FindOrder(m_nPattern, currentOrder, true); @@ -4230,6 +4221,41 @@ return NULL; } + +// Move pattern cursor to left or right, respecting invisible columns. +void CViewPattern::MoveCursor(bool moveRight) +//------------------------------------------- +{ + if(!moveRight) + { + // Move cursor one column to the left + if((CMainFrame::GetSettings().m_dwPatternSetup & PATTERN_WRAP) && m_Cursor.IsInFirstColumn()) + { + // Wrap around to last channel + SetCurrentColumn(GetDocument()->GetNumChannels() - 1, m_nDetailLevel); + } else if(!m_Cursor.IsInFirstColumn()) + { + m_Cursor.Move(0, 0, -1); + SetCurrentColumn(m_Cursor); + } + } else + { + // Move cursor one column to the right + if((CMainFrame::GetSettings().m_dwPatternSetup & PATTERN_WRAP) && (m_Cursor.CompareColumn(PatternCursor(0, GetDocument()->GetNumChannels() - 1, m_nDetailLevel)) >= 0)) + { + // Wrap around to first channel. + SetCurrentColumn(0); + } else + { + do + { + m_Cursor.Move(0, 0, 1); + } while(m_Cursor.GetColumnType() > m_nDetailLevel); + SetCurrentColumn(m_Cursor); + } + } +} + #define ENTER_PCNOTE_VALUE(v, method) \ { \ if((v >= 0) && (v <= 9)) \ Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2012-03-17 19:06:05 UTC (rev 1221) +++ trunk/OpenMPT/mptrack/View_pat.h 2012-03-17 19:42:16 UTC (rev 1222) @@ -235,6 +235,8 @@ bool ShowEditWindow(); UINT GetCurrentInstrument() const; void SelectBeatOrMeasure(bool selectBeat); + // Move pattern cursor to left or right, respecting invisible columns. + void MoveCursor(bool moveRight); bool TransposeSelection(int transp); Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2012-03-17 19:06:05 UTC (rev 1221) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2012-03-17 19:42:16 UTC (rev 1222) @@ -318,11 +318,11 @@ } if ((hLib) && (hLib != INVALID_HANDLE_VALUE)) { - BOOL bOk = FALSE; - PVSTPLUGENTRY pMainProc = (PVSTPLUGENTRY)GetProcAddress(hLib, "main"); - if(pMainProc == NULL) + bool validPlug = false; + PVSTPLUGENTRY pMainProc = (PVSTPLUGENTRY)GetProcAddress(hLib, "VSTPluginMain"); + if(pMainProc == nullptr) { - pMainProc = (PVSTPLUGENTRY)GetProcAddress(hLib, "VSTPluginMain"); + pMainProc = (PVSTPLUGENTRY)GetProcAddress(hLib, "main"); } #ifdef ENABLE_BUZZ GET_INFO pBuzzGetInfo = (GET_INFO)GetProcAddress(hLib, "GetInfo"); @@ -340,22 +340,22 @@ p->dwPluginId1 = 0; p->dwPluginId2 = 0; p->bIsInstrument = FALSE; - p->pPluginsList = NULL; + p->pPluginsList = nullptr; lstrcpyn(p->szDllPath, pszDllPath, CountOf(p->szDllPath)); - _splitpath(pszDllPath, NULL, NULL, p->szLibraryName, NULL); + _splitpath(pszDllPath, nullptr, nullptr, p->szLibraryName, nullptr); p->szLibraryName[63] = 0; p->pNext = m_pVstHead; - p->pPrev = NULL; + p->pPrev = nullptr; if (m_pVstHead) m_pVstHead->pPrev = p; m_pVstHead = p; try { AEffect *pEffect = pMainProc(MasterCallBack); - if ((pEffect) && (pEffect->magic == kEffectMagic) - && (pEffect->dispatcher)) + if(pEffect != nullptr && pEffect->magic == kEffectMagic && pEffect->dispatcher != nullptr) { pEffect->dispatcher(pEffect, effOpen, 0, 0, 0, 0); + #ifdef VST_USE_ALTERNATIVE_MAGIC p->dwPluginId1 = CalculateCRC32fromFilename(p->szLibraryName); // Make Plugin ID unique for sure #else @@ -363,6 +363,7 @@ #endif // VST_USE_ALTERNATIVE_MAGIC p->dwPluginId2 = pEffect->uniqueID; if ((pEffect->flags & effFlagsIsSynth) || (!pEffect->numInputs)) p->bIsInstrument = TRUE; + #ifdef VST_LOG int nver = pEffect->dispatcher(pEffect, effGetVstVersion, 0,0, NULL, 0); if (!nver) nver = pEffect->version; @@ -373,7 +374,9 @@ pEffect->flags, pEffect->realQualities, pEffect->offQualities); #endif // VST_LOG - bOk = TRUE; + pEffect->dispatcher(pEffect, effClose, 0, 0, 0, 0); + + validPlug = true; } } catch(...) { @@ -381,7 +384,7 @@ } // If OK, write the information in PluginCache - if (bOk) + if(validPlug) { const CString cacheSection = "PluginCache"; const CString cacheFile = theApp.GetPluginCacheFileName(); @@ -434,7 +437,7 @@ { lstrcpyn(p->szLibraryName, pInfo->Name, CountOf(p->szLibraryName)); } - bOk = TRUE; + validPlug = true; } } catch (...) { @@ -453,7 +456,7 @@ // Now it should be safe to assume that this plugin loaded properly. :) WritePrivateProfileString("VST Plugins", "FailedPlugin", NULL, theApp.GetConfigFileName()); - return (bOk) ? m_pVstHead : nullptr; + return (validPlug ? m_pVstHead : nullptr); } else { #ifdef VST_LOG @@ -1306,6 +1309,7 @@ } } delete[] pFileSel->returnMultiplePaths; + pFileSel->returnMultiplePaths = nullptr; } else { if(pFileSel->reserved == 1 && pFileSel->returnPath != nullptr) Modified: trunk/OpenMPT/mptrack/version.h =================================================================== --- trunk/OpenMPT/mptrack/version.h 2012-03-17 19:06:05 UTC (rev 1221) +++ trunk/OpenMPT/mptrack/version.h 2012-03-17 19:42:16 UTC (rev 1222) @@ -19,7 +19,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 20 #define VER_MINOR 00 -#define VER_MINORMINOR 78 +#define VER_MINORMINOR 79 //Creates version number from version parts that appears in version string. //For example MAKE_VERSION_NUMERIC(1,17,02,28) gives version number of Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb =================================================================== --- trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2012-03-17 19:06:05 UTC (rev 1221) +++ trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2012-03-17 19:42:16 UTC (rev 1222) @@ -24,7 +24,6 @@ 0:1359:2:90:5 //Undo: Ctrl+Z (KeyDown|KeyHold) 0:1360:2:88:1 //Cut: Ctrl+X (KeyDown) 0:1361:2:67:1 //Copy: Ctrl+C (KeyDown) -0:1361:2:45:1 //Copy: Ctrl+EINFG (KeyDown) 0:1362:2:86:1 //Paste: Ctrl+V (KeyDown) 0:1363:3:86:1 //Mix Paste: Shift+Ctrl+V (KeyDown) 0:1793:1:86:1 //Paste Flood: Shift+V (KeyDown) @@ -116,8 +115,8 @@ 2:1665:0:46:1 //Clear field and step (IT Style): ENTF (KeyDown) 2:1061:0:8:5 //Delete rows: R\xDCCK (KeyDown|KeyHold) 2:1377:2:8:5 //Delete all rows: Ctrl+R\xDCCK (KeyDown|KeyHold) -2:1378:0:45:1 //Insert Row: EINFG (KeyDown) -2:1379:2:45:1 //Insert All Rows: Ctrl+EINFG (KeyDown) +2:1378:0:45:5 //Insert Row: EINFG (KeyDown|KeyHold) +2:1379:2:45:5 //Insert All Rows: Ctrl+EINFG (KeyDown|KeyHold) 2:1055:0:109:5 //Previous pattern: - (ZEHNERTASTATUR) (KeyDown|KeyHold) 2:1054:0:107:5 //Next pattern: + (ZEHNERTASTATUR) (KeyDown|KeyHold) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |