From 1f9ce41f0d59b31931edee01be140566743091c9 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Fri, 7 Sep 2012 18:07:35 +0200 Subject: [PATCH] Small repaint optimizations --- src/customruler.cpp | 5 +++++ src/customruler.h | 1 + src/customtrackview.cpp | 39 ++++++++++++++++++++++++++++++++++----- src/customtrackview.h | 2 +- src/renderer.cpp | 1 + src/trackview.cpp | 2 +- 6 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/customruler.cpp b/src/customruler.cpp index d1265173..67401a34 100644 --- a/src/customruler.cpp +++ b/src/customruler.cpp @@ -277,6 +277,11 @@ void CustomRuler::slotCursorMoved(int oldpos, int newpos) } else update(qMin(oldpos, newpos) * m_factor - offset() - 6, BIG_MARK_X, qAbs(oldpos - newpos) * m_factor + 14, MAX_HEIGHT - BIG_MARK_X); } +void CustomRuler::updateRuler(int min, int max) +{ + update(min * m_factor - offset(), 0, max - min, height()); +} + void CustomRuler::setPixelPerMark(int rate) { int scale = comboScale[rate]; diff --git a/src/customruler.h b/src/customruler.h index cc11565b..6659c7a2 100644 --- a/src/customruler.h +++ b/src/customruler.h @@ -87,6 +87,7 @@ private: public slots: void slotMoveRuler(int newPos); void slotCursorMoved(int oldpos, int newpos); + void updateRuler(int min, int max); private slots: void slotEditGuide(); diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 5fd95e1d..ef12ad54 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -3348,8 +3348,22 @@ void CustomTrackView::deleteClip(const QString &clipId) void CustomTrackView::seekCursorPos(int pos) { + int current = m_document->renderer()->requestedSeekPosition; + int playhead = m_document->renderer()->seekFramePosition(); + int min; + int max; + if (current != SEEK_INACTIVE) { + min = qMin(pos, playhead); + min = qMin (min, current) - 5; + max = qMax(pos, playhead); + max = qMax(max, current) + 5; + } + else { + min = qMin(pos, playhead) - 5; + max = qMax(pos, playhead) + 5; + } m_document->renderer()->seek(pos); - emit updateRuler(); + emit updateRuler(min, max); } int CustomTrackView::seekPosition() const @@ -3381,11 +3395,26 @@ int CustomTrackView::cursorPos() void CustomTrackView::moveCursorPos(int delta) { int currentPos = m_document->renderer()->requestedSeekPosition; - if (currentPos == SEEK_INACTIVE) currentPos = m_document->renderer()->seekFramePosition(); - if (currentPos + delta < 0) delta = 0 - currentPos; - currentPos += delta; + int actualPos = m_document->renderer()->seekPosition().frames(m_document->fps()); + int min; + int max; + if (currentPos == SEEK_INACTIVE) { + currentPos = actualPos + delta; + if (currentPos < 0) currentPos = 0; + min = qMin(actualPos, currentPos) - 5; + max = qMax(actualPos, currentPos) + 5; + } + else { + min = qMin(currentPos, currentPos + delta); + min = qMin (min, actualPos) - 5; + max = qMax(currentPos, currentPos + delta); + max = qMax(max, actualPos) + 5; + currentPos += delta; + if (currentPos < 0) currentPos = 0; + } + m_document->renderer()->seek(currentPos); - emit updateRuler(); + emit updateRuler(min, max); } void CustomTrackView::initCursorPos(int pos) diff --git a/src/customtrackview.h b/src/customtrackview.h index a37f76ee..6067ef5c 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -516,7 +516,7 @@ signals: /** @brief Update the track effect button that shows if a track has effects or not.*/ void updateTrackEffectState(int); /** @brief Cursor position changed, repaint ruler.*/ - void updateRuler(); + void updateRuler(int min, int max); }; #endif diff --git a/src/renderer.cpp b/src/renderer.cpp index c43fa064..18ea5555 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -389,6 +389,7 @@ void Render::seek(int time) if (requestedSeekPosition == SEEK_INACTIVE) { requestedSeekPosition = time; m_mltProducer->seek(time); + m_mltConsumer->purge(); if (m_mltProducer->get_speed() == 0) { refresh(); } diff --git a/src/trackview.cpp b/src/trackview.cpp index 2f190746..1e153191 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -113,7 +113,7 @@ TrackView::TrackView(KdenliveDoc *doc, QList actions, bool *ok, QWidg if (m_doc->setSceneList() == -1) *ok = false; else *ok = true; connect(m_trackview, SIGNAL(cursorMoved(int, int)), m_ruler, SLOT(slotCursorMoved(int, int))); - connect(m_trackview, SIGNAL(updateRuler()), m_ruler, SLOT(update())); + connect(m_trackview, SIGNAL(updateRuler(int, int)), m_ruler, SLOT(updateRuler(int, int))); connect(m_trackview->horizontalScrollBar(), SIGNAL(valueChanged(int)), m_ruler, SLOT(slotMoveRuler(int))); connect(m_trackview->horizontalScrollBar(), SIGNAL(rangeChanged(int, int)), this, SLOT(slotUpdateVerticalScroll(int, int))); -- 2.39.2