-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);
+void KeyframeHelper::mouseMoveEvent(QMouseEvent * event)
+{
+ int xPos = event->x() - margin;
+ if (!m_drag) {
+ int mousePos = qMax((int)(xPos / m_scale), 0);
+ if (qAbs(m_position * m_scale - xPos) < cursorWidth && event->y() >= m_lineHeight) {
+ // Mouse over time cursor
+ if (m_hoverKeyframe != -2) {
+ m_hoverKeyframe = -2;
+ update();
+ }
+ event->accept();
+ return;
+ }
+ if (m_geom != NULL && (event->y() < m_lineHeight)) {
+ // check if we want to move a keyframe
+ Mlt::GeometryItem item;
+ if (m_geom->next_key(&item, mousePos) == 0) {
+ if (qAbs(item.frame() * m_scale - xPos) < 4) {
+ if (m_hoverKeyframe == item.frame()) return;
+ m_hoverKeyframe = item.frame();
+ setCursor(Qt::PointingHandCursor);
+ update();
+ event->accept();
+ return;
+ }
+ }
+ }
+ if (m_hoverKeyframe != -1) {
+ m_hoverKeyframe = -1;
+ setCursor(Qt::ArrowCursor);
+ update();
+ }
+ event->accept();
+ return;
+ }
+ if (m_movingKeyframe) {
+ if (!m_dragStart.isNull()) {
+ if ((QPoint(xPos, event->y()) - m_dragStart).manhattanLength() < QApplication::startDragDistance()) return;
+ m_dragStart = QPoint();
+ m_geom->remove(m_movingItem.frame());
+ for (int i = 0; i < m_extraGeometries.count(); ++i)
+ m_extraGeometries[i]->remove(m_movingItem.frame());
+ }
+ int pos = qBound(0, (int)(xPos / m_scale), frameLength);
+ if (KdenliveSettings::snaptopoints() && qAbs(pos - m_position) < 5)
+ pos = m_position;
+ m_movingItem.frame(pos);
+ for (int i = 0; i < m_extraMovingItems.count(); ++i) {
+ if (m_extraMovingItems.at(i))
+ m_extraMovingItems[i]->frame(pos);
+ }
+ update();
+ return;
+ }
+ m_seekPosition = (int) (xPos / m_scale);
+ m_seekPosition = qMax(0, m_seekPosition);
+ m_seekPosition = qMin(frameLength, m_seekPosition);
+ m_hoverKeyframe = -2;
+ emit requestSeek(m_seekPosition);