From: Jean-Baptiste Mardelle Date: Mon, 14 Feb 2011 18:34:20 +0000 (+0000) Subject: Fix small memleaks, and add option to show previous keyframe on monitor scene X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=8e225862f4187b61d93f6fb58ff0bd2f998a0860;p=kdenlive Fix small memleaks, and add option to show previous keyframe on monitor scene svn path=/trunk/kdenlive/; revision=5408 --- diff --git a/src/cornerswidget.cpp b/src/cornerswidget.cpp index b588336d..1987b7ca 100644 --- a/src/cornerswidget.cpp +++ b/src/cornerswidget.cpp @@ -50,6 +50,7 @@ CornersWidget::CornersWidget(Monitor *monitor, QDomElement e, int minFrame, int m_scene->addItem(m_item); // TODO: Better Icons + edit->removeCustomControls(); edit->addCustomButton(KIcon("transform-move"), i18n("Show additional controls"), this, SLOT(slotShowControls(bool)), true, KdenliveSettings::onmonitoreffects_cornersshowcontrols()); edit->addCustomButton(KIcon("insert-horizontal-rule"), i18n("Show/Hide the lines connecting the corners"), this, SLOT(slotShowLines(bool)), diff --git a/src/geometrywidget.cpp b/src/geometrywidget.cpp index 6e385075..efb8613c 100644 --- a/src/geometrywidget.cpp +++ b/src/geometrywidget.cpp @@ -46,12 +46,15 @@ GeometryWidget::GeometryWidget(Monitor* monitor, Timecode timecode, int clipPos, m_outPoint(1), m_isEffect(isEffect), m_rect(NULL), + m_previous(NULL), m_geometry(NULL), m_showScene(true) { m_ui.setupUi(this); setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Maximum); MonitorEditWidget *edit = monitor->getEffectEdit(); + edit->removeCustomControls(); + edit->addCustomButton(KIcon("transform-crop"), i18n("Show previous keyframe"), this, SLOT(slotShowPreviousKeyFrame(bool)), true, KdenliveSettings::onmonitoreffects_geometryshowprevious()); edit->showVisibilityButton(true); m_scene = edit->getScene(); @@ -187,6 +190,8 @@ GeometryWidget::~GeometryWidget() delete m_spinHeight; delete m_opacity; m_scene->removeItem(m_rect); + if (m_rect) delete m_rect; + if (m_previous) delete m_previous; delete m_geometry; if (m_monitor) { m_monitor->getEffectEdit()->showVisibilityButton(false); @@ -194,6 +199,12 @@ GeometryWidget::~GeometryWidget() } } +void GeometryWidget::slotShowPreviousKeyFrame(bool show) +{ + KdenliveSettings::setOnmonitoreffects_geometryshowprevious(show); + slotPositionChanged(-1, false); +} + void GeometryWidget::updateTimecodeFormat() { m_timePos->slotUpdateTimeCodeFormat(); @@ -267,6 +278,7 @@ void GeometryWidget::slotPositionChanged(int pos, bool seek) m_timeline->blockSignals(false); Mlt::GeometryItem item; + Mlt::GeometryItem previousItem; if (m_geometry->fetch(&item, pos) || item.key() == false) { // no keyframe m_rect->setEnabled(false); @@ -282,6 +294,28 @@ void GeometryWidget::slotPositionChanged(int pos, bool seek) m_ui.buttonAddDelete->setIcon(KIcon("edit-delete")); m_ui.buttonAddDelete->setToolTip(i18n("Delete keyframe")); } + + if (KdenliveSettings::onmonitoreffects_geometryshowprevious() == false || m_geometry->prev_key(&previousItem, pos - 1) || previousItem.frame() == item.frame()) { + if (m_previous) { + m_scene->removeItem(m_previous); + } + } + else { + if (m_previous == NULL) { + m_previous = new QGraphicsRectItem(0, 0, previousItem.w(), previousItem.h()); + m_previous->setBrush(QColor(200, 200, 0, 20)); + m_previous->setPen(QPen(Qt::white, 0, Qt::DotLine)); + + m_previous->setPos(previousItem.x(), previousItem.y()); + m_previous->setZValue(-1); + m_previous->setEnabled(false); + } + else { + m_previous->setPos(previousItem.x(), previousItem.y()); + m_previous->setRect(0, 0, previousItem.w(), previousItem.h()); + } + m_scene->addItem(m_previous); + } m_rect->setPos(item.x(), item.y()); m_rect->setRect(0, 0, item.w(), item.h()); diff --git a/src/geometrywidget.h b/src/geometrywidget.h index 9425eacb..29598280 100644 --- a/src/geometrywidget.h +++ b/src/geometrywidget.h @@ -33,6 +33,7 @@ class MonitorScene; class KeyframeHelper; class TimecodeDisplay; class OnMonitorRectItem; +class QGraphicsRectItem; class DragValue; class GeometryWidget : public QWidget @@ -78,6 +79,7 @@ private: bool m_isEffect; MonitorScene *m_scene; OnMonitorRectItem *m_rect; + QGraphicsRectItem *m_previous; KeyframeHelper *m_timeline; /** Stores the different settings in the MLT geometry format. */ Mlt::Geometry *m_geometry; @@ -155,6 +157,8 @@ private slots: void slotAdjustToFrameSize(); void slotFitToWidth(); void slotFitToHeight(); + /** @brief Show / hide previous keyframe in monitor scene. */ + void slotShowPreviousKeyFrame(bool show); signals: void parameterChanged(); diff --git a/src/kdenlivesettings.kcfg b/src/kdenlivesettings.kcfg index e9ed358e..6be859b2 100644 --- a/src/kdenlivesettings.kcfg +++ b/src/kdenlivesettings.kcfg @@ -716,6 +716,11 @@ false + + + false + + false diff --git a/src/monitoreditwidget.cpp b/src/monitoreditwidget.cpp index 25df13dd..76109ba5 100644 --- a/src/monitoreditwidget.cpp +++ b/src/monitoreditwidget.cpp @@ -121,8 +121,10 @@ void MonitorEditWidget::addCustomButton(const QIcon& icon, const QString& text, void MonitorEditWidget::removeCustomControls() { QLayoutItem *child; - while ((child = m_customControlsLayout->takeAt(0)) != 0) + while ((child = m_customControlsLayout->takeAt(0)) != 0) { + if (child->widget()) delete child->widget(); delete child; + } } void MonitorEditWidget::slotSetDirectUpdate(bool directUpdate)