From: <j-...@us...> - 2009-07-23 23:03:25
|
Revision: 3760 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3760&view=rev Author: j-b-m Date: 2009-07-23 23:03:17 +0000 (Thu, 23 Jul 2009) Log Message: ----------- Add / remove transition keyframes through double click in param ruler Modified Paths: -------------- trunk/kdenlive/src/geometryval.cpp trunk/kdenlive/src/geometryval.h trunk/kdenlive/src/keyframehelper.cpp trunk/kdenlive/src/keyframehelper.h Modified: trunk/kdenlive/src/geometryval.cpp =================================================================== --- trunk/kdenlive/src/geometryval.cpp 2009-07-23 21:46:37 UTC (rev 3759) +++ trunk/kdenlive/src/geometryval.cpp 2009-07-23 23:03:17 UTC (rev 3760) @@ -51,8 +51,9 @@ connect(m_helper, SIGNAL(positionChanged(int)), this, SLOT(slotPositionChanged(int))); connect(m_helper, SIGNAL(keyframeMoved(int)), this, SLOT(slotKeyframeMoved(int))); + connect(m_helper, SIGNAL(addKeyframe(int)), this, SLOT(slotAddFrame(int))); + connect(m_helper, SIGNAL(removeKeyframe(int)), this, SLOT(slotDeleteFrame(int))); - m_scene = new GraphicsSceneRectMove(this); m_scene->setTool(TITLE_SELECT); view->setScene(m_scene); @@ -347,11 +348,11 @@ m_paramRect->setBrush(QColor(255, 0, 0, item.mix())); } -void Geometryval::slotDeleteFrame() +void Geometryval::slotDeleteFrame(int pos) { // check there is more than one keyframe Mlt::GeometryItem item; - const int pos = m_ui.spinPos->value(); + if (pos == -1) pos = m_ui.spinPos->value(); int error = m_geom->next_key(&item, pos + 1); if (error) { error = m_geom->prev_key(&item, pos - 1); @@ -372,9 +373,9 @@ emit parameterChanged(); } -void Geometryval::slotAddFrame() +void Geometryval::slotAddFrame(int pos) { - int pos = m_ui.spinPos->value(); + if (pos = -1) pos = m_ui.spinPos->value(); Mlt::GeometryItem item; item.frame(pos); item.x(m_paramRect->pos().x()); Modified: trunk/kdenlive/src/geometryval.h =================================================================== --- trunk/kdenlive/src/geometryval.h 2009-07-23 21:46:37 UTC (rev 3759) +++ trunk/kdenlive/src/geometryval.h 2009-07-23 23:03:17 UTC (rev 3760) @@ -71,8 +71,8 @@ void slotNextFrame(); void slotPreviousFrame(); void slotPositionChanged(int pos, bool seek = true); - void slotDeleteFrame(); - void slotAddFrame(); + void slotDeleteFrame(int pos = -1); + void slotAddFrame(int pos = -1); void slotUpdateTransitionProperties(); void slotTransparencyChanged(int transp); void slotResize50(); Modified: trunk/kdenlive/src/keyframehelper.cpp =================================================================== --- trunk/kdenlive/src/keyframehelper.cpp 2009-07-23 21:46:37 UTC (rev 3759) +++ trunk/kdenlive/src/keyframehelper.cpp 2009-07-23 23:03:17 UTC (rev 3760) @@ -53,7 +53,7 @@ m_movingItem.w(item.w()); m_movingItem.h(item.h()); m_movingItem.mix(item.mix()); - m_geom->remove(item.frame()); + m_movingItem.frame(item.frame()); m_dragStart = event->pos(); m_movingKeyframe = true; return; @@ -69,8 +69,11 @@ void KeyframeHelper::mouseMoveEvent(QMouseEvent * event) { if (m_movingKeyframe) { - if (!m_dragStart.isNull() && (event->pos() - m_dragStart).manhattanLength() < QApplication::startDragDistance()) return; - m_dragStart = QPoint(); + if (!m_dragStart.isNull()) { + if ((event->pos() - m_dragStart).manhattanLength() < QApplication::startDragDistance()) return; + m_dragStart = QPoint(); + m_geom->remove(m_movingItem.frame()); + } int pos = qMax(0, (int)(event->x() / m_scale)); pos = qMin(m_length, pos); m_movingItem.frame(pos); @@ -84,6 +87,22 @@ update(); } +void KeyframeHelper::mouseDoubleClickEvent(QMouseEvent * event) +{ + if (m_geom != NULL && event->button() == Qt::LeftButton) { + // check if we want to move a keyframe + int mousePos = qMax((int)(event->x() / m_scale - 5), 0); + Mlt::GeometryItem item; + if (m_geom->next_key(&item, mousePos) == 0 && item.frame() - mousePos < 10) { + // There is already a keyframe close to mouse click + emit removeKeyframe(item.frame()); + return; + } + // add new keyframe + emit addKeyframe((int)(event->x() / m_scale)); + } +} + // virtual void KeyframeHelper::mouseReleaseEvent(QMouseEvent * event) { Modified: trunk/kdenlive/src/keyframehelper.h =================================================================== --- trunk/kdenlive/src/keyframehelper.h 2009-07-23 21:46:37 UTC (rev 3759) +++ trunk/kdenlive/src/keyframehelper.h 2009-07-23 23:03:17 UTC (rev 3760) @@ -40,6 +40,7 @@ virtual void mousePressEvent(QMouseEvent * event); virtual void mouseMoveEvent(QMouseEvent * event); virtual void mouseReleaseEvent(QMouseEvent * event); + virtual void mouseDoubleClickEvent(QMouseEvent * event); private: Mlt::Geometry *m_geom; @@ -57,6 +58,8 @@ signals: void positionChanged(int); void keyframeMoved(int); + void addKeyframe(int); + void removeKeyframe(int); }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |