]> git.sesse.net Git - kdenlive/blobdiff - src/keyframehelper.cpp
const modifiers are useless on integral return types [PATCH by Ray Lehtiniemi]
[kdenlive] / src / keyframehelper.cpp
index b880f0e39651ca19d39173cd0bb5c45582270418..5dbfd1e64d99bd96d4a245c21268caed90a628f1 100644 (file)
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
  ***************************************************************************/
 
-#include <QMouseEvent>
-#include <QStylePainter>
+
+#include "keyframehelper.h"
+#include "definitions.h"
 
 #include <KDebug>
-#include <KIcon>
-#include <KCursor>
 #include <KGlobalSettings>
 
-#include "keyframehelper.h"
-
-#include "definitions.h"
+#include <QMouseEvent>
+#include <QStylePainter>
 
 
 KeyframeHelper::KeyframeHelper(QWidget *parent)
-        : QWidget(parent), m_geom(NULL) {
+        : QWidget(parent), m_geom(NULL), m_position(0), m_scale(0) {
     setFont(KGlobalSettings::toolBarFont());
-
 }
 
 // virtual
 void KeyframeHelper::mousePressEvent(QMouseEvent * event) {
-    /*    if (event->button() == Qt::RightButton) {
-            m_contextMenu->exec(event->globalPos());
-            return;
-        }
-        m_view->activateMonitor();
-        int pos = (int)((event->x() + offset()));
-        m_moveCursor = RULER_CURSOR;
-        if (event->y() > 10) {
-            if (qAbs(pos - m_zoneStart * m_factor) < 4) m_moveCursor = RULER_START;
-            else if (qAbs(pos - (m_zoneStart + (m_zoneEnd - m_zoneStart) / 2) * m_factor) < 4) m_moveCursor = RULER_MIDDLE;
-            else if (qAbs(pos - m_zoneEnd * m_factor) < 4) m_moveCursor = RULER_END;
-        }
-        if (m_moveCursor == RULER_CURSOR)
-            m_view->setCursorPos((int) pos / m_factor);
-    */
+    m_position = event->x() / m_scale;
+    emit positionChanged(m_position);
+    update();
 }
 
 // virtual
 void KeyframeHelper::mouseMoveEvent(QMouseEvent * event) {
-    /*    if (event->buttons() == Qt::LeftButton) {
-            int pos = (int)((event->x() + offset()) / m_factor);
-            if (pos < 0) pos = 0;
-            if (m_moveCursor == RULER_CURSOR) {
-                m_view->setCursorPos(pos);
-                return;
-            } else if (m_moveCursor == RULER_START) m_zoneStart = pos;
-            else if (m_moveCursor == RULER_END) m_zoneEnd = pos;
-            else if (m_moveCursor == RULER_MIDDLE) {
-                int move = pos - (m_zoneStart + (m_zoneEnd - m_zoneStart) / 2);
-                m_zoneStart += move;
-                m_zoneEnd += move;
-            }
-            m_view->setDocumentModified();
-            update();
-        } else {
-            int pos = (int)((event->x() + offset()));
-            if (event->y() <= 10) setCursor(Qt::ArrowCursor);
-            else if (qAbs(pos - m_zoneStart * m_factor) < 4) setCursor(KCursor("left_side", Qt::SizeHorCursor));
-            else if (qAbs(pos - m_zoneEnd * m_factor) < 4) setCursor(KCursor("right_side", Qt::SizeHorCursor));
-            else if (qAbs(pos - (m_zoneStart + (m_zoneEnd - m_zoneStart) / 2) * m_factor) < 4) setCursor(Qt::SizeHorCursor);
-            else setCursor(Qt::ArrowCursor);
-        }
-    */
+    m_position = event->x() / m_scale;
+    m_position = qMax(0, m_position);
+    m_position = qMin(m_length, m_position);
+    emit positionChanged(m_position);
+    update();
 }
 
 
 // virtual
 void KeyframeHelper::wheelEvent(QWheelEvent * e) {
+    if (e->delta() < 0) m_position = m_position - 1;
+    else m_position = m_position + 1;
+    m_position = qMax(0, m_position);
+    m_position = qMin(m_length, m_position);
+    emit positionChanged(m_position);
+    update();
     /*    int delta = 1;
         if (e->modifiers() == Qt::ControlModifier) delta = m_timecode.fps();
         if (e->delta() < 0) delta = 0 - delta;
@@ -96,26 +68,54 @@ void KeyframeHelper::wheelEvent(QWheelEvent * e) {
 // virtual
 void KeyframeHelper::paintEvent(QPaintEvent *e) {
     QStylePainter p(this);
-    p.setClipRect(e->rect());
-
+    const QRectF clipRect = e->rect();
+    p.setClipRect(clipRect);
+    m_scale = (double) width() / m_length;
     if (m_geom != NULL) {
         int pos = 0;
+        p.setPen(QColor(255, 20, 20));
         Mlt::GeometryItem item;
-        for (int i = 0; i < m_geom->length(); i++) {
-            m_geom->next_key(&item, pos);
+        while (true) {
+            if (m_geom->next_key(&item, pos) == 1) break;
             pos = item.frame();
-            kDebug() << "++ PAINTING POS: " << pos;
-            int scaledPos = pos * width() / m_length;
-            p.fillRect(QRect(scaledPos - 1, 0, 2, 15), QBrush(QColor(255, 20, 20)));
+            int scaledPos = pos * m_scale;
+            // draw keyframes
+            p.drawLine(scaledPos, 6, scaledPos, 10);
+            // draw pointer
+            QPolygon pa(3);
+            pa.setPoints(3, scaledPos - 4, 0, scaledPos + 4, 0, scaledPos, 4);
+            p.setBrush(QColor(255, 20, 20));
+            p.drawPolygon(pa);
+            //p.fillRect(QRect(scaledPos - 1, 0, 2, 15), QBrush(QColor(255, 20, 20)));
             pos++;
         }
     }
+    p.setPen(palette().dark().color());
+    p.drawLine(clipRect.x(), 5, clipRect.right(), 5);
+
+    // draw pointer
+    QPolygon pa(3);
+    const int cursor = m_position * m_scale;
+    pa.setPoints(3, cursor - 5, 11, cursor + 5, 11, cursor, 6);
+    p.setBrush(palette().dark().color());
+    p.drawPolygon(pa);
+
+
+}
+
+int KeyframeHelper::value() const {
+    return m_position;
+}
+
+void KeyframeHelper::setValue(const int pos) {
+    if (pos == m_position || m_geom == NULL) return;
+    m_position = pos;
+    update();
 }
 
 void KeyframeHelper::setKeyGeometry(Mlt::Geometry *geom, const int length) {
     m_geom = geom;
     m_length = length;
-    kDebug() << "KEYFRAMES: " << m_geom->length() << ", TRANS SOZE: " << m_length;
     update();
 }