Has to be enabled in the settings dialog first, but you probably do not want to do this now as it cannot compete with our little red rectangle yet.
svn path=/trunk/kdenlive/; revision=4683
widgets/waveform_ui.ui
widgets/rgbparade_ui.ui
widgets/histogram_ui.ui
+ widgets/geometrywidget_ui.ui
)
set(kdenlive_SRCS
razorgroupcommand.cpp
colorpickerwidget.cpp
choosecolorwidget.cpp
+ monitorscene.cpp
+ geometrywidget.cpp
)
#include "kis_curve_widget.h"
#include "kis_cubic_curve.h"
#include "choosecolorwidget.h"
+#include "geometrywidget.h"
#include <KDebug>
#include <KLocale>
QMap<QString, QImage> EffectStackEdit::iconCache;
-EffectStackEdit::EffectStackEdit(QWidget *parent) :
+EffectStackEdit::EffectStackEdit(Monitor *monitor, QWidget *parent) :
QScrollArea(parent),
m_in(0),
m_out(0),
m_frameSize(QPoint()),
- m_keyframeEditor(NULL)
+ m_keyframeEditor(NULL),
+ m_monitor(monitor)
{
m_baseWidget = new QWidget(this);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
QString type = pa.attributes().namedItem("type").nodeValue();
QString paramName = i18n(na.toElement().text().toUtf8().data());
- if (type == "geometry") {
+ if (type == "geometry" && !KdenliveSettings::on_monitor_effects()) {
Geometryval *geom = ((Geometryval*)m_valueItems[paramName+"geometry"]);
geom->updateTimecodeFormat();
break;
m_valueItems[paramName+"complex"] = pl;
connect(pl, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
} else if (type == "geometry") {
- Geometryval *geo = new Geometryval(m_profile, m_timecode, m_frameSize, pos);
- if (minFrame == maxFrame)
- geo->setupParam(pa, m_in, m_out);
- else
- geo->setupParam(pa, minFrame, maxFrame);
- m_vbox->addWidget(geo);
- m_valueItems[paramName+"geometry"] = geo;
- connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
- connect(geo, SIGNAL(seekToPos(int)), this, SIGNAL(seekTimeline(int)));
+ if (KdenliveSettings::on_monitor_effects()) {
+ GeometryWidget *geometry = new GeometryWidget(m_monitor, pos, this);
+ if (minFrame == maxFrame)
+ geometry->setupParam(pa, m_in, m_out);
+ else
+ geometry->setupParam(pa, minFrame, maxFrame);
+ m_vbox->addWidget(geometry);
+ m_valueItems[paramName+"geometry"] = geometry;
+ connect(geometry, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
+ } else {
+ Geometryval *geo = new Geometryval(m_profile, m_timecode, m_frameSize, pos);
+ if (minFrame == maxFrame)
+ geo->setupParam(pa, m_in, m_out);
+ else
+ geo->setupParam(pa, minFrame, maxFrame);
+ m_vbox->addWidget(geo);
+ m_valueItems[paramName+"geometry"] = geo;
+ connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
+ connect(geo, SIGNAL(seekToPos(int)), this, SIGNAL(seekTimeline(int)));
+ }
} else if (type == "keyframe" || type == "simplekeyframe") {
// keyframe editor widget
kDebug() << "min: " << m_in << ", MAX: " << m_out;
ComplexParameter *complex = ((ComplexParameter*)m_valueItems.value(paramName));
namenode.item(i) = complex->getParamDesc();
} else if (type == "geometry") {
- Geometryval *geom = ((Geometryval*)m_valueItems.value(paramName));
- namenode.item(i).toElement().setAttribute("value", geom->getValue());
+ if (KdenliveSettings::on_monitor_effects()) {
+ GeometryWidget *geometry = ((GeometryWidget*)m_valueItems.value(paramName));
+ namenode.item(i).toElement().setAttribute("value", geometry->getValue());
+ } else {
+ Geometryval *geom = ((Geometryval*)m_valueItems.value(paramName));
+ namenode.item(i).toElement().setAttribute("value", geom->getValue());
+ }
} else if (type == "position") {
PositionEdit *pedit = ((PositionEdit*)m_valueItems.value(paramName));
int pos = pedit->getPosition();
};
class QFrame;
+class Monitor;
class EffectStackEdit : public QScrollArea
{
Q_OBJECT
public:
- EffectStackEdit(QWidget *parent);
+ EffectStackEdit(Monitor *monitor, QWidget *parent = 0);
~EffectStackEdit();
void updateProjectFormat(MltVideoProfile profile, Timecode t);
static QMap<QString, QImage> iconCache;
int m_out;
QPoint m_frameSize;
KeyframeEdit *m_keyframeEditor;
+ Monitor *m_monitor;
public slots:
/** \brief Called when an effect is selected, builds the UI for this effect */
#include <QInputDialog>
-EffectStackView::EffectStackView(QWidget *parent) :
+EffectStackView::EffectStackView(Monitor *monitor, QWidget *parent) :
QWidget(parent)
{
m_ui.setupUi(this);
QVBoxLayout *vbox1 = new QVBoxLayout(m_ui.frame);
- m_effectedit = new EffectStackEdit(m_ui.frame);
+ m_effectedit = new EffectStackEdit(monitor, m_ui.frame);
vbox1->setContentsMargins(0, 0, 0, 0);
vbox1->setSpacing(0);
vbox1->addWidget(m_effectedit);
class EffectsList;
class ClipItem;
class MltVideoProfile;
+class Monitor;
class EffectStackView : public QWidget
{
Q_OBJECT
public:
- EffectStackView(QWidget *parent = 0);
+ EffectStackView(Monitor *monitor, QWidget *parent = 0);
virtual ~EffectStackView();
/** @brief Raises @param dock if a clip is loaded. */
--- /dev/null
+/***************************************************************************
+ * Copyright (C) 2010 by Till Theato (root@ttill.de) *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+
+#include "geometrywidget.h"
+#include "monitor.h"
+#include "renderer.h"
+#include "monitorscene.h"
+
+#include <QGraphicsRectItem>
+
+GeometryWidget::GeometryWidget(Monitor* monitor, int clipPos, QWidget* parent ):
+ QWidget(parent),
+ m_monitor(monitor),
+ m_rect(NULL),
+ m_geometry(NULL),
+ m_clipPos(clipPos),
+ m_inPoint(0),
+ m_outPoint(1)
+{
+ m_ui.setupUi(this);
+ m_scene = monitor->getEffectScene();
+ connect(m_scene, SIGNAL(actionFinished()), this, SLOT(slotUpdateGeometry()));
+ connect(m_scene, SIGNAL(actionFinished()), this, SLOT(slotUpdateProperties()));
+
+ connect(m_monitor->render, SIGNAL(rendererPosition(int)), this, SLOT(slotCheckPosition(int)));
+
+ connect(m_ui.spinX, SIGNAL(valueChanged(int)), this, SLOT(slotSetX(int)));
+ connect(m_ui.spinY, SIGNAL(valueChanged(int)), this, SLOT(slotSetY(int)));
+ connect(m_ui.spinWidth, SIGNAL(valueChanged(int)), this, SLOT(slotSetWidth(int)));
+ connect(m_ui.spinHeight, SIGNAL(valueChanged(int)), this, SLOT(slotSetHeight(int)));
+}
+
+GeometryWidget::~GeometryWidget()
+{
+ m_monitor->slotEffectScene(false);
+ m_scene->disconnect(this);
+ delete m_rect;
+ delete m_geometry;
+}
+
+QString GeometryWidget::getValue() const
+{
+ return m_geometry->serialise();
+}
+
+void GeometryWidget::setupParam(const QDomElement elem, int minframe, int maxframe)
+{
+ m_inPoint = minframe;
+ m_outPoint = maxframe;
+ QString value = elem.attribute("value");
+
+ char *tmp = (char *) qstrdup(value.toUtf8().data());
+ if (m_geometry)
+ m_geometry->parse(tmp, maxframe - minframe, m_monitor->render->renderWidth(), m_monitor->render->renderHeight());
+ else
+ m_geometry = new Mlt::Geometry(tmp, maxframe - minframe, m_monitor->render->renderWidth(), m_monitor->render->renderHeight());
+ delete[] tmp;
+
+ Mlt::GeometryItem item;
+
+ m_geometry->fetch(&item, 0);
+ delete m_rect;
+ m_rect = new QGraphicsRectItem(QRectF(0, 0, item.w(), item.h()));
+ m_rect->setPos(item.x(), item.y());
+ m_rect->setZValue(0);
+ m_rect->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+
+ QPen framepen(Qt::DotLine);
+ framepen.setColor(Qt::yellow);
+ m_rect->setPen(framepen);
+ m_rect->setBrush(Qt::transparent);
+ m_scene->addItem(m_rect);
+
+ slotUpdateProperties();
+ slotCheckPosition(m_monitor->render->seekFramePosition());
+}
+
+void GeometryWidget::slotCheckPosition(int renderPos)
+{
+ if (renderPos >= m_clipPos && renderPos <= m_clipPos + m_outPoint - m_inPoint)
+ m_monitor->slotEffectScene(true);
+ else
+ m_monitor->slotEffectScene(false);
+}
+
+void GeometryWidget::slotUpdateGeometry()
+{
+ Mlt::GeometryItem item;
+ m_geometry->next_key(&item, 0);
+
+ QRectF rectSize = m_rect->rect().normalized();
+ QPointF rectPos = m_rect->pos();
+ item.x(rectPos.x());
+ item.y(rectPos.y());
+ item.w(rectSize.width());
+ item.h(rectSize.height());
+ m_geometry->insert(item);
+ emit parameterChanged();
+}
+
+void GeometryWidget::slotUpdateProperties()
+{
+ QRectF rectSize = m_rect->rect().normalized();
+ QPointF rectPos = m_rect->pos();
+
+ m_ui.spinX->blockSignals(true);
+ m_ui.spinY->blockSignals(true);
+ m_ui.spinWidth->blockSignals(true);
+ m_ui.spinHeight->blockSignals(true);
+
+ m_ui.spinX->setValue(rectPos.x());
+ m_ui.spinY->setValue(rectPos.y());
+ m_ui.spinWidth->setValue(rectSize.width());
+ m_ui.spinHeight->setValue(rectSize.height());
+
+ m_ui.spinX->blockSignals(false);
+ m_ui.spinY->blockSignals(false);
+ m_ui.spinWidth->blockSignals(false);
+ m_ui.spinHeight->blockSignals(false);
+}
+
+void GeometryWidget::slotSetX(int value)
+{
+ m_rect->setPos(value, m_ui.spinY->value());
+ slotUpdateGeometry();
+}
+
+void GeometryWidget::slotSetY(int value)
+{
+ m_rect->setPos(m_ui.spinX->value(), value);
+ slotUpdateGeometry();
+}
+
+void GeometryWidget::slotSetWidth(int value)
+{
+ m_rect->setRect(0, 0, value, m_ui.spinHeight->value());
+ slotUpdateGeometry();
+}
+
+void GeometryWidget::slotSetHeight(int value)
+{
+ m_rect->setRect(0, 0, m_ui.spinWidth->value(), value);
+ slotUpdateGeometry();
+}
+
+#include "geometrywidget.moc"
--- /dev/null
+/***************************************************************************
+ * Copyright (C) 2010 by Till Theato (root@ttill.de) *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+
+#ifndef GEOMETRYWIDGET_H
+#define GEOMETRYWIDGET_H
+
+#include "ui_geometrywidget_ui.h"
+#include <mlt++/Mlt.h>
+
+#include <QWidget>
+
+class QDomElement;
+class QGraphicsRectItem;
+class Monitor;
+class MonitorScene;
+
+class GeometryWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ GeometryWidget(Monitor *monitor, int clipPos = 0, QWidget* parent = 0);
+ virtual ~GeometryWidget();
+ QString getValue() const;
+
+public slots:
+ void setupParam(const QDomElement elem, int minframe, int maxframe);
+
+private:
+ Ui::GeometryWidget_UI m_ui;
+ int m_clipPos;
+ int m_inPoint;
+ int m_outPoint;
+ Monitor *m_monitor;
+ MonitorScene *m_scene;
+ QGraphicsRectItem *m_rect;
+ Mlt::Geometry *m_geometry;
+
+private slots:
+ void slotCheckPosition(int renderPos);
+ void slotUpdateGeometry();
+ void slotUpdateProperties();
+ void slotSetX(int value);
+ void slotSetY(int value);
+ void slotSetWidth(int value);
+ void slotSetHeight(int value);
+
+signals:
+ void parameterChanged();
+};
+
+#endif
<label>Default title clip duration.</label>
<default>00:00:05:00</default>
</entry>
+
+ <entry name="on_monitor_effects" type="Bool">
+ <label>Use on-monitor effects (Warning: experimental).</label>
+ <default>false</default>
+ </entry>
</group>
<group name="project">
m_projectListDock->setWidget(m_projectList);
addDockWidget(Qt::TopDockWidgetArea, m_projectListDock);
- m_effectStackDock = new QDockWidget(i18n("Effect Stack"), this);
- m_effectStackDock->setObjectName("effect_stack");
- m_effectStack = new EffectStackView(this);
- m_effectStackDock->setWidget(m_effectStack);
- addDockWidget(Qt::TopDockWidgetArea, m_effectStackDock);
-
- m_transitionConfigDock = new QDockWidget(i18n("Transition"), this);
- m_transitionConfigDock->setObjectName("transition");
- m_transitionConfig = new TransitionSettings(this);
- m_transitionConfigDock->setWidget(m_transitionConfig);
- addDockWidget(Qt::TopDockWidgetArea, m_transitionConfigDock);
-
m_clipMonitorDock = new QDockWidget(i18n("Clip Monitor"), this);
m_clipMonitorDock->setObjectName("clip_monitor");
m_clipMonitor = new Monitor("clip", m_monitorManager, QString(), this);
connect(m_recMonitor, SIGNAL(showConfigDialog(int, int)), this, SLOT(slotPreferences(int, int)));
#endif
+ m_effectStackDock = new QDockWidget(i18n("Effect Stack"), this);
+ m_effectStackDock->setObjectName("effect_stack");
+ m_effectStack = new EffectStackView(m_projectMonitor, this);
+ m_effectStackDock->setWidget(m_effectStack);
+ addDockWidget(Qt::TopDockWidgetArea, m_effectStackDock);
+
+ m_transitionConfigDock = new QDockWidget(i18n("Transition"), this);
+ m_transitionConfigDock->setObjectName("transition");
+ m_transitionConfig = new TransitionSettings(m_projectMonitor, this);
+ m_transitionConfigDock->setWidget(m_transitionConfig);
+ addDockWidget(Qt::TopDockWidgetArea, m_transitionConfigDock);
+
m_effectListDock = new QDockWidget(i18n("Effect List"), this);
m_effectListDock->setObjectName("effect_list");
m_effectList = new EffectsListView();
#include "monitormanager.h"
#include "smallruler.h"
#include "docclipbase.h"
+#include "monitorscene.h"
#include "kdenlivesettings.h"
#include <KDebug>
#include <QDesktopWidget>
#include <QLabel>
#include <QIntValidator>
+#include <QVBoxLayout>
+#include <QGraphicsView>
+#include <QGraphicsPixmapItem>
Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget *parent) :
#ifndef Q_WS_MAC
m_monitorRefresh->show();
#endif
+
+ if (name == "project") {
+ m_effectScene = new MonitorScene(render);
+ m_effectView = new QGraphicsView(m_effectScene, m_ui.video_frame);
+ rendererBox->addWidget(m_effectView);
+ m_effectScene->setUp();
+ m_effectView->hide();
+ }
+
kDebug() << "/////// BUILDING MONITOR, ID: " << m_ui.video_frame->winId();
}
delete m_timePos;
delete m_overlay;
delete m_monitorRefresh;
+ delete m_effectView;
+ delete m_effectScene;
delete render;
}
void Monitor::mousePressEvent(QMouseEvent * event)
{
if (event->button() != Qt::RightButton) {
- if (m_ui.video_frame->underMouse()) {
+ if (m_ui.video_frame->underMouse() && !m_effectView->isVisible()) {
m_dragStarted = true;
m_DragStartPosition = event->pos();
}
void Monitor::mouseReleaseEvent(QMouseEvent * event)
{
if (m_dragStarted) {
- if (m_ui.video_frame->underMouse()) {
+ if (m_ui.video_frame->underMouse() && !m_effectView->isVisible()) {
if (isActive()) slotPlay();
else activateMonitor();
} else QWidget::mouseReleaseEvent(event);
return result;
}
+void Monitor::slotEffectScene(bool show)
+{
+ if (m_name == "project") {
+ m_monitorRefresh->setVisible(!show);
+ m_effectView->setVisible(show);
+ if (show)
+ m_effectScene->slotUpdateBackground();
+ }
+}
+
+MonitorScene * Monitor::getEffectScene()
+{
+ return m_effectScene;
+}
+
MonitorRefresh::MonitorRefresh(QWidget* parent) : \
QWidget(parent),
m_renderer(NULL)
m_renderer = render;
}
-void MonitorRefresh::paintEvent(QPaintEvent * /*event*/)
+void MonitorRefresh::paintEvent(QPaintEvent *event)
{
+ Q_UNUSED(event);
if (m_renderer) m_renderer->doRefresh();
}
class Render;
class SmallRuler;
class DocClipBase;
+class MonitorScene;
+class QGraphicsView;
+class QGraphicsPixmapItem;
class MonitorRefresh : public QWidget
{
Q_OBJECT
public:
- MonitorRefresh(QWidget* parent);
- virtual void paintEvent(QPaintEvent * event);
+ MonitorRefresh(QWidget *parent = 0);
+ virtual void paintEvent(QPaintEvent *event);
void setRenderer(Render* render);
private:
void checkOverlay();
void updateTimecodeFormat();
void updateMarkers(DocClipBase *source);
+ MonitorScene *getEffectScene();
protected:
virtual void mousePressEvent(QMouseEvent * event);
QMenu *m_playMenu;
QMenu *m_markerMenu;
QPoint m_DragStartPosition;
+ MonitorScene *m_effectScene;
+ QGraphicsView *m_effectView;
#ifdef Q_WS_MAC
VideoGLWidget *m_glWidget;
#endif
void adjustRulerSize(int length);
void setTimePos(const QString &pos);
QStringList getZoneInfo() const;
+ void slotEffectScene(bool show = true);
signals:
void renderPosition(int);
--- /dev/null
+/***************************************************************************
+ * Copyright (C) 2010 by Till Theato (root@ttill.de) *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+
+#include "monitorscene.h"
+#include "renderer.h"
+
+#include <QGraphicsView>
+#include <QGraphicsPixmapItem>
+#include <QtCore>
+
+MonitorScene::MonitorScene(Render *renderer, QObject* parent) :
+ QGraphicsScene(parent),
+ m_renderer(renderer)
+{
+}
+
+void MonitorScene::setUp()
+{
+ setBackgroundBrush(QBrush(QColor(0, 0, 255)));
+
+ QPen framepen(Qt::DotLine);
+ framepen.setColor(Qt::red);
+
+ m_frameBorder = new QGraphicsRectItem(QRectF(0, 0, m_renderer->renderWidth(), m_renderer->renderHeight()));
+ m_frameBorder->setPen(framepen);
+ m_frameBorder->setZValue(-9);
+ m_frameBorder->setBrush(Qt::transparent);
+ m_frameBorder->setFlags(0);
+ addItem(m_frameBorder);
+
+ m_lastUpdate.start();
+ m_background = new QGraphicsPixmapItem();
+ m_background->setZValue(-10);
+ m_background->setFlags(0);
+ QPixmap bg(m_renderer->renderWidth(), m_renderer->renderHeight());
+ bg.fill();
+ m_background->setPixmap(bg);
+ addItem(m_background);
+
+ connect(m_renderer, SIGNAL(rendererPosition(int)), this, SLOT(slotUpdateBackground()));
+ connect(m_renderer, SIGNAL(frameUpdated(int)), this, SLOT(slotUpdateBackground()));
+ slotUpdateBackground();
+ views().at(0)->fitInView(m_frameBorder, Qt::KeepAspectRatio);
+ views().at(0)->centerOn(m_frameBorder);
+}
+
+void MonitorScene::slotUpdateBackground()
+{
+ if (views().count() > 0 && views().at(0)->isVisible()) {
+ if (m_lastUpdate.elapsed() > 200) {
+ m_background->setPixmap(QPixmap::fromImage(m_renderer->extractFrame(m_renderer->seekFramePosition())));
+ views().at(0)->fitInView(m_frameBorder, Qt::KeepAspectRatio);
+ views().at(0)->centerOn(m_frameBorder);
+ m_lastUpdate.start();
+ }
+ }
+}
+
+void MonitorScene::mousePressEvent(QGraphicsSceneMouseEvent* event)
+{
+ QGraphicsScene::mousePressEvent(event);
+}
+
+
+void MonitorScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
+{
+ QGraphicsScene::mouseReleaseEvent(event);
+ emit actionFinished();
+}
+
+#include "monitorscene.moc"
--- /dev/null
+/***************************************************************************
+ * Copyright (C) 2010 by Till Theato (root@ttill.de) *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+
+#ifndef MONITORSCENE_H
+#define MONITORSCENE_H
+
+#include <QGraphicsScene>
+#include <QTime>
+
+class QGraphicsPixmapItem;
+class Render;
+
+class MonitorScene : public QGraphicsScene
+{
+ Q_OBJECT
+public:
+ MonitorScene(Render *renderer, QObject* parent = 0);
+ void setUp();
+
+protected:
+ virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+
+public slots:
+ void slotUpdateBackground();
+
+private:
+ Render *m_renderer;
+ QGraphicsPixmapItem *m_background;
+ QGraphicsRectItem *m_frameBorder;
+ QTime m_lastUpdate;
+signals:
+ void actionFinished();
+};
+
+#endif
#include <KDebug>
-TransitionSettings::TransitionSettings(QWidget* parent) :
+TransitionSettings::TransitionSettings(Monitor *monitor, QWidget* parent) :
QWidget(parent),
m_usedTransition(NULL),
m_autoTrackTransition(0)
{
setupUi(this);
QVBoxLayout *vbox1 = new QVBoxLayout(frame);
- m_effectEdit = new EffectStackEdit(frame);
+ m_effectEdit = new EffectStackEdit(monitor, frame);
vbox1->setContentsMargins(0, 0, 0, 0);
vbox1->setSpacing(0);
vbox1->addWidget(m_effectEdit);
class Transition;
class EffectsList;
class EffectStackEdit;
+class Monitor;
class TransitionSettings : public QWidget, public Ui::TransitionSettings_UI
{
Q_OBJECT
public:
- TransitionSettings(QWidget* parent = 0);
+ TransitionSettings(Monitor *monitor, QWidget* parent = 0);
void raiseWindow(QWidget*);
void updateProjectFormat(MltVideoProfile profile, Timecode t, const QList <TrackInfo> info);
void updateTimecodeFormat();
</property>
</widget>
</item>
- <item row="4" column="0" colspan="3">
+ <item row="5" column="0" colspan="3">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Default Durations</string>
</layout>
</widget>
</item>
- <item row="5" column="0" colspan="3">
+ <item row="6" column="0" colspan="3">
<spacer>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
+ <item row="4" column="0">
+ <widget class="QCheckBox" name="kcfg_on_monitor_effects">
+ <property name="text">
+ <string>Use on-monitor effects (Warning: experimental)</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
<customwidgets>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>GeometryWidget_UI</class>
+ <widget class="QWidget" name="GeometryWidget_UI">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>256</width>
+ <height>120</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="1">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>X</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QSpinBox" name="spinX">
+ <property name="minimum">
+ <number>-10000</number>
+ </property>
+ <property name="maximum">
+ <number>10000</number>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Y</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Width</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>Height</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QSpinBox" name="spinY">
+ <property name="minimum">
+ <number>-10000</number>
+ </property>
+ <property name="maximum">
+ <number>10000</number>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QSpinBox" name="spinWidth">
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>10000</number>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="QSpinBox" name="spinHeight">
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>10000</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>