X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fgeometrywidget.h;h=ca9b995c6c553971f966c2fe63fac8e17d1e7d39;hb=a0782da90d2e491e2f1ec9ad8a114883fb2e02b4;hp=79e5baf7a688b6627a478bca796a29837454e8f6;hpb=d92246401755b4c2001609c271823eeed4176c5d;p=kdenlive diff --git a/src/geometrywidget.h b/src/geometrywidget.h index 79e5baf7..ca9b995c 100644 --- a/src/geometrywidget.h +++ b/src/geometrywidget.h @@ -22,14 +22,19 @@ #define GEOMETRYWIDGET_H #include "ui_geometrywidget_ui.h" +#include "timecode.h" #include #include class QDomElement; -class QGraphicsRectItem; class Monitor; class MonitorScene; +class KeyframeHelper; +class TimecodeDisplay; +class OnMonitorRectItem; +class QGraphicsRectItem; +class DragValue; class GeometryWidget : public QWidget { @@ -37,12 +42,18 @@ class GeometryWidget : public QWidget public: /** @brief Sets up the UI and connects it. * @param monitor Project monitor + * @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 parent (optional) Parent widget */ - GeometryWidget(Monitor *monitor, int clipPos, bool isEffect, QWidget* parent = 0); + GeometryWidget(Monitor *monitor, Timecode timecode, int clipPos, bool isEffect, QWidget* parent = 0); virtual ~GeometryWidget(); /** @brief Gets the geometry as a serialized string. */ QString getValue() 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); public slots: /** @brief Sets up the rect and the geometry object. @@ -50,10 +61,15 @@ public slots: * @param minframe In point of the clip * @param maxframe Out point of the clip */ 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); private: Ui::GeometryWidget_UI m_ui; Monitor *m_monitor; + TimecodeDisplay *m_timePos; /** Position of the clip in timeline. */ int m_clipPos; /** In point of the clip (crop from start). */ @@ -62,13 +78,49 @@ private: int m_outPoint; bool m_isEffect; MonitorScene *m_scene; - QGraphicsRectItem *m_rect; + OnMonitorRectItem *m_rect; + QGraphicsRectItem *m_previous; + KeyframeHelper *m_timeline; + /** Stores the different settings in the MLT geometry format. */ Mlt::Geometry *m_geometry; + bool m_showScene; + DragValue *m_spinX; + DragValue *m_spinY; + DragValue *m_spinWidth; + DragValue *m_spinHeight; + DragValue *m_spinSize; + DragValue *m_opacity; + QPoint m_frameSize; + /** @brief Update monitor rect with current width / height values. */ + void updateMonitorGeometry(); private slots: + /** @brief Updates controls according to position. + * @param pos (optional) Position to update to + * @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 Updates settings after a keyframe was moved to @param pos. */ + void slotKeyframeMoved(int pos); + /** @brief Adds a keyframe. + * @param pos (optional) Position where the keyframe should be added + * If pos = -1 (default) the value of m_timePos is used. */ + void slotAddKeyframe(int pos = -1); + /** @brief Deletes a keyframe. + * @param pos (optional) Position of the keyframe which should be deleted + * If pos = -1 (default) the value of m_timePos is used. */ + void slotDeleteKeyframe(int pos = -1); + /** @brief Goes to the next keyframe or to the end if none is available. */ + void slotNextKeyframe(); + /** @brief Goes to the previous keyframe or to the beginning if none is available. */ + void slotPreviousKeyframe(); + /** @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 slotCheckPosition(int renderPos); + void slotCheckMonitorPosition(int renderPos); + /** @brief Updates the Mlt::Geometry object. */ void slotUpdateGeometry(); /** @brief Updates the spinBoxes according to the rect. */ @@ -84,7 +136,10 @@ private slots: void slotSetHeight(int value); /** @brief Resizes the rect by @param value (in perecent) compared to the frame size. */ - void slotResize(int value); + void slotResize(double value); + + /** @brief Sets the opacity to @param value. */ + void slotSetOpacity(int value); /** @brief Moves the rect to the left frame border (x position = 0). */ void slotMoveLeft(); @@ -99,9 +154,18 @@ private slots: /** @brief Moves the rect to the bottom frame border (y position = frame height - rect height). */ void slotMoveBottom(); + /** @brief Enables/Disables syncing with the timeline according to @param sync. */ + void slotSetSynchronize(bool sync); + void slotAdjustToFrameSize(); + void slotFitToWidth(); + void slotFitToHeight(); + /** @brief Show / hide previous keyframe in monitor scene. */ + void slotShowPreviousKeyFrame(bool show); + signals: void parameterChanged(); void checkMonitorPosition(int); + void seekToPos(int); }; #endif