]> git.sesse.net Git - kdenlive/commitdiff
Wheel on project timeline ruler to seek, ctrl+wheel seeks 1 second instead of 1 frame
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 11 Apr 2008 15:07:52 +0000 (15:07 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 11 Apr 2008 15:07:52 +0000 (15:07 +0000)
svn path=/branches/KDE4/; revision=2163

src/customruler.cpp
src/customruler.h
src/customtrackview.cpp
src/customtrackview.h
src/monitor.cpp

index 26bee6941be5c61b92af0dac90f2a491739ba5c2..674efaba9f24b1ef7c2683b8110b028968921bd9 100644 (file)
@@ -117,6 +117,15 @@ void CustomRuler::mouseMoveEvent(QMouseEvent * event) {
     update();
 }
 
+
+// virtual
+void CustomRuler::wheelEvent(QWheelEvent * e) {
+    int delta = 1;
+    if (e->modifiers() == Qt::ControlModifier) delta = m_timecode.fps();
+    if (e->delta() < 0) delta = 0 - delta;
+    m_view->moveCursorPos(delta);
+}
+
 int CustomRuler::inPoint() const {
     return m_zoneStart;
 }
index 2774c478ce55d45f64ab96760b78419a67059969..ae3a9a3017f0eb8d1f8227064ce303d12608a543 100644 (file)
@@ -13,8 +13,6 @@ class CustomRuler : public KRuler {
 
 public:
     CustomRuler(Timecode tc, CustomTrackView *parent);
-    virtual void mousePressEvent(QMouseEvent * event);
-    virtual void mouseMoveEvent(QMouseEvent * event);
     void setPixelPerMark(double rate);
     static const int comboScale[];
     int outPoint() const;
@@ -23,6 +21,9 @@ public:
 
 protected:
     virtual void paintEvent(QPaintEvent * /*e*/);
+    virtual void wheelEvent(QWheelEvent * e);
+    virtual void mousePressEvent(QMouseEvent * event);
+    virtual void mouseMoveEvent(QMouseEvent * event);
 
 private:
     int m_cursorPosition;
index 73ba40418d6e2d2c9b05c490d78366f7a91f56bd..e8e7f9a898bb7cf243d3b60d15ca725e202e50b7 100644 (file)
@@ -772,6 +772,14 @@ int CustomTrackView::cursorPos() {
     return (int)(m_cursorPos * m_scale);
 }
 
+void CustomTrackView::moveCursorPos(int delta) {
+    emit cursorMoved((int)(m_cursorPos * m_scale), (int)((m_cursorPos + delta) * m_scale));
+    m_cursorPos += delta;
+    m_cursorLine->setPos(m_cursorPos * m_scale, 0);
+    m_document->renderer()->seek(GenTime(m_cursorPos, m_document->fps()));
+    //if (m_autoScroll && m_scale < 50) checkScrolling();
+}
+
 void CustomTrackView::checkScrolling() {
     QRect rectInView = viewport()->rect();
     int delta = rectInView.width() / 3;
index af88a19509f65bf7b6f7b26f74a1471e322552c5..1c9d46f29bc10a169100eabed81b7bd0d73c64b3 100644 (file)
@@ -74,6 +74,7 @@ public:
 
 public slots:
     void setCursorPos(int pos, bool seek = true);
+    void moveCursorPos(int delta);
     void updateCursorPos();
     void slotDeleteEffect(ClipItem *clip, QDomElement effect);
     void slotChangeEffectState(ClipItem *clip, QDomElement effect, bool disable);
index 72affc58d660f2766ce7ef9fc2aa6dc49424db53..3454e442fb7ccedf93f434541f35584d65d96c92 100644 (file)
@@ -125,8 +125,14 @@ void Monitor::mousePressEvent(QMouseEvent * event) {
 
 // virtual
 void Monitor::wheelEvent(QWheelEvent * event) {
-    if (event->delta() > 0) slotForwardOneFrame();
-    else slotRewindOneFrame();
+    if (event->modifiers() == Qt::ControlModifier) {
+        int delta = m_monitorManager->timecode().fps();
+        if (event->delta() < 0) delta = 0 - delta;
+        slotSeek(m_position + delta);
+    } else {
+        if (event->delta() > 0) slotForwardOneFrame();
+        else slotRewindOneFrame();
+    }
 }
 
 void Monitor::slotExtractCurrentFrame() {
@@ -142,9 +148,8 @@ void Monitor::activateMonitor() {
 void Monitor::slotSeek(int pos) {
     if (!m_isActive) m_monitorManager->activateMonitor(m_name);
     if (render == NULL) return;
-    int realPos = (int)(((double) pos) / m_scale);
-    render->seekToFrame(realPos);
-    m_position = realPos;
+    render->seekToFrame(pos);
+    m_position = pos;
     emit renderPosition(m_position);
     m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position));
 }