+void KeyframeHelper::mouseMoveEvent(QMouseEvent * event)
+{
+ if (!m_drag) {
+ if (m_geom != NULL && (event->y() < m_lineHeight)) {
+ // check if we want to move a keyframe
+ int mousePos = qMax((int)(event->x() / m_scale), 0);
+ Mlt::GeometryItem item;
+ if (m_geom->next_key(&item, mousePos) == 0) {
+ if (qAbs(item.frame() * m_scale - (int)(event->x())) < 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 ((event->pos() - 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)(event->x() / 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++) {
+ m_extraMovingItems[i]->frame(pos);
+ }
+ update();
+ return;
+ }