]> git.sesse.net Git - kdenlive/commitdiff
improve keyframe grabbing in timeline
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 29 Aug 2009 00:38:25 +0000 (00:38 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 29 Aug 2009 00:38:25 +0000 (00:38 +0000)
svn path=/trunk/kdenlive/; revision=3852

src/abstractclipitem.cpp
src/abstractclipitem.h
src/clipitem.cpp
src/customtrackview.cpp

index fd6828bc0ceeda6dddcce8e6014fe73a86fe96cc..90b0c8fcfaec532e5a3cbbd4920b35399c60056f 100644 (file)
@@ -245,9 +245,9 @@ void AbstractClipItem::drawKeyFrames(QPainter *painter, QRectF /*exposedRect*/)
     }
 }
 
-int AbstractClipItem::mouseOverKeyFrames(QPointF pos)
+int AbstractClipItem::mouseOverKeyFrames(QPointF pos, double maxOffset)
 {
-    QRectF br = sceneBoundingRect();
+    const QRectF br = sceneBoundingRect();
     double maxw = br.width() / cropDuration().frames(m_fps);
     double maxh = br.height() / 100.0 * m_keyframeFactor;
     if (m_keyframes.count() > 1) {
@@ -257,7 +257,7 @@ int AbstractClipItem::mouseOverKeyFrames(QPointF pos)
         while (i != m_keyframes.constEnd()) {
             x1 = br.x() + maxw * (i.key() - cropStart().frames(m_fps));
             y1 = br.bottom() - i.value() * maxh;
-            if (qAbs(pos.x() - x1) < 6 && qAbs(pos.y() - y1) < 6) {
+            if (qAbs(pos.x() - x1) < maxOffset && qAbs(pos.y() - y1) < 10) {
                 setToolTip('[' + QString::number((GenTime(i.key(), m_fps) - cropStart()).seconds(), 'f', 2) + i18n("seconds") + ", " + QString::number(i.value(), 'f', 1) + "%]");
                 return i.key();
             } else if (x1 > pos.x()) break;
index f2b3afdba2ac7349de7a919767218f821cbdcb90..47a66631ccefcc4de023fc3a55d0ab2fd9aa616e 100644 (file)
@@ -74,7 +74,7 @@ protected:
     double m_fps;
     //QRect visibleRect();
     void drawKeyFrames(QPainter *painter, QRectF exposedRect);
-    int mouseOverKeyFrames(QPointF pos);
+    int mouseOverKeyFrames(QPointF pos, double maxOffset);
     virtual void mousePressEvent(QGraphicsSceneMouseEvent * event);
 };
 
index 0902037f39408b6a9b508bea4abd390017d44664..934707142be11b03cd57ba590a051294dc18a863 100644 (file)
@@ -848,14 +848,13 @@ void ClipItem::paint(QPainter *painter,
 OPERATIONTYPE ClipItem::operationMode(QPointF pos)
 {
     if (isItemLocked()) return NONE;
-
+    const double scale = projectScene()->scale().x();
+    double maximumOffset = 6 / scale;
     if (isSelected() || (parentItem() && parentItem()->isSelected())) {
-        m_editedKeyframe = mouseOverKeyFrames(pos);
+        m_editedKeyframe = mouseOverKeyFrames(pos, maximumOffset);
         if (m_editedKeyframe != -1) return KEYFRAME;
     }
     QRectF rect = sceneBoundingRect();
-    const double scale = projectScene()->scale().x();
-    double maximumOffset = 6 / scale;
     int addtransitionOffset = 10;
     // Don't allow add transition if track height is very small
     if (rect.height() < 30) addtransitionOffset = 0;
index b3e6d58cece1ce9cc0fa7f1053a682d24cf76f79..5db740d3db6ce6f30b31eb888095d27916987f5a 100644 (file)
@@ -3970,6 +3970,7 @@ void CustomTrackView::setScale(double scaleFactor, double verticalScale)
     m_animation = NULL;
     double verticalPos = mapToScene(QPoint(0, viewport()->height() / 2)).y();
     setMatrix(matrix);
+    m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), m_tracksHeight * m_document->tracksCount() * verticalScale);
     int diff = sceneRect().width() - m_projectDuration;
     if (diff * matrix.m11() < 50) {
         if (matrix.m11() < 0.4) setSceneRect(0, 0, (m_projectDuration + 100 / matrix.m11()), sceneRect().height());