#include <QGraphicsDropShadowEffect>
#endif
+#define SEEK_INACTIVE (-1)
//#define DEBUG
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)
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();
void Render::stop()
{
+ requestedSeekPosition = SEEK_INACTIVE;
m_refreshTimer.stop();
QMutexLocker locker(&m_mutex);
if (m_mltProducer == NULL) return;
void Render::stop(const GenTime & startTime)
{
+ requestedSeekPosition = SEEK_INACTIVE;
m_refreshTimer.stop();
QMutexLocker locker(&m_mutex);
if (m_mltProducer) {
void Render::pause()
{
+ requestedSeekPosition = SEEK_INACTIVE;
if (!m_mltProducer || !m_mltConsumer)
return;
if (m_mltProducer->get_speed() == 0.0) return;
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);
void Render::play(const GenTime & startTime)
{
+ requestedSeekPosition = SEEK_INACTIVE;
if (!m_mltProducer || !m_mltConsumer)
return;
m_mltProducer->seek((int)(startTime.frames(m_fps)));
void Render::loopZone(const GenTime & startTime, const GenTime & stopTime)
{
+ requestedSeekPosition = SEEK_INACTIVE;
if (!m_mltProducer || !m_mltConsumer)
return;
//m_mltProducer->set("eof", "loop");
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;
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()