From: <j-...@us...> - 2008-03-26 21:16:25
|
Revision: 2125 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2125&view=rev Author: j-b-m Date: 2008-03-26 14:16:32 -0700 (Wed, 26 Mar 2008) Log Message: ----------- Fix transition moving (still crashing a lot) Modified Paths: -------------- branches/KDE4/src/abstractclipitem.cpp branches/KDE4/src/abstractclipitem.h branches/KDE4/src/customtrackview.cpp branches/KDE4/src/customtrackview.h branches/KDE4/src/moveclipcommand.cpp branches/KDE4/src/movetransitioncommand.cpp branches/KDE4/src/movetransitioncommand.h branches/KDE4/src/renderer.cpp branches/KDE4/src/renderer.h Modified: branches/KDE4/src/abstractclipitem.cpp =================================================================== --- branches/KDE4/src/abstractclipitem.cpp 2008-03-26 11:46:06 UTC (rev 2124) +++ branches/KDE4/src/abstractclipitem.cpp 2008-03-26 21:16:32 UTC (rev 2125) @@ -7,11 +7,10 @@ AbstractClipItem::AbstractClipItem(const QRectF& rect): QGraphicsRectItem(rect), m_startFade(0), m_endFade(0) { setFlags(QGraphicsItem::ItemClipsToShape | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); } -void AbstractClipItem::moveTo(int x, double scale, double offset, int newTrack) { +void AbstractClipItem::moveTo(int x, double scale, int offset, int newTrack) { double origX = rect().x(); double origY = rect().y(); bool success = true; - if (x < 0) return; setRect(x * scale, origY + offset, rect().width(), rect().height()); QList <QGraphicsItem *> collisionList = collidingItems(Qt::IntersectsItemBoundingRect); Modified: branches/KDE4/src/abstractclipitem.h =================================================================== --- branches/KDE4/src/abstractclipitem.h 2008-03-26 11:46:06 UTC (rev 2124) +++ branches/KDE4/src/abstractclipitem.h 2008-03-26 21:16:32 UTC (rev 2125) @@ -14,7 +14,7 @@ virtual void setTrack(int track); virtual GenTime endPos() const ; virtual int track() const ; - virtual void moveTo(int x, double scale, double offset, int newTrack); + virtual void moveTo(int x, double scale, int offset, int newTrack); virtual GenTime cropStart() const ; virtual void resizeStart(int posx, double scale); virtual void resizeEnd(int posx, double scale); Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-03-26 11:46:06 UTC (rev 2124) +++ branches/KDE4/src/customtrackview.cpp 2008-03-26 21:16:32 UTC (rev 2125) @@ -33,6 +33,7 @@ #include "clipitem.h" #include "definitions.h" #include "moveclipcommand.h" +#include "movetransitioncommand.h" #include "resizeclipcommand.h" #include "addtimelineclipcommand.h" #include "addeffectcommand.h" @@ -590,16 +591,12 @@ m_document->setModified(true); } -void CustomTrackView::moveTransition(GenTime oldpos, GenTime newpos) { - kDebug() << "move"; -} - void CustomTrackView::addItem(DocClipBase *clip, QPoint pos) { int in = 0; GenTime out = clip->duration(); //kdDebug()<<"- - - -CREATING CLIP, duration = "<<out<<", URL: "<<clip->fileURL(); - int trackTop = ((int) mapToScene(pos).y() / m_tracksHeight) * m_tracksHeight + 1; - m_dropItem = new ClipItem(clip, ((int) mapToScene(pos).y() / m_tracksHeight), GenTime(), QRectF(mapToScene(pos).x() * m_scale, trackTop, out.frames(m_document->fps()) * m_scale, m_tracksHeight - 1), out, m_document->fps()); + int trackTop = (int)(mapToScene(pos).y() / m_tracksHeight) * m_tracksHeight + 1; + m_dropItem = new ClipItem(clip, (int)(mapToScene(pos).y() / m_tracksHeight), GenTime(), QRectF(mapToScene(pos).x() * m_scale, trackTop, out.frames(m_document->fps()) * m_scale, m_tracksHeight - 1), out, m_document->fps()); scene()->addItem(m_dropItem); } @@ -609,7 +606,7 @@ //kDebug()<<"+++++++++++++ DRAG MOVE, : "<<mapToScene(event->pos()).x()<<", SCAL: "<<m_scale; if (m_dropItem) { int track = (int)(event->pos().y() / m_tracksHeight); //) * (m_scale * 50) + m_scale; - m_dropItem->moveTo((int)(mapToScene(event->pos()).x() / m_scale), m_scale, (double)(track - m_dropItem->track()) * m_tracksHeight, track); + m_dropItem->moveTo((int)(mapToScene(event->pos()).x() / m_scale), m_scale, (int)((track - m_dropItem->track()) * m_tracksHeight), track); event->setDropAction(Qt::MoveAction); if (event->mimeData()->hasFormat("kdenlive/producerslist")) { event->acceptProposedAction(); @@ -734,20 +731,24 @@ setDragMode(QGraphicsView::NoDrag); if (m_dragItem == NULL) return; if (m_operationMode == MOVE) setCursor(Qt::OpenHandCursor); - if (m_operationMode == MOVE && m_startPos.x() != m_dragItem->startPos().frames(m_document->fps())) { + if (m_operationMode == MOVE) {// && m_startPos.x() != m_dragItem->startPos().frames(m_document->fps())) { // move clip - MoveClipCommand *command = new MoveClipCommand(this, m_startPos, QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()), false); - m_commandStack->push(command); - if (m_dragItem->type() == AVWIDGET) m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - m_startPos.y()), (int)(m_tracksList.count() - m_dragItem->track()), (int) m_startPos.x(), (int)(m_dragItem->startPos().frames(m_document->fps()))); + if (m_dragItem->type() == AVWIDGET) { + MoveClipCommand *command = new MoveClipCommand(this, m_startPos, QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()), false); + m_commandStack->push(command); + m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - m_startPos.y()), (int)(m_tracksList.count() - m_dragItem->track()), (int) m_startPos.x(), (int)(m_dragItem->startPos().frames(m_document->fps()))); + } if (m_dragItem->type() == TRANSITIONWIDGET) { Transition* transition = (Transition*)m_dragItem; GenTime oldin = transition->transitionStartTime(); GenTime oldout = transition->transitionEndTime(); GenTime newin = m_dragItem->startPos(); GenTime newout = newin + (oldout - oldin); - m_document->renderer()->mltMoveTransition(transition->transitionName(), - (int)(m_tracksList.count() - m_dragItem->track()), 0, - oldin, oldout, newin, newout); + transition->moveTransition(newin - oldin); + MoveTransitionCommand *command = new MoveTransitionCommand(this, QPointF(oldin.frames(m_document->fps()), oldout.frames(m_document->fps())), QPointF(newin.frames(m_document->fps()), newout.frames(m_document->fps())), (int) m_startPos.y(), (int)(m_dragItem->track()), false); + m_commandStack->push(command); + //kDebug()<<"/// MOVING TRS FROM: "<<(int)(m_tracksList.count() - m_startPos.y())<<", OFFSET: "<<(int) (m_dragItem->track() - m_startPos.y()); + m_document->renderer()->mltMoveTransition(transition->transitionName(), (int)(m_tracksList.count() - m_startPos.y()), (int)(m_startPos.y() - m_dragItem->track()), oldin, oldout, newin, newout); } } else if (m_operationMode == RESIZESTART) { @@ -818,28 +819,50 @@ } ClipItem *CustomTrackView::getClipItemAt(GenTime pos, int track) { - QList<QGraphicsItem *> list = scene()->items(QPointF(pos.frames(m_document->fps()) * m_scale, track * m_tracksHeight + m_tracksHeight / 2)); - ClipItem *clip = NULL; + int framepos = (int)(pos.frames(m_document->fps()) * m_scale); + return getClipItemAt(framepos, track); +} + +Transition *CustomTrackView::getTransitionItemAt(int pos, int track) { + QList<QGraphicsItem *> list = scene()->items(QPointF(pos * m_scale, track * m_tracksHeight + m_tracksHeight / 2)); + Transition *clip = NULL; for (int i = 0; i < list.size(); ++i) { - if (list.at(i)->type() == AVWIDGET) { - clip = static_cast <ClipItem *>(list.at(i)); + if (list.at(i)->type() == TRANSITIONWIDGET) { + clip = static_cast <Transition *>(list.at(i)); break; } } return clip; } +Transition *CustomTrackView::getTransitionItemAt(GenTime pos, int track) { + int framepos = (int)(pos.frames(m_document->fps()) * m_scale); + return getTransitionItemAt(framepos, track); +} + void CustomTrackView::moveClip(const QPointF &startPos, const QPointF &endPos) { ClipItem *item = getClipItemAt((int)startPos.x() + 1, (int)startPos.y()); if (!item) { kDebug() << "---------------- ERROR, CANNOT find clip to move at: " << startPos.x() * m_scale * FRAME_SIZE + 1 << ", " << startPos.y() * m_tracksHeight + m_tracksHeight / 2; return; } - kDebug() << "---------------- Move CLIP FROM: " << startPos.x() << ", END:" << endPos.x(); - item->moveTo((int)endPos.x(), m_scale, (endPos.y() - startPos.y()) * m_tracksHeight, (int)endPos.y()); + kDebug() << "---------------- Move CLIP FROM: " << startPos.x() << ", END:" << endPos.x() << ",TRACKS: " << startPos.y() << " TO " << endPos.y(); + item->moveTo((int)endPos.x(), m_scale, (int)((endPos.y() - startPos.y()) * m_tracksHeight), (int)endPos.y()); m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - startPos.y()), (int)(m_tracksList.count() - endPos.y()), (int) startPos.x(), (int)endPos.x()); } +void CustomTrackView::moveTransition(const QPointF &startPos, const QPointF &endPos, int oldtrack, int newtrack) { + Transition *item = getTransitionItemAt((int)startPos.x() + 1, oldtrack); + if (!item) { + kDebug() << "---------------- ERROR, CANNOT find transition to move at: " << startPos.x() * m_scale * FRAME_SIZE + 1 << ", " << startPos.y() * m_tracksHeight + m_tracksHeight / 2; + return; + } + kDebug() << "---------------- Move TRANSITION FROM: " << startPos.x() << ", END:" << endPos.x() << ",TRACKS: " << oldtrack << " TO " << newtrack; + item->moveTo((int)endPos.x(), m_scale, (newtrack - oldtrack) * m_tracksHeight, newtrack); + //item->moveTransition(GenTime((int) (endPos.x() - startPos.x()), m_document->fps())); + m_document->renderer()->mltMoveTransition(item->transitionName(), m_tracksList.count() - oldtrack, oldtrack - newtrack, GenTime((int) startPos.x(), m_document->fps()), GenTime((int) startPos.y(), m_document->fps()), GenTime((int) endPos.x(), m_document->fps()), GenTime((int) endPos.y(), m_document->fps())); +} + void CustomTrackView::resizeClip(const QPointF &startPos, const QPointF &endPos, bool resizeClipStart) { int offset; if (resizeClipStart) offset = 1; Modified: branches/KDE4/src/customtrackview.h =================================================================== --- branches/KDE4/src/customtrackview.h 2008-03-26 11:46:06 UTC (rev 2124) +++ branches/KDE4/src/customtrackview.h 2008-03-26 21:16:32 UTC (rev 2125) @@ -47,6 +47,8 @@ int cursorPos(); void checkAutoScroll(); void moveClip(const QPointF &startPos, const QPointF &endPos); + /** move transition, startPos = (old start, old end), endPos = (new start, new end) */ + void moveTransition(const QPointF &startPos, const QPointF &endPos, int oldtrack, int newtrack); void resizeClip(const QPointF &startPos, const QPointF &endPos, bool resizeClipStart); void addClip(QDomElement xml, int clipId, int track, GenTime startpos, const QRectF &rect, GenTime duration); void deleteClip(int track, GenTime startpos, const QRectF &rect); @@ -59,7 +61,7 @@ void addTransition(int track, GenTime pos, QDomElement transition); void deleteTransition(int track, GenTime pos, QDomElement transition); void updateTransition(int track, GenTime pos, QDomElement oldTransition, QDomElement transition); - void moveTransition(GenTime oldpos,GenTime newpos); + void moveTransition(GenTime oldpos, GenTime newpos); void activateMonitor(); int duration() const; void deleteSelectedClips(); @@ -117,6 +119,8 @@ double getSnapPointForPos(double pos); ClipItem *getClipItemAt(int pos, int track); ClipItem *getClipItemAt(GenTime pos, int track); + Transition *getTransitionItemAt(int pos, int track); + Transition *getTransitionItemAt(GenTime pos, int track); void checkScrolling(); /** Should we auto scroll while playing (keep in sync with KdenliveSettings::autoscroll() */ bool m_autoScroll; Modified: branches/KDE4/src/moveclipcommand.cpp =================================================================== --- branches/KDE4/src/moveclipcommand.cpp 2008-03-26 11:46:06 UTC (rev 2124) +++ branches/KDE4/src/moveclipcommand.cpp 2008-03-26 21:16:32 UTC (rev 2125) @@ -31,12 +31,13 @@ void MoveClipCommand::undo() { // kDebug()<<"---- undoing action"; m_doIt = true; - if (m_doIt) m_view->moveClip(m_endPos, m_startPos); + m_view->moveClip(m_endPos, m_startPos); } // virtual void MoveClipCommand::redo() { kDebug() << "---- redoing action"; - if (m_doIt) m_view->moveClip(m_startPos, m_endPos); + if (m_doIt) + m_view->moveClip(m_startPos, m_endPos); m_doIt = true; } Modified: branches/KDE4/src/movetransitioncommand.cpp =================================================================== --- branches/KDE4/src/movetransitioncommand.cpp 2008-03-26 11:46:06 UTC (rev 2124) +++ branches/KDE4/src/movetransitioncommand.cpp 2008-03-26 21:16:32 UTC (rev 2125) @@ -19,7 +19,7 @@ #include "movetransitioncommand.h" #include "customtrackview.h" MoveTransitionCommand::MoveTransitionCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, int startTrack, int endTrack, bool doIt) - : m_view(view), m_startPos(startPos), m_endPos(endPos), m_doIt(doIt) { + : m_view(view), m_startPos(startPos), m_endPos(endPos), m_startTrack(startTrack), m_endTrack(endTrack), m_doIt(doIt) { setText(i18n("Move transition")); } @@ -28,12 +28,12 @@ void MoveTransitionCommand::undo() { // kDebug()<<"---- undoing action"; m_doIt = true; - //if (m_doIt) m_view->moveTransition(m_endPos, m_startPos); + m_view->moveTransition(m_endPos, m_startPos, m_endTrack, m_startTrack); } // virtual void MoveTransitionCommand::redo() { kDebug() << "---- redoing action"; - //if (m_doIt) m_view->moveTransition(m_startPos, m_endPos); + if (m_doIt) m_view->moveTransition(m_startPos, m_endPos, m_startTrack, m_endTrack); m_doIt = true; } Modified: branches/KDE4/src/movetransitioncommand.h =================================================================== --- branches/KDE4/src/movetransitioncommand.h 2008-03-26 11:46:06 UTC (rev 2124) +++ branches/KDE4/src/movetransitioncommand.h 2008-03-26 21:16:32 UTC (rev 2125) @@ -28,7 +28,7 @@ class MoveTransitionCommand : public QUndoCommand { public: - MoveTransitionCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos,int startTrack, int endTrack, bool doIt); + MoveTransitionCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, int startTrack, int endTrack, bool doIt); virtual void undo(); virtual void redo(); @@ -37,8 +37,8 @@ QPointF m_startPos; QPointF m_endPos; bool m_doIt; - int m_startTrack; - int m_endTrack; + int m_startTrack; + int m_endTrack; }; #endif Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-03-26 11:46:06 UTC (rev 2124) +++ branches/KDE4/src/renderer.cpp 2008-03-26 21:16:32 UTC (rev 2125) @@ -837,7 +837,7 @@ return 0.0; } -const GenTime & Render::seekPosition() const { +GenTime Render::seekPosition() const { if (m_mltProducer) return GenTime((int) m_mltProducer->position(), m_fps); else return GenTime(); } @@ -1370,16 +1370,16 @@ int currentTrack = mlt_transition_get_b_track(tr); int currentIn = (int) mlt_transition_get_in(tr); int currentOut = (int) mlt_transition_get_out(tr); - kDebug() << "// FOUND EXISTING TRANS, IN: " << type << resource << currentIn << ", OUT: " << currentOut << ", TRACK: " << currentTrack; - //kDebug()<<"// LOOKING FOR IN: "<<old_in<<", OUT: "<<old_out; - kDebug() << "// OLD IN: " << oldIn.frames(m_fps) << " // OLD OUT: " << oldOut.frames(m_fps) << ", TRACK: " << startTrack << ", MID POS: " << old_pos; + + //kDebug() << "// OLD IN: " << oldIn.frames(m_fps) << " // OLD OUT: " << oldOut.frames(m_fps) << ", TRACK: " << startTrack << ", CURR TRANS: " <<currentIn<<", MID:"<< old_pos<<currentOut; if (resource == type && startTrack == currentTrack && currentIn <= old_pos && currentOut >= old_pos) { + //kDebug() << "// FOUND EXISTING TRANS, IN: " << type << resource << currentIn << ", OUT: " << currentOut << ", TRACK: " << currentTrack; mlt_transition_set_in_and_out(tr, new_in, new_out); if (trackOffset != 0) { mlt_properties properties = MLT_TRANSITION_PROPERTIES(tr); mlt_properties_set_int(properties, "a_track", mlt_transition_get_a_track(tr) + trackOffset); mlt_properties_set_int(properties, "b_track", mlt_transition_get_b_track(tr) + trackOffset); - kDebug() << "set new start & end :" << new_in << new_out; + //kDebug() << "set new start & end :" << new_in << new_out<< "TR OFFSET: "<<trackOffset<<", TRACKS: "<<mlt_transition_get_a_track(tr)<<"x"<<mlt_transition_get_b_track(tr); } break; } @@ -1389,7 +1389,9 @@ resource = mlt_properties_get(properties, "mlt_service"); } m_isBlocked = false; + delete tractor; } + m_mltConsumer->set("refresh", 1); } void Render::mltUpdateTransition(QString oldTag, QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml) { Modified: branches/KDE4/src/renderer.h =================================================================== --- branches/KDE4/src/renderer.h 2008-03-26 11:46:06 UTC (rev 2124) +++ branches/KDE4/src/renderer.h 2008-03-26 21:16:32 UTC (rev 2125) @@ -124,7 +124,7 @@ not playing anything. */ double playSpeed(); /** Returns the current seek position of the renderer. */ - const GenTime & seekPosition() const; + GenTime seekPosition() const; void emitFrameNumber(double position); void emitConsumerStopped(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |