]> git.sesse.net Git - kdenlive/commitdiff
Fix mouse wheel seeking in timeline ruler
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 1 Sep 2012 17:07:08 +0000 (19:07 +0200)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 1 Sep 2012 17:07:08 +0000 (19:07 +0200)
src/customtrackview.cpp
src/monitor.cpp
src/renderer.cpp

index 57e84b73eb6c5e5d90da23771c3b766ae07f9e67..b23108f664542c5c4dbed6e1cad2dc11de8aa339 100644 (file)
@@ -87,6 +87,7 @@
 #include <QGraphicsDropShadowEffect>
 #endif
 
+#define SEEK_INACTIVE (-1)
 
 //#define DEBUG
 
@@ -3371,11 +3372,12 @@ int CustomTrackView::cursorPos()
 
 void CustomTrackView::moveCursorPos(int delta)
 {
-    if (m_cursorPos + delta < 0) delta = 0 - m_cursorPos;
-    emit cursorMoved((int)(m_cursorPos), (int)((m_cursorPos + delta)));
-    m_cursorPos += delta;
-    m_cursorLine->setPos(m_cursorPos, 0);
-    m_document->renderer()->seek(m_cursorPos);
+    int currentPos = m_document->renderer()->requestedSeekPosition;
+    if (currentPos == SEEK_INACTIVE) currentPos = m_document->renderer()->seekFramePosition();
+    if (currentPos + delta < 0) delta = 0 - currentPos;
+    currentPos += delta;
+    m_document->renderer()->seek(currentPos);
+    emit updateRuler();
 }
 
 void CustomTrackView::initCursorPos(int pos)
index ccba5b593d2ff3123aad0e830505bc17d28b76f5..529e6304ee53e0ef8d253c22f2fdf365b7c77419 100644 (file)
@@ -551,7 +551,9 @@ void Monitor::slotMouseSeek(int eventDelta, bool fast)
     if (fast) {
         int delta = m_monitorManager->timecode().fps();
         if (eventDelta > 0) delta = 0 - delta;
-        slotSeek(render->requestedSeekPosition - delta);
+       if (render->requestedSeekPosition != SEEK_INACTIVE)
+           slotSeek(render->requestedSeekPosition - delta);
+       else slotSeek(render->seekFramePosition() - delta);
     } else {
         if (eventDelta >= 0) slotForwardOneFrame();
         else slotRewindOneFrame();
index d675671fee0f66f0881973595109b2585a02e638..572b035d9af0391c314d61b924a6fa9140dbd576 100644 (file)
@@ -1413,6 +1413,7 @@ void Render::start()
 
 void Render::stop()
 {
+    requestedSeekPosition = SEEK_INACTIVE;
     m_refreshTimer.stop();
     QMutexLocker locker(&m_mutex);
     if (m_mltProducer == NULL) return;
@@ -1429,6 +1430,7 @@ void Render::stop()
 
 void Render::stop(const GenTime & startTime)
 {
+    requestedSeekPosition = SEEK_INACTIVE;
     m_refreshTimer.stop();
     QMutexLocker locker(&m_mutex);
     if (m_mltProducer) {
@@ -1441,6 +1443,7 @@ void Render::stop(const GenTime & startTime)
 
 void Render::pause()
 {
+    requestedSeekPosition = SEEK_INACTIVE;
     if (!m_mltProducer || !m_mltConsumer)
         return;
     if (m_mltProducer->get_speed() == 0.0) return;
@@ -1484,6 +1487,7 @@ void Render::switchPlay(bool play)
 
 void Render::play(double speed)
 {
+    requestedSeekPosition = SEEK_INACTIVE;
     if (!m_mltProducer)
         return;
     // if (speed == 0.0) m_mltProducer->set("out", m_mltProducer->get_length() - 1);
@@ -1497,6 +1501,7 @@ void Render::play(double speed)
 
 void Render::play(const GenTime & startTime)
 {
+    requestedSeekPosition = SEEK_INACTIVE;
     if (!m_mltProducer || !m_mltConsumer)
         return;
     m_mltProducer->seek((int)(startTime.frames(m_fps)));
@@ -1506,6 +1511,7 @@ void Render::play(const GenTime & startTime)
 
 void Render::loopZone(const GenTime & startTime, const GenTime & stopTime)
 {
+    requestedSeekPosition = SEEK_INACTIVE;
     if (!m_mltProducer || !m_mltConsumer)
         return;
     //m_mltProducer->set("eof", "loop");
@@ -1516,6 +1522,7 @@ void Render::loopZone(const GenTime & startTime, const GenTime & stopTime)
 
 void Render::playZone(const GenTime & startTime, const GenTime & stopTime)
 {
+    requestedSeekPosition = SEEK_INACTIVE;
     if (!m_mltProducer || !m_mltConsumer)
         return;
     if (!m_isZoneMode) m_originalOut = m_mltProducer->get_playtime() - 1;
@@ -1545,7 +1552,9 @@ void Render::seekToFrame(int pos)
 void Render::seekToFrameDiff(int diff)
 {
     resetZoneMode();
-    seek(m_mltProducer->position() + diff);
+    if (requestedSeekPosition == SEEK_INACTIVE)
+       seek(m_mltProducer->position() + diff);
+    else seek(requestedSeekPosition + diff);
 }
 
 void Render::doRefresh()