]> git.sesse.net Git - kdenlive/blobdiff - src/smallruler.cpp
[PATCH by Ray Lehtiniemi] Fix up a missing return value
[kdenlive] / src / smallruler.cpp
index 2a41544c966e0b8ece69365bf18ef10ee1c133d9..a07d1755fbbd2368bfef71103f49f7cf12e7e3f2 100644 (file)
  ***************************************************************************/
 
 
-#include <QMouseEvent>
-#include <QStylePainter>
+#include "smallruler.h"
 
 #include <KDebug>
 
-#include "smallruler.h"
-
+#include <QMouseEvent>
+#include <QStylePainter>
 
 SmallRuler::SmallRuler(QWidget *parent)
         : QWidget(parent), m_scale(1), m_maxval(25) {
@@ -52,21 +51,48 @@ void SmallRuler::adjustScale(int maximum) {
 }
 
 void SmallRuler::setZone(int start, int end) {
-    m_zoneStart = start;
-    m_zoneEnd = end;
+    if (start != -1) {
+        if (end != -1 && start >= end) {
+            m_zoneEnd = qMin(m_maxval, end + (start - m_zoneStart));
+            m_zoneStart = start;
+        } else if (end == -1 && start >= m_zoneEnd) {
+            m_zoneEnd = qMin(m_maxval, m_zoneEnd + (start - m_zoneStart));
+            m_zoneStart = start;
+        } else m_zoneStart = start;
+    }
+    if (end != -1) {
+        if (start != -1 && end <= start) {
+            m_zoneStart = qMax(0, start - (m_zoneEnd - end));
+            m_zoneEnd = end;
+        } else if (start == -1 && end <= m_zoneStart) {
+            m_zoneStart = qMax(0, m_zoneStart - (m_zoneEnd - end));
+            m_zoneEnd = end;
+        } else m_zoneEnd = end;
+    }
     update();
 }
 
+QPoint SmallRuler::zone() {
+    return QPoint(m_zoneStart, m_zoneEnd);
+}
+
 // virtual
 void SmallRuler::mousePressEvent(QMouseEvent * event) {
     const int pos = event->x() / m_scale;
-    emit seekRenderer((int) pos);
+    if (event->button() == Qt::RightButton) {
+        // Right button clicked, move selection zone
+        if (qAbs(pos - m_zoneStart) < qAbs(pos - m_zoneEnd)) m_zoneStart = pos;
+        else m_zoneEnd = pos;
+        emit zoneChanged(QPoint(m_zoneStart, m_zoneEnd));
+        update();
+
+    } else emit seekRenderer((int) pos);
 }
 
 // virtual
 void SmallRuler::mouseMoveEvent(QMouseEvent * event) {
     const int pos = event->x() / m_scale;
-    emit seekRenderer((int) pos);
+    if (event->buttons() & Qt::LeftButton) emit seekRenderer((int) pos);
 }
 
 void SmallRuler::slotNewValue(int value) {