]> git.sesse.net Git - kdenlive/commitdiff
Composite transition: add new "Resize to original size" option that will allow for...
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 31 May 2009 12:48:57 +0000 (12:48 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 31 May 2009 12:48:57 +0000 (12:48 +0000)
svn path=/trunk/kdenlive/; revision=3466

src/customtrackview.cpp
src/customtrackview.h
src/effectstackedit.cpp
src/effectstackedit.h
src/geometryval.cpp
src/geometryval.h
src/mainwindow.cpp
src/trackview.cpp
src/trackview.h
src/transitionsettings.cpp
src/transitionsettings.h

index 746740d8b39fb00a00c7d6b88e4b445d20f2c698..28b2197cb0eb52561a60ad6008b5d4515e0ed1c7 100644 (file)
@@ -1650,7 +1650,17 @@ void CustomTrackView::updateTransition(int track, GenTime pos, QDomElement oldTr
     m_document->renderer()->mltUpdateTransition(oldTransition.attribute("tag"), transition.attribute("tag"), transition.attribute("transition_btrack").toInt(), m_document->tracksCount() - transition.attribute("transition_atrack").toInt(), item->startPos(), item->endPos(), transition);
     //kDebug() << "ORIGINAL TRACK: "<< oldTransition.attribute("transition_btrack") << ", NEW TRACK: "<<transition.attribute("transition_btrack");
     item->setTransitionParameters(transition);
-    if (updateTransitionWidget) emit transitionItemSelected(item, true);
+    if (updateTransitionWidget) {
+        ItemInfo info = item->info();
+        QPoint p;
+        ClipItem *transitionClip = getClipItemAt(info.startPos, info.track);
+        if (transitionClip && transitionClip->baseClip()) {
+            QString size = transitionClip->baseClip()->getProperty("frame_size");
+            p.setX(size.section('x', 0, 0).toInt());
+            p.setY(size.section('x', 1, 1).toInt());
+        }
+        emit transitionItemSelected(item, p, true);
+    }
     m_document->setModified(true);
 }
 
@@ -2271,6 +2281,7 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event)
                 else prod = item->baseClip()->producer(m_dragItemInfo.track);
                 bool success = m_document->renderer()->mltMoveClip((int)(m_document->tracksCount() - m_dragItemInfo.track), (int)(m_document->tracksCount() - m_dragItem->track()), (int) m_dragItemInfo.startPos.frames(m_document->fps()), (int)(m_dragItem->startPos().frames(m_document->fps())), prod);
                 if (success) {
+                    kDebug() << "// get trans info";
                     int tracknumber = m_document->tracksCount() - item->track() - 1;
                     bool isLocked = m_document->trackInfoAt(tracknumber).isLocked;
                     if (isLocked) item->setItemLocked(true);
@@ -2280,6 +2291,7 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event)
                     new MoveClipCommand(this, m_dragItemInfo, info, false, moveCommand);
                     // Also move automatic transitions (on lower track)
                     Transition *tr = getTransitionItemAtStart(m_dragItemInfo.startPos, m_dragItemInfo.track);
+                    kDebug() << "// get trans info2";
                     if (tr && tr->isAutomatic()) {
                         ItemInfo trInfo = tr->info();
                         ItemInfo newTrInfo = trInfo;
@@ -2671,8 +2683,17 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event)
         m_commandStack->push(command);
         updateEffect(m_document->tracksCount() - item->track(), item->startPos(), item->selectedEffect(), item->selectedEffectIndex());
     }
-
-    emit transitionItemSelected((m_dragItem && m_dragItem->type() == TRANSITIONWIDGET && m_dragItem->isSelected()) ? static_cast <Transition *>(m_dragItem) : NULL);
+    if (m_dragItem && m_dragItem->type() == TRANSITIONWIDGET && m_dragItem->isSelected()) {
+        // A transition is selected
+        QPoint p;
+        ClipItem *transitionClip = getClipItemAt(m_dragItemInfo.startPos, m_dragItemInfo.track);
+        if (transitionClip && transitionClip->baseClip()) {
+            QString size = transitionClip->baseClip()->getProperty("frame_size");
+            p.setX(size.section('x', 0, 0).toInt());
+            p.setY(size.section('x', 1, 1).toInt());
+        }
+        emit transitionItemSelected(static_cast <Transition *>(m_dragItem), p);
+    } else emit transitionItemSelected(NULL);
     if (m_operationMode != NONE && m_operationMode != MOVE) m_document->setModified(true);
     m_operationMode = NONE;
 }
index cc75ed8f51d87f6c341c83d11a303751c6b9a984..843a65b2bf1bde3c862e029d568b10ea6e0d27a7 100644 (file)
@@ -259,7 +259,7 @@ signals:
     void zoomOut();
     void mousePosition(int);
     void clipItemSelected(ClipItem*, int ix = -1);
-    void transitionItemSelected(Transition*, bool update = false);
+    void transitionItemSelected(Transition*, QPoint p = QPoint(), bool update = false);
     void activateDocumentMonitor();
     void trackHeightChanged();
     void displayMessage(const QString, MessageType);
index 43ed8f44abe650fcd2284a942c0a3bc7275bc1f9..7bd9b58e69f4ebd968debb3316d5fa6bfdd5808c 100644 (file)
@@ -67,7 +67,8 @@ QMap<QString, QImage> EffectStackEdit::iconCache;
 EffectStackEdit::EffectStackEdit(QWidget *parent) :
         QWidget(parent),
         m_in(0),
-        m_out(0)
+        m_out(0),
+        m_frameSize(QPoint())
 {
     setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding));
     QVBoxLayout *vbox1 = new QVBoxLayout(parent);
@@ -96,6 +97,11 @@ EffectStackEdit::~EffectStackEdit()
     iconCache.clear();
 }
 
+void EffectStackEdit::setFrameSize(QPoint p)
+{
+    m_frameSize = p;
+}
+
 void EffectStackEdit::updateProjectFormat(MltVideoProfile profile, Timecode t)
 {
     m_profile = profile;
@@ -205,7 +211,7 @@ void EffectStackEdit::transferParamDesc(const QDomElement& d, int in, int out)
             m_valueItems[paramName+"complex"] = pl;
             m_items.append(pl);
         } else if (type == "geometry") {
-            Geometryval *geo = new Geometryval(m_profile);
+            Geometryval *geo = new Geometryval(m_profile, m_frameSize);
             connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
             connect(geo, SIGNAL(seekToPos(int)), this, SLOT(slotSeekToPos(int)));
             geo->setupParam(pa, minFrame, maxFrame);
index 51211b2e5e1d1231dcace06ff9d75713eb5d4878..10e456ee947a95ea387ec9d15a03fe504ca17aa6 100644 (file)
@@ -47,6 +47,7 @@ public:
     void updateProjectFormat(MltVideoProfile profile, Timecode t);
     static QMap<QString, QImage> iconCache;
     void updateParameter(const QString &name, const QString &value);
+    void setFrameSize(QPoint p);
 
     class UiItem
     {
@@ -69,6 +70,7 @@ private:
     Timecode m_timecode;
     int m_in;
     int m_out;
+    QPoint m_frameSize;
 
 public slots:
     void transferParamDesc(const QDomElement&, int , int);
index 8b7969677e7e8ed94b38496962ad6675cbd15b68..a8e515e7a62755651e4efc5bbb57813be664e176 100644 (file)
 #include <QInputDialog>
 
 
-Geometryval::Geometryval(const MltVideoProfile profile, QWidget* parent) :
+Geometryval::Geometryval(const MltVideoProfile profile, QPoint frame_size, QWidget* parent) :
         QWidget(parent),
         m_profile(profile),
         m_paramRect(NULL),
         m_geom(NULL),
         m_path(NULL),
-        m_fixedMode(false)
+        m_fixedMode(false),
+        m_frameSize(frame_size)
 {
     m_ui.setupUi(this);
     QVBoxLayout* vbox = new QVBoxLayout(m_ui.widget);
@@ -79,6 +80,7 @@ Geometryval::Geometryval(const MltVideoProfile profile, QWidget* parent) :
     m_scaleMenu->addAction(i18n("50%"), this, SLOT(slotResize50()));
     m_scaleMenu->addAction(i18n("100%"), this, SLOT(slotResize100()));
     m_scaleMenu->addAction(i18n("200%"), this, SLOT(slotResize200()));
+    m_scaleMenu->addAction(i18n("Original size"), this, SLOT(slotResizeOriginal()));
     m_scaleMenu->addAction(i18n("Custom"), this, SLOT(slotResizeCustom()));
 
 
@@ -241,6 +243,20 @@ void Geometryval::slotResize200()
     slotUpdateTransitionProperties();
 }
 
+void Geometryval::slotResizeOriginal()
+{
+    if (m_frameSize.isNull()) slotResize100();
+    int pos = m_ui.spinPos->value();
+    Mlt::GeometryItem item;
+    int error = m_geom->fetch(&item, pos);
+    if (error || item.key() == false) {
+        // no keyframe under cursor
+        return;
+    }
+    m_paramRect->setRect(0, 0, m_frameSize.x(), m_frameSize.y());
+    slotUpdateTransitionProperties();
+}
+
 void Geometryval::slotResizeCustom()
 {
     int pos = m_ui.spinPos->value();
index 172f78887e391f0912a79bd39122dec1bc0b4c30..82847c7c2e657699c794a0ae6ce26ad31657cab7 100644 (file)
@@ -39,7 +39,7 @@ class Geometryval : public QWidget
 {
     Q_OBJECT
 public:
-    explicit Geometryval(const MltVideoProfile profile, QWidget* parent = 0);
+    explicit Geometryval(const MltVideoProfile profile, QPoint frame_size, QWidget* parent = 0);
     QDomElement getParamDesc();
 
 private:
@@ -55,6 +55,7 @@ private:
     QMenu *m_scaleMenu;
     QMenu *m_alignMenu;
     QAction *m_syncAction;
+    QPoint m_frameSize;
     bool m_fixedMode;
     void updateTransitionPath();
 
@@ -73,6 +74,7 @@ private slots:
     void slotResize100();
     void slotResize200();
     void slotResizeCustom();
+    void slotResizeOriginal();
     void slotAlignRight();
     void slotAlignLeft();
     void slotAlignTop();
index 973f9ed40989b9c7c3238ca3e4be629420a58ff5..0c862d07d69b19ecdc7c52ae0eed465937b431c6 100644 (file)
@@ -1275,7 +1275,7 @@ void MainWindow::closeCurrentDocument()
         delete m_activeDocument;
         m_activeDocument = NULL;
         m_effectStack->clear();
-        m_transitionConfig->slotTransitionItemSelected(NULL, false);
+        m_transitionConfig->slotTransitionItemSelected(NULL, QPoint(), false);
     } else delete docToClose;
     if (w == m_activeTimeline) {
         delete m_activeTimeline;
@@ -1786,8 +1786,8 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
             disconnect(m_activeDocument, SIGNAL(deleteTimelineClip(const QString &)), m_activeTimeline, SLOT(slotDeleteClip(const QString &)));
             disconnect(m_activeTimeline->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), m_effectStack, SLOT(slotClipItemSelected(ClipItem*, int)));
             disconnect(m_activeTimeline->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), this, SLOT(slotActivateEffectStackView()));
-            disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, bool)));
-            disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
+            disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, QPoint, bool)));
+            disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
             disconnect(m_zoomSlider, SIGNAL(valueChanged(int)), m_activeTimeline, SLOT(slotChangeZoom(int)));
             disconnect(m_activeTimeline->projectView(), SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType)));
             disconnect(m_activeTimeline->projectView(), SIGNAL(showClipFrame(DocClipBase *, const int)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *, const int)));
@@ -1846,8 +1846,8 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
 
     connect(trackView->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), m_effectStack, SLOT(slotClipItemSelected(ClipItem*, int)));
     connect(trackView->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), this, SLOT(slotActivateEffectStackView()));
-    connect(trackView, SIGNAL(transitionItemSelected(Transition*, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, bool)));
-    connect(trackView, SIGNAL(transitionItemSelected(Transition*, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
+    connect(trackView, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, QPoint, bool)));
+    connect(trackView, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
     m_zoomSlider->setValue(doc->zoom());
     connect(m_zoomSlider, SIGNAL(valueChanged(int)), trackView, SLOT(slotChangeZoom(int)));
     connect(trackView->projectView(), SIGNAL(zoomIn()), this, SLOT(slotZoomIn()));
index 0fe426c8550cdc2fbd67be5c9b7ee38e498ce26a..2a7224b55f16a646c9e372829bfefc4312d3c84d 100644 (file)
@@ -84,7 +84,7 @@ TrackView::TrackView(KdenliveDoc *doc, QWidget *parent) :
     connect(m_trackview, SIGNAL(cursorMoved(int, int)), m_ruler, SLOT(slotCursorMoved(int, int)));
     connect(m_trackview->horizontalScrollBar(), SIGNAL(valueChanged(int)), m_ruler, SLOT(slotMoveRuler(int)));
     connect(m_trackview, SIGNAL(mousePosition(int)), this, SIGNAL(mousePosition(int)));
-    connect(m_trackview, SIGNAL(transitionItemSelected(Transition*, bool)), this, SLOT(slotTransitionItemSelected(Transition*, bool)));
+    connect(m_trackview, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), this, SLOT(slotTransitionItemSelected(Transition*, QPoint, bool)));
     connect(m_trackview, SIGNAL(doTrackLock(int, bool)), this, SLOT(slotChangeTrackLock(int, bool)));
 
     slotChangeZoom(m_doc->zoom());
@@ -117,9 +117,9 @@ void TrackView::slotSetZone(QPoint p)
     m_ruler->setZone(p);
 }
 
-void TrackView::slotTransitionItemSelected(Transition *t, bool update)
+void TrackView::slotTransitionItemSelected(Transition *t, QPoint p, bool update)
 {
-    emit transitionItemSelected(t, update);
+    emit transitionItemSelected(t, p, update);
 }
 
 void TrackView::setDuration(int dur)
index 986e7d280c8650acd9b8888fca215fa1968c0bcc..345190c575df6624f1224b6e874e2fc14e2c7e8b 100644 (file)
@@ -85,14 +85,14 @@ private:
 private slots:
     void setCursorPos(int pos);
     void moveCursorPos(int pos);
-    void slotTransitionItemSelected(Transition*, bool update);
+    void slotTransitionItemSelected(Transition*, QPoint p, bool update);
     void slotRebuildTrackHeaders();
     void slotChangeTrackLock(int ix, bool lock);
 
 signals:
     void mousePosition(int);
     void cursorMoved();
-    void transitionItemSelected(Transition*, bool);
+    void transitionItemSelected(Transition*, QPoint, bool);
     void zoneMoved(int, int);
     void insertTrack(int);
     void deleteTrack(int);
index ba3f13db7c0d24c85a4271c3002f330419655462..1afbb9f4c6c2e4ec038253b35ea7921630694992 100644 (file)
@@ -102,9 +102,10 @@ void TransitionSettings::slotTransitionTrackChanged()
     m_effectEdit->updateParameter("transition_btrack", QString::number(ix));
 }
 
-void TransitionSettings::slotTransitionItemSelected(Transition* t, bool update)
+void TransitionSettings::slotTransitionItemSelected(Transition* t, QPoint p, bool update)
 {
     setEnabled(t != NULL);
+    m_effectEdit->setFrameSize(p);
     if (t == m_usedTransition) {
         if (t == NULL) return;
         if (update) {
index 12dd4d08db96098e46c343d583e9f08343082685..2d6be8bf58fac0b34f4dbb1113416d4223a83e5d 100644 (file)
@@ -45,7 +45,7 @@ private:
     int m_tracksCount;
 
 public slots:
-    void slotTransitionItemSelected(Transition*, bool);
+    void slotTransitionItemSelected(Transition*, QPoint, bool);
     void slotTransitionChanged(bool reinit = true, bool updateCurrent = false);
     void slotUpdateEffectParams(const QDomElement&, const QDomElement&);