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);
+}
--- a/src/MainWindow.h	Wed Jun 18 09:13:25 2014 +0100
+++ b/src/MainWindow.h	Wed Jun 18 13:43:04 2014 +0100
@@ -186,6 +186,9 @@
     void selectOneNoteRight();
     void selectOneNoteLeft();
 
+    void ffwd();
+    void rewind();
+
 protected:
     Analyser      *m_analyser;