Mercurial > hg > tony
changeset 358:0f72797ecdef warnfix_no_size_t
Merge from tonioni branch, merge subrepos to tonioni branch
author | Chris Cannam |
---|---|
date | Wed, 18 Jun 2014 13:43:04 +0100 |
parents | 56109ef020b4 (current diff) d511868c1ffe (diff) |
children | f0b210403369 a2f5c095459a |
files | .hgsubstate src/MainWindow.cpp src/MainWindow.h |
diffstat | 3 files changed, 77 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgsubstate Wed Jun 18 09:13:25 2014 +0100 +++ b/.hgsubstate Wed Jun 18 13:43:04 2014 +0100 @@ -1,7 +1,7 @@ e32a354434aa5fa7440efa17b716aacd761049fa chp d16f0fd6db6104d87882bc43788a3bb1b0f8c528 dataquay -062f0e49187789937b6162d2904b1af20872ed5e pyin +e637cf9160029c6d429bf89fedca157619ca8da8 pyin 553a5f65ef64811747a6613f759622d655db63c1 sv-dependency-builds -b3b673d133a066c4414c5289b3424b43be477eef svapp -a8f3195b0761c446ed4726e942be8228870f965e svcore -51da09385b3896e1b1c1d28f5e440cef9d41f2ce svgui +a1b8b6a2cdfc6724b670118ef98ae082a8b7b750 svapp +f960d67ce84237be28902f24d5c757a72dc8004b svcore +b68af2be4545adf04eec58c50d8419dc574b8642 svgui
--- a/src/MainWindow.cpp Wed Jun 18 09:13:25 2014 +0100 +++ b/src/MainWindow.cpp Wed Jun 18 13:43:04 2014 +0100 @@ -3278,5 +3278,73 @@ settings.endGroup(); } - - +void +MainWindow::ffwd() +{ + if (!getMainModel()) return; + + int frame = m_viewManager->getPlaybackFrame(); + ++frame; + + size_t sr = getMainModel()->getSampleRate(); + + // The step is supposed to scale and be as wide as a step of + // m_defaultFfwdRwdStep seconds at zoom level 720 and sr = 44100 + size_t framesPerPixel = m_viewManager->getGlobalZoom(); + size_t defaultZoom = (720 * 44100) / sr; + + float scaler = (framesPerPixel * 1.0f) / defaultZoom; + + + frame = RealTime::realTime2Frame + (RealTime::frame2RealTime(frame, sr) + m_defaultFfwdRwdStep * scaler, sr); + if (frame > int(getMainModel()->getEndFrame())) { + frame = getMainModel()->getEndFrame(); + } + + if (frame < 0) frame = 0; + + if (m_viewManager->getPlaySelectionMode()) { + frame = m_viewManager->constrainFrameToSelection(size_t(frame)); + } + + m_viewManager->setPlaybackFrame(frame); + + if (frame == (int)getMainModel()->getEndFrame() && + m_playSource && + m_playSource->isPlaying() && + !m_viewManager->getPlayLoopMode()) { + stop(); + } +} + +void +MainWindow::rewind() +{ + if (!getMainModel()) return; + + int frame = m_viewManager->getPlaybackFrame(); + if (frame > 0) --frame; + + size_t sr = getMainModel()->getSampleRate(); + + // The step is supposed to scale and be as wide as a step of + // m_defaultFfwdRwdStep seconds at zoom level 720 and sr = 44100 + size_t framesPerPixel = m_viewManager->getGlobalZoom(); + size_t defaultZoom = (720 * 44100) / sr; + + float scaler = (framesPerPixel * 1.0f) / defaultZoom; + frame = RealTime::realTime2Frame + (RealTime::frame2RealTime(frame, sr) - m_defaultFfwdRwdStep * scaler, sr); + if (frame < int(getMainModel()->getStartFrame())) { + frame = getMainModel()->getStartFrame(); + } + + if (frame < 0) frame = 0; + + if (m_viewManager->getPlaySelectionMode()) { + frame = m_viewManager->constrainFrameToSelection(size_t(frame)); + } + + m_viewManager->setPlaybackFrame(frame); +}