From cdbf39fd1d1b23be3420e81a80f9aef4acddf4f9 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sat, 22 Sep 2012 18:56:13 +0200 Subject: [PATCH] Cleanup monitor ruler update on seeking --- src/monitor.cpp | 2 -- src/smallruler.cpp | 24 ++++++++++++++++-------- src/smallruler.h | 2 +- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/monitor.cpp b/src/monitor.cpp index 529e6304..ccf1511d 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -175,7 +175,6 @@ Monitor::Monitor(Kdenlive::MONITORID id, MonitorManager *manager, QString profil layout->addWidget(m_ruler); connect(m_audioSlider, SIGNAL(valueChanged(int)), this, SLOT(slotSetVolume(int))); - connect(m_ruler, SIGNAL(seekRenderer(int)), this, SLOT(slotSeek(int))); connect(render, SIGNAL(durationChanged(int)), this, SLOT(adjustRulerSize(int))); connect(render, SIGNAL(rendererStopped(int)), this, SLOT(rendererStopped(int))); connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int))); @@ -710,7 +709,6 @@ void Monitor::slotForwardOneFrame(int diff) void Monitor::seekCursor(int pos) { - //slotActivateMonitor(); if (m_ruler->slotNewValue(pos)) { checkOverlay(); m_timePos->setValue(pos); diff --git a/src/smallruler.cpp b/src/smallruler.cpp index 0b0ac1d6..79683d04 100644 --- a/src/smallruler.cpp +++ b/src/smallruler.cpp @@ -38,6 +38,7 @@ SmallRuler::SmallRuler(MonitorManager *manager, Render *render, QWidget *parent) ,m_maxval(25) ,m_manager(manager) ,m_render(render) + ,m_lastSeekPosition(SEEK_INACTIVE) { m_zoneStart = 10; m_zoneEnd = 60; @@ -128,7 +129,9 @@ void SmallRuler::mousePressEvent(QMouseEvent * event) updatePixmap(); } else { - emit seekRenderer((int) pos); + m_render->seekToFrame(pos); + m_lastSeekPosition = pos; + update(); } } @@ -138,7 +141,8 @@ void SmallRuler::mouseMoveEvent(QMouseEvent * event) { const int pos = event->x() / m_scale; if (event->buttons() & Qt::LeftButton) { - emit seekRenderer((int) pos); + m_render->seekToFrame(pos); + m_lastSeekPosition = pos; update(); } else { @@ -154,9 +158,13 @@ void SmallRuler::mouseMoveEvent(QMouseEvent * event) bool SmallRuler::slotNewValue(int value) { - /*if (value == m_cursorFramePosition) return false; + if (m_render->requestedSeekPosition != SEEK_INACTIVE) { + m_lastSeekPosition = m_render->requestedSeekPosition; + if (value == m_lastSeekPosition) m_lastSeekPosition = SEEK_INACTIVE; + } + if (value == m_cursorFramePosition) return false; m_cursorFramePosition = value; - int oldPos = m_cursorPosition; + /*int oldPos = m_cursorPosition; m_cursorPosition = value * m_scale; const int offset = 6; const int x = qMin(oldPos, m_cursorPosition); @@ -177,6 +185,7 @@ void SmallRuler::updatePixmap() { m_pixmap = QPixmap(width(), height()); m_pixmap.fill(palette().window().color()); + m_lastSeekPosition = SEEK_INACTIVE; QPainter p(&m_pixmap); double f, fend; @@ -219,7 +228,7 @@ void SmallRuler::paintEvent(QPaintEvent *e) p.setClipRect(r); p.drawPixmap(QPointF(), m_pixmap); - int cursorPos = m_render->seekFramePosition() * m_scale; + int cursorPos = m_cursorFramePosition * m_scale; // draw pointer QPolygon pa(3); pa.setPoints(3, cursorPos - 6, 10, cursorPos + 6, 10, cursorPos/*+0*/, 4); @@ -228,9 +237,8 @@ void SmallRuler::paintEvent(QPaintEvent *e) p.drawPolygon(pa); // Draw seeking pointer - if (m_render->requestedSeekPosition != SEEK_INACTIVE) { - int seekPos = m_render->requestedSeekPosition * m_scale - 1; - p.fillRect(seekPos, 0, 3, height(), palette().highlight()); + if (m_lastSeekPosition != SEEK_INACTIVE && m_lastSeekPosition != m_cursorFramePosition) { + p.fillRect(m_lastSeekPosition * m_scale - 1, 0, 3, height(), palette().highlight()); } } diff --git a/src/smallruler.h b/src/smallruler.h index c37aa3e8..b715ef00 100644 --- a/src/smallruler.h +++ b/src/smallruler.h @@ -61,13 +61,13 @@ private: QPixmap m_pixmap; MonitorManager *m_manager; Render *m_render; + int m_lastSeekPosition; void updatePixmap(); public slots: bool slotNewValue(int value); signals: - void seekRenderer(int); void zoneChanged(QPoint); }; -- 2.39.2