+void KeyframeHelper::mousePressEvent(QMouseEvent * event)
+{
+ m_hoverKeyframe = -1;
+ if (event->button() != Qt::LeftButton) {
+ QWidget::mousePressEvent(event);
+ return;
+ }
+ int xPos = event->x() - margin;
+ if (m_geom != NULL && (event->y() < m_lineHeight)) {
+ // check if we want to move a keyframe
+ int mousePos = qMax((int)(xPos / m_scale), 0);
+ Mlt::GeometryItem item;
+ if (m_geom->next_key(&item, mousePos) == 0) {
+ if (qAbs(item.frame() * m_scale - xPos) < 4) {
+ m_drag = true;
+ m_movingItem.x(item.x());
+ m_movingItem.y(item.y());
+ m_movingItem.w(item.w());
+ m_movingItem.h(item.h());
+ m_movingItem.mix(item.mix());
+ m_movingItem.frame(item.frame());
+
+ while (!m_extraMovingItems.isEmpty()) {
+ Mlt::GeometryItem *gitem = m_extraMovingItems.takeFirst();
+ if (gitem) delete gitem;
+ }
+ for (int i = 0; i < m_extraGeometries.count(); ++i) {
+ if (m_extraGeometries.at(i)->next_key(item, mousePos) == 0) {
+ Mlt::GeometryItem *item2 = new Mlt::GeometryItem();
+ item2->x(item.x());
+ item2->frame(item.frame());
+ m_extraMovingItems.append(item2);
+ } else {
+ m_extraMovingItems.append(NULL);
+ }
+ }
+
+ m_dragStart = event->pos();
+ m_movingKeyframe = true;
+ return;
+ }