]> git.sesse.net Git - kdenlive/commitdiff
New option in composite transition: double click in rectangle to manually adjust...
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 1 Jun 2009 15:13:32 +0000 (15:13 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 1 Jun 2009 15:13:32 +0000 (15:13 +0000)
svn path=/trunk/kdenlive/; revision=3471

src/CMakeLists.txt
src/geometryval.cpp
src/geometryval.h
src/graphicsscenerectmove.cpp
src/graphicsscenerectmove.h

index 1d13e0b932cc4c94de7ffa5da24a2d5ed462fab0..59fdde5da272135fe965dab8c6b22a53d39f2a16 100644 (file)
@@ -73,6 +73,7 @@ kde4_add_ui_files(kdenlive_UI
   widgets/dvdwizardchapters_ui.ui
   widgets/missingclips_ui.ui
   widgets/cliptranscode_ui.ui
+  widgets/geometryposition_ui.ui
 )
  
 set(kdenlive_SRCS 
index a8e515e7a62755651e4efc5bbb57813be664e176..78fd7095381c6e2cbe3736e67e256ab2de72ffc2 100644 (file)
@@ -75,6 +75,8 @@ Geometryval::Geometryval(const MltVideoProfile profile, QPoint frame_size, QWidg
     m_ui.buttonMenu->setPopupMode(QToolButton::QToolButton::InstantPopup);
 
 
+    configMenu->addAction(i18n("Geometry"), this, SLOT(slotGeometry()));
+
     m_scaleMenu = new QMenu(i18n("Resize..."), this);
     configMenu->addMenu(m_scaleMenu);
     m_scaleMenu->addAction(i18n("50%"), this, SLOT(slotResize50()));
@@ -83,7 +85,6 @@ Geometryval::Geometryval(const MltVideoProfile profile, QPoint frame_size, QWidg
     m_scaleMenu->addAction(i18n("Original size"), this, SLOT(slotResizeOriginal()));
     m_scaleMenu->addAction(i18n("Custom"), this, SLOT(slotResizeCustom()));
 
-
     m_alignMenu = new QMenu(i18n("Align..."), this);
     configMenu->addMenu(m_alignMenu);
     m_alignMenu->addAction(i18n("Center"), this, SLOT(slotAlignCenter()));
@@ -111,6 +112,8 @@ Geometryval::Geometryval(const MltVideoProfile profile, QPoint frame_size, QWidg
     connect(m_ui.buttonDelete , SIGNAL(clicked()) , this , SLOT(slotDeleteFrame()));
     connect(m_ui.buttonAdd , SIGNAL(clicked()) , this , SLOT(slotAddFrame()));
     connect(m_scene, SIGNAL(actionFinished()), this, SLOT(slotUpdateTransitionProperties()));
+    connect(m_scene, SIGNAL(doubleClickEvent()), this, SLOT(slotGeometry()));
+
 }
 
 void Geometryval::slotAlignCenter()
@@ -492,3 +495,55 @@ void Geometryval::slotUpdateTransitionProperties()
     updateTransitionPath();
     emit parameterChanged();
 }
+
+void Geometryval::slotGeometry()
+{
+    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;
+    }
+    QRectF r = m_paramRect->rect().normalized();
+
+    QDialog d(this);
+    m_view = new Ui::GeometryPosition_UI();
+    m_view->setupUi(&d);
+    d.setWindowTitle(i18n("Frame Geometry"));
+    m_view->value_x->setMaximum(10000);
+    m_view->value_x->setMinimum(-10000);
+    m_view->value_y->setMaximum(10000);
+    m_view->value_y->setMinimum(-10000);
+    m_view->value_width->setMaximum(500000);
+    m_view->value_width->setMinimum(1);
+    m_view->value_height->setMaximum(500000);
+    m_view->value_height->setMinimum(1);
+
+    m_view->value_x->setValue(m_paramRect->pos().x());
+    m_view->value_y->setValue(m_paramRect->pos().y());
+    m_view->value_width->setValue(r.width());
+    m_view->value_height->setValue(r.height());
+    connect(m_view->button_reset , SIGNAL(clicked()) , this , SLOT(slotResetPosition()));
+
+    if (d.exec() == QDialog::Accepted) {
+        m_paramRect->setPos(m_view->value_x->value(), m_view->value_y->value());
+        m_paramRect->setRect(0, 0, m_view->value_width->value(), m_view->value_height->value());
+        slotUpdateTransitionProperties();
+    }
+    delete m_view;
+}
+
+void Geometryval::slotResetPosition()
+{
+    m_view->value_x->setValue(0);
+    m_view->value_y->setValue(0);
+
+    if (m_frameSize.isNull()) {
+        m_view->value_width->setValue(m_profile.width);
+        m_view->value_height->setValue(m_profile.height);
+    } else {
+        m_view->value_width->setValue(m_frameSize.x());
+        m_view->value_height->setValue(m_frameSize.y());
+    }
+}
index 82847c7c2e657699c794a0ae6ce26ad31657cab7..a82ff75c090bfbe12f6804e465fc5f39460f026f 100644 (file)
@@ -28,6 +28,7 @@
 #include "ui_geometryval_ui.h"
 #include "definitions.h"
 #include "keyframehelper.h"
+#include "ui_geometryposition_ui.h"
 
 //class QGraphicsScene;
 class GraphicsSceneRectMove;
@@ -58,6 +59,7 @@ private:
     QPoint m_frameSize;
     bool m_fixedMode;
     void updateTransitionPath();
+    Ui::GeometryPosition_UI *m_view;
 
 public slots:
     void setupParam(const QDomElement&, int, int);
@@ -83,6 +85,8 @@ private slots:
     void slotAlignHCenter();
     void slotAlignVCenter();
     void slotSyncCursor();
+    void slotGeometry();
+    void slotResetPosition();
 
 signals:
     void parameterChanged();
index 8bd590d968b1a5898009f792c091a75442b17ad0..4b99f332a616834d58a9e856884680032234f834 100644 (file)
@@ -130,7 +130,7 @@ void GraphicsSceneRectMove::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* e)
             QGraphicsTextItem *t = static_cast<QGraphicsTextItem *>(g);
             m_selectedItem = g;
             t->setTextInteractionFlags(Qt::TextEditorInteraction);
-        }
+        } else emit doubleClickEvent();
     }
     QGraphicsScene::mouseDoubleClickEvent(e);
 }
index 62a4ff1fb2947869369c2dd6f2c8a147ea660460..26092d25935f057d27967f5a65004e0bc9d1337d 100644 (file)
@@ -62,6 +62,7 @@ signals:
     void newRect(QGraphicsRectItem *);
     void newText(QGraphicsTextItem *);
     void actionFinished();
+    void doubleClickEvent();
 };
 
 #endif