From: <tt...@us...> - 2011-02-20 20:32:32
|
Revision: 5441 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5441&view=rev Author: ttill Date: 2011-02-20 20:32:26 +0000 (Sun, 20 Feb 2011) Log Message: ----------- rotoscoping timeline: - highlight hovered keyframe - snap to timeline cursor when dragging keyframe - do not allow dragging keyframe on top of another one Modified Paths: -------------- trunk/kdenlive/src/simplekeyframes/simpletimelinewidget.cpp Modified: trunk/kdenlive/src/simplekeyframes/simpletimelinewidget.cpp =================================================================== --- trunk/kdenlive/src/simplekeyframes/simpletimelinewidget.cpp 2011-02-20 18:52:12 UTC (rev 5440) +++ trunk/kdenlive/src/simplekeyframes/simpletimelinewidget.cpp 2011-02-20 20:32:26 UTC (rev 5441) @@ -32,6 +32,7 @@ m_position(0), m_currentKeyframe(-1), m_currentKeyframeOriginal(-1), + m_hoverKeyframe(-1), m_lineHeight(10), m_scale(1) { @@ -150,22 +151,42 @@ void SimpleTimelineWidget::mouseMoveEvent(QMouseEvent* event) { + int pos = qBound(0, (int)(event->x() / m_scale), m_duration); if (event->buttons() & Qt::LeftButton) { - int pos = qBound(0, (int)(event->x() / m_scale), m_duration); if (m_currentKeyframe >= 0) { - // should we maybe sort here? - m_keyframes[m_keyframes.indexOf(m_currentKeyframe)] = pos; - m_currentKeyframe = pos; - emit keyframeMoving(m_currentKeyframeOriginal, m_currentKeyframe); + if (!m_keyframes.contains(pos)) { + // snap to position cursor + if (KdenliveSettings::snaptopoints() && qAbs(pos - m_position) < 5 && !m_keyframes.contains(m_position)) + pos = m_position; + // should we maybe sort here? + m_keyframes[m_keyframes.indexOf(m_currentKeyframe)] = pos; + m_currentKeyframe = pos; + emit keyframeMoving(m_currentKeyframeOriginal, m_currentKeyframe); + } } else { m_position = pos; emit positionChanged(pos); } update(); return; + } else { + if (event->y() < m_lineHeight) { + foreach(const int &keyframe, m_keyframes) { + if (qAbs(keyframe - pos) < 5) { + m_hoverKeyframe = keyframe; + setCursor(Qt::PointingHandCursor); + update(); + return; + } + } + } + + if (m_hoverKeyframe != -1) { + m_hoverKeyframe = -1; + setCursor(Qt::ArrowCursor); + update(); + } } - - // cursor } void SimpleTimelineWidget::mouseReleaseEvent(QMouseEvent* event) @@ -210,13 +231,13 @@ foreach (const int &pos, m_keyframes) { tmp = keyframe; tmp.translate(pos * m_scale, 0); - if (pos == m_currentKeyframe) + if (pos == m_currentKeyframe || pos == m_hoverKeyframe) p.setBrush(m_colSelected); p.drawConvexPolygon(tmp); p.drawLine(QLineF(0, -1, 0, 5).translated(pos * m_scale, 0)); - if (pos == m_currentKeyframe) + if (pos == m_currentKeyframe || pos == m_hoverKeyframe) p.setBrush(m_colKeyframeBg); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |