void CustomTrackView::mouseMoveEvent ( QMouseEvent * event )
{
int pos = event->x();
+ emit mousePosition(mapToScene(event->pos()).x() / m_scale);
/*if (event->modifiers() == Qt::ControlModifier)
setDragMode(QGraphicsView::ScrollHandDrag);
else if (event->modifiers() == Qt::ShiftModifier)
if (m_dragItem) { //event->button() == Qt::LeftButton) {
// a button was pressed, delete visual tips
-
if (m_operationMode == MOVE) {
- int moveX = mapToScene(event->pos()).x();
+ int snappedPos = getSnapPointForPos(mapToScene(event->pos()).x() - m_clickPoint);
+ int moveX = snappedPos; //mapToScene(event->pos()).x();
//kDebug()<<"/////// MOVE CLIP, EVENTĀ Y: "<<event->scenePos().y()<<", SCENE HEIGHT: "<<scene()->sceneRect().height();
int moveTrack = (int) mapToScene(event->pos()).y() / 50;
int currentTrack = m_dragItem->track();
int offset = moveTrack - currentTrack;
if (offset != 0) offset = 50 * offset;
- m_dragItem->moveTo((moveX - m_clickPoint) / m_scale, m_scale, offset, moveTrack);
+ m_dragItem->moveTo(moveX / m_scale, m_scale, offset, moveTrack);
}
else if (m_operationMode == RESIZESTART) {
int pos = mapToScene(event->pos()).x();
void CustomTrackView::mousePressEvent ( QMouseEvent * event )
{
int pos = event->x();
+ updateSnapPoints();
if (event->modifiers() == Qt::ControlModifier)
setDragMode(QGraphicsView::ScrollHandDrag);
else if (event->modifiers() == Qt::ShiftModifier)
}
}
+double CustomTrackView::getSnapPointForPos(double pos)
+{
+ for (int i = 0; i < m_snapPoints.size(); ++i) {
+ if (abs(pos - m_snapPoints.at(i) * m_scale) < 6) return m_snapPoints.at(i) * m_scale;
+ if (m_snapPoints.at(i) > pos) break;
+ }
+ return pos;
+}
+
+void CustomTrackView::updateSnapPoints()
+{
+ m_snapPoints.clear();
+ QList<QGraphicsItem *> itemList = items();
+ for (int i = 0; i < itemList.count(); i++) {
+ if (itemList.at(i)->type() == 70000) {
+ ClipItem *item = (ClipItem *)itemList.at(i);
+ m_snapPoints.append(item->startPos());
+ if (item->fadeIn() != 0) m_snapPoints.append(item->startPos() + item->fadeIn());
+ m_snapPoints.append(item->endPos());
+ if (item->fadeOut() != 0) m_snapPoints.append(item->endPos() - item->fadeOut());
+ }
+ }
+ qSort(m_snapPoints);
+}
+
void CustomTrackView::setScale(double scaleFactor)
{