]> git.sesse.net Git - kdenlive/blobdiff - src/geometrywidget.h
Const'ref
[kdenlive] / src / geometrywidget.h
index 9425eacb8f3cec65a0d9d6c8dea4b1f5c7406634..3f7414408c63f7191a30457ff4cb800fb345c25f 100644 (file)
@@ -33,6 +33,8 @@ class MonitorScene;
 class KeyframeHelper;
 class TimecodeDisplay;
 class OnMonitorRectItem;
+class OnMonitorPathItem;
+class QGraphicsRectItem;
 class DragValue;
 
 class GeometryWidget : public QWidget
@@ -44,26 +46,33 @@ public:
     * @param timecode Timecode needed by timecode display widget
     * @param clipPos Position of the clip in timeline
     * @param isEffect true if used in an effect, false if used in a transition
+    * @param showRotation Should we show or hide the rotation sliders
     * @param parent (optional) Parent widget */
-    GeometryWidget(Monitor *monitor, Timecode timecode, int clipPos, bool isEffect, QWidget* parent = 0);
+    explicit GeometryWidget(Monitor *monitor, const Timecode &timecode, int clipPos, bool isEffect, bool showRotation, QWidget* parent = 0);
     virtual ~GeometryWidget();
     /** @brief Gets the geometry as a serialized string. */
     QString getValue() const;
+    QString getExtraValue(const QString &name) const;
     /** @brief Updates the timecode display according to settings (frame number or hh:mm:ss:ff) */
     void updateTimecodeFormat();
     /** @brief Sets the size of the original clip. */
-    void setFrameSize(QPoint size);
+    void setFrameSize(const QPoint &size);
+    void addParameter(const QDomElement &elem);
+    void importKeyframes(const QString &data, int maximum);
+    int currentPosition() const;
 
 public slots:
     /** @brief Sets up the rect and the geometry object.
     * @param elem DomElement representing this effect parameter
     * @param minframe In point of the clip
     * @param maxframe Out point of the clip */
-    void setupParam(const QDomElement elem, int minframe, int maxframe);
+    void setupParam(const QDomElement &elem, int minframe, int maxframe);
     /** @brief Updates position of the local timeline to @param relTimelinePos.  */
     void slotSyncPosition(int relTimelinePos);
-    /** @brief Switches from normal monitor to monitor scene according to @param show. */
-    void slotShowScene(bool show = true);
+    void slotResetKeyframes();
+    void slotResetNextKeyframes();
+    void slotResetPreviousKeyframes();
+    void slotUpdateRange(int inPoint, int outPoint);
 
 private:
     Ui::GeometryWidget_UI m_ui;
@@ -78,9 +87,14 @@ private:
     bool m_isEffect;
     MonitorScene *m_scene;
     OnMonitorRectItem *m_rect;
+    OnMonitorPathItem *m_geomPath;
+    QGraphicsRectItem *m_previous;
     KeyframeHelper *m_timeline;
     /** Stores the different settings in the MLT geometry format. */
     Mlt::Geometry *m_geometry;
+    QStringList m_extraGeometryNames;
+    QStringList m_extraFactors;
+    QList <Mlt::Geometry *>m_extraGeometries;
     bool m_showScene;
     DragValue *m_spinX;
     DragValue *m_spinY;
@@ -88,7 +102,13 @@ private:
     DragValue *m_spinHeight;
     DragValue *m_spinSize;
     DragValue *m_opacity;
+    DragValue *m_rotateX;
+    DragValue *m_rotateY;
+    DragValue *m_rotateZ;
     QPoint m_frameSize;
+    bool m_showRotation;
+    /** @brief Update monitor rect with current width / height values. */
+    void updateMonitorGeometry();
 
 private slots:
     /** @brief Updates controls according to position.
@@ -96,6 +116,8 @@ private slots:
     * @param seek (optional, default = true) Whether to seek timleine & project monitor to pos
     * If pos = -1 (default) the value of m_timePos is used. */
     void slotPositionChanged(int pos = -1, bool seek = true);
+    /** @brief Seeking requested from timeline. */
+    void slotRequestSeek(int pos);
     /** @brief Updates settings after a keyframe was moved to @param pos. */
     void slotKeyframeMoved(int pos);
     /** @brief Adds a keyframe.
@@ -113,29 +135,27 @@ private slots:
     /** @brief Adds or deletes a keyframe depending on whether there is already a keyframe at the current position. */
     void slotAddDeleteKeyframe();
 
-    /** @brief Makes sure the monitor effect scene is only visible if the clip this geometry belongs to is visible.
-    * @param renderPos Postion of the Monitor / Timeline cursor */
-    void slotCheckMonitorPosition(int renderPos);
-
+    /** @brief Updates the Mlt::Geometry path object. */
+    void slotUpdatePath();
     /** @brief Updates the Mlt::Geometry object. */
     void slotUpdateGeometry();
     /** @brief Updates the spinBoxes according to the rect. */
     void slotUpdateProperties();
 
     /** @brief Sets the rect's x position to @param value. */
-    void slotSetX(int value);
+    void slotSetX(double value);
     /** @brief Sets the rect's y position to @param value. */
-    void slotSetY(int value);
+    void slotSetY(double value);
     /** @brief Sets the rect's width to @param value. */
-    void slotSetWidth(int value);
+    void slotSetWidth(double value);
     /** @brief Sets the rect's height to @param value. */
-    void slotSetHeight(int value);
+    void slotSetHeight(double value);
 
     /** @brief Resizes the rect by @param value (in perecent) compared to the frame size. */
     void slotResize(double value);
 
     /** @brief Sets the opacity to @param value. */
-    void slotSetOpacity(int value);
+    void slotSetOpacity(double value);
 
     /** @brief Moves the rect to the left frame border (x position = 0). */
     void slotMoveLeft();
@@ -155,11 +175,15 @@ private slots:
     void slotAdjustToFrameSize();
     void slotFitToWidth();
     void slotFitToHeight();
+    /** @brief Show / hide previous keyframe in monitor scene. */
+    void slotShowPreviousKeyFrame(bool show);
+    /** @brief Show / hide keyframe path in monitor scene. */
+    void slotShowPath(bool show);
 
 signals:
     void parameterChanged();
-    void checkMonitorPosition(int);
     void seekToPos(int);
+    void importClipKeyframes();
 };
 
 #endif