From 743967ef882a09c0e23068be3216a9a7d1fd82dd Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Fri, 11 Apr 2008 15:07:52 +0000 Subject: [PATCH] Wheel on project timeline ruler to seek, ctrl+wheel seeks 1 second instead of 1 frame svn path=/branches/KDE4/; revision=2163 --- src/customruler.cpp | 9 +++++++++ src/customruler.h | 5 +++-- src/customtrackview.cpp | 8 ++++++++ src/customtrackview.h | 1 + src/monitor.cpp | 15 ++++++++++----- 5 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/customruler.cpp b/src/customruler.cpp index 26bee694..674efaba 100644 --- a/src/customruler.cpp +++ b/src/customruler.cpp @@ -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; } diff --git a/src/customruler.h b/src/customruler.h index 2774c478..ae3a9a30 100644 --- a/src/customruler.h +++ b/src/customruler.h @@ -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; diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 73ba4041..e8e7f9a8 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -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; diff --git a/src/customtrackview.h b/src/customtrackview.h index af88a195..1c9d46f2 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -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); diff --git a/src/monitor.cpp b/src/monitor.cpp index 72affc58..3454e442 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -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)); } -- 2.39.5