X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkeyframehelper.cpp;h=a199bc7d8f163e70b878a6fd1cfad7fcddb6a6eb;hb=100473af93a8de96283d3464115e449380239586;hp=b880f0e39651ca19d39173cd0bb5c45582270418;hpb=89a0d2304f3e3de29843e92f6e644b44352ea5d6;p=kdenlive diff --git a/src/keyframehelper.cpp b/src/keyframehelper.cpp index b880f0e3..a199bc7d 100644 --- a/src/keyframehelper.cpp +++ b/src/keyframehelper.cpp @@ -17,75 +17,54 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ -#include -#include + +#include "keyframehelper.h" +#include "definitions.h" #include -#include -#include #include -#include "keyframehelper.h" - -#include "definitions.h" +#include +#include -KeyframeHelper::KeyframeHelper(QWidget *parent) - : QWidget(parent), m_geom(NULL) { +KeyframeHelper::KeyframeHelper(QWidget *parent) : + 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); - */ +void KeyframeHelper::mousePressEvent(QMouseEvent * event) +{ + 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); - } - */ +void KeyframeHelper::mouseMoveEvent(QMouseEvent * event) +{ + 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) { +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; @@ -94,28 +73,60 @@ void KeyframeHelper::wheelEvent(QWheelEvent * e) { } // virtual -void KeyframeHelper::paintEvent(QPaintEvent *e) { +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) { +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(); }