From: <sag...@us...> - 2009-09-07 20:24:27
|
Revision: 356 http://modplug.svn.sourceforge.net/modplug/?rev=356&view=rev Author: saga-games Date: 2009-09-07 20:24:18 +0000 (Mon, 07 Sep 2009) Log Message: ----------- [New] Pattern editor: When shift-clicking somewhere, a selection will be drawn from the previous cursor position to the new position. [Fix] Mod Saving: The compatibility export was only working properly for 8-bit mono samples. Everything else is going to be downsampled later, so the sample "fixing" has to be done before. Modified Paths: -------------- trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/soundlib/Load_mod.cpp Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-09-06 19:53:01 UTC (rev 355) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-09-07 20:24:18 UTC (rev 356) @@ -1032,32 +1032,40 @@ DragToSel(m_dwEndSel, TRUE); } else */ { - m_dwStartSel = GetPositionFromPoint(point); - if (((m_dwStartSel & 0xFFFF) >> 3) < pModDoc->GetNumChannels()) + if(CMainFrame::GetInputHandler()->ShiftPressed()) { - m_dwStatus |= PATSTATUS_MOUSEDRAGSEL; + // Shift pressed -> set 2nd selection point + DragToSel(GetPositionFromPoint(point), TRUE); + } else + { + // Set first selection point + m_dwStartSel = GetPositionFromPoint(point); + if (((m_dwStartSel & 0xFFFF) >> 3) < pModDoc->GetNumChannels()) + { + m_dwStatus |= PATSTATUS_MOUSEDRAGSEL; - if (m_dwStatus & PATSTATUS_CTRLDRAGSEL) - { - SetCurSel(m_dwStartSel, m_dwStartSel); + if (m_dwStatus & PATSTATUS_CTRLDRAGSEL) + { + SetCurSel(m_dwStartSel, m_dwStartSel); + } + if ((CMainFrame::m_dwPatternSetup & PATTERN_DRAGNDROPEDIT) + && ((m_dwBeginSel != m_dwEndSel) || (m_dwStatus & PATSTATUS_CTRLDRAGSEL)) + && ((m_dwStartSel >> 16) >= (m_dwBeginSel >> 16)) + && ((m_dwStartSel >> 16) <= (m_dwEndSel >> 16)) + && ((m_dwStartSel & 0xFFFF) >= (m_dwBeginSel & 0xFFFF)) + && ((m_dwStartSel & 0xFFFF) <= (m_dwEndSel & 0xFFFF))) + { + m_dwStatus |= PATSTATUS_DRAGNDROPEDIT; + } else + if (CMainFrame::m_dwPatternSetup & PATTERN_CENTERROW) + { + SetCurSel(m_dwStartSel, m_dwStartSel); + } else + { + // Fix: Horizontal scrollbar pos screwed when selecting with mouse + SetCursorPosition( m_dwStartSel >> 16, m_dwStartSel & 0xFFFF ); + } } - if ((CMainFrame::m_dwPatternSetup & PATTERN_DRAGNDROPEDIT) - && ((m_dwBeginSel != m_dwEndSel) || (m_dwStatus & PATSTATUS_CTRLDRAGSEL)) - && ((m_dwStartSel >> 16) >= (m_dwBeginSel >> 16)) - && ((m_dwStartSel >> 16) <= (m_dwEndSel >> 16)) - && ((m_dwStartSel & 0xFFFF) >= (m_dwBeginSel & 0xFFFF)) - && ((m_dwStartSel & 0xFFFF) <= (m_dwEndSel & 0xFFFF))) - { - m_dwStatus |= PATSTATUS_DRAGNDROPEDIT; - } else - if (CMainFrame::m_dwPatternSetup & PATTERN_CENTERROW) - { - SetCurSel(m_dwStartSel, m_dwStartSel); - } else - { - // Fix: Horizontal scrollbar pos screwed when selecting with mouse - SetCursorPosition( m_dwStartSel >> 16, m_dwStartSel & 0xFFFF ); - } } } } Modified: trunk/OpenMPT/soundlib/Load_mod.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mod.cpp 2009-09-06 19:53:01 UTC (rev 355) +++ trunk/OpenMPT/soundlib/Load_mod.cpp 2009-09-07 20:24:18 UTC (rev 356) @@ -546,8 +546,8 @@ MODSAMPLE *pSmp = &Samples[insmap[ismpd]]; if(bCompatibilityExport == true) // first two bytes have to be 0 due to PT's one-shot loop ("no loop") { - if(pSmp->nLength > 0) pSmp->pSample[0] = 0; - if(pSmp->nLength > 1) pSmp->pSample[1] = 0; + int iOverwriteLen = 2 * pSmp->GetElementarySampleSize() * ((pSmp->uFlags & CHN_STEREO) ? 2 : 1); + memset(pSmp->pSample, 0, min(iOverwriteLen, pSmp->GetSampleSizeInBytes())); } UINT flags = RS_PCM8S; #ifndef NO_PACKING This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |