if (m_moveCursor == RULER_CURSOR) {
QPoint diff = event->pos() - m_clickPoint;
if (m_mouseMove == NO_MOVE) {
- if (!KdenliveSettings::verticalzoom() || qAbs(diff.x()) >= QApplication::startDragDistance()) {
+ if (qAbs(diff.x()) >= QApplication::startDragDistance()) {
m_mouseMove = HORIZONTAL_MOVE;
- } else if (qAbs(diff.y()) >= QApplication::startDragDistance()) {
+ } else if (KdenliveSettings::verticalzoom() && qAbs(diff.y()) >= QApplication::startDragDistance()) {
m_mouseMove = VERTICAL_MOVE;
} else return;
}
if (m_mouseMove == HORIZONTAL_MOVE) {
- m_view->seekCursorPos(pos);
- m_view->slotCheckPositionScrolling();
+ if (pos != m_lastSeekPosition && pos != m_view->cursorPos()) {
+ m_view->seekCursorPos(pos);
+ m_view->slotCheckPositionScrolling();
+ }
} else {
int verticalDiff = m_startRate - (diff.y()) / 7;
if (verticalDiff != m_rate) emit adjustZoom(verticalDiff);
if (event->buttons() != Qt::NoButton && event->modifiers() == Qt::NoModifier) {
QGraphicsView::mouseMoveEvent(event);
m_moveOpMode = SEEK;
- seekCursorPos(mappedXPos);
- slotCheckPositionScrolling();
+ if (mappedXPos != m_document->renderer()->getCurrentSeekPosition() && mappedXPos != cursorPos()) {
+ seekCursorPos(mappedXPos);
+ slotCheckPositionScrolling();
+ }
return;
} else m_moveOpMode = NONE;
}
static void kdenlive_callback(void* /*ptr*/, int level, const char* fmt, va_list vl)
{
-// kDebug() << "log level" << level << QString().vsprintf(fmt, vl).simplified();
if (level > MLT_LOG_ERROR) return;
+ //kDebug() << "log level" << level << QString().vsprintf(fmt, vl).simplified();
QString error;
QApplication::postEvent(qApp->activeWindow(), new MltErrorEvent(error.vsprintf(fmt, vl).simplified()));
va_end(vl);
m_mltProducer->seek(time);
if (m_paused && !externalConsumer) {
m_mltConsumer->set("refresh", 1);
+ m_paused = false;
}
else if (m_mltProducer->get_speed() == 0) {
// workaround specific bug in MLT's SDL consumer
emit frameUpdated(qimage.rgbSwapped());
}
+int Render::getCurrentSeekPosition() const
+{
+ if (requestedSeekPosition != SEEK_INACTIVE) return requestedSeekPosition;
+ return (int) m_mltProducer->position();
+}
+
void Render::emitFrameNumber()
{
int currentPos = m_mltConsumer->position();
if (requestedSeekPosition != SEEK_INACTIVE) {
m_mltConsumer->purge();
m_mltProducer->seek(requestedSeekPosition);
- if (m_mltProducer->get_speed() == 0) m_mltConsumer->set("refresh", 1);
+ if (m_mltProducer->get_speed() == 0 && m_paused) {
+ m_paused = false;
+ m_mltConsumer->set("refresh", 1);
+ }
requestedSeekPosition = SEEK_INACTIVE;
}
}
static bool getBlackMagicOutputDeviceList(KComboBox *devicelist, bool force = false);
/** @brief Frame rendering is handeled by Kdenlive, don't show video through SDL display */
void disablePreview(bool disable);
+ /** @brief Get current seek pos requested of SEEK_INACTIVE if we are not currently seeking */
int requestedSeekPosition;
+ /** @brief Get current seek pos requested of current producer pos if not seeking */
+ int getCurrentSeekPosition() const;
QSemaphore showFrameSemaphore;
bool externalConsumer;