#include <QPaintEvent>
#include <QDesktopWidget>
+#include <QVBoxLayout>
AbstractMonitor::AbstractMonitor(Kdenlive::MONITORID id, MonitorManager *manager, QWidget *parent):
QWidget(parent),
+ videoSurface(NULL),
m_id(id),
m_monitorManager(manager)
-{}
+{
+ videoBox = new VideoContainer(this);
+}
+
+
+AbstractMonitor::~AbstractMonitor()
+{
+ delete videoSurface;
+}
+
+void AbstractMonitor::createVideoSurface()
+{
+ QVBoxLayout *lay = new QVBoxLayout;
+ lay->setContentsMargins(0, 0, 0, 0);
+ videoSurface = new VideoSurface;
+ lay->addWidget(videoSurface);
+ videoBox->setLayout(lay);
+}
bool AbstractMonitor::isActive() const
{
return m_monitorManager->isActive(m_id);
}
-bool AbstractMonitor::slotActivateMonitor()
+bool AbstractMonitor::slotActivateMonitor(bool forceRefresh)
{
- return m_monitorManager->activateMonitor(m_id);
+ return m_monitorManager->activateMonitor(m_id, forceRefresh);
}
VideoContainer::VideoContainer(AbstractMonitor* monitor, QWidget *parent) :
{
setFrameShape(QFrame::NoFrame);
setFocusPolicy(Qt::ClickFocus);
- setAttribute(Qt::WA_PaintOnScreen);
- setAttribute(Qt::WA_OpaquePaintEvent);
//setEnabled(false);
setContentsMargins(0, 0, 0, 0);
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
void VideoContainer::switchFullScreen()
{
// TODO: disable screensaver?
- m_monitor->pause();
Qt::WindowFlags flags = windowFlags();
if (!isFullScreen()) {
// Check if we ahave a multiple monitor setup
setEnabled(false);
show();
}
- m_monitor->unpause();
}
+
+VideoSurface::VideoSurface(QWidget* parent) :
+ QWidget(parent)
+{
+ // MonitorRefresh is used as container for the SDL display (it's window id is passed to SDL)
+ setAttribute(Qt::WA_PaintOnScreen);
+ setAttribute(Qt::WA_OpaquePaintEvent);
+ setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+ setAttribute(Qt::WA_NoSystemBackground);
+ //setUpdatesEnabled(false);
+}
+
+void VideoSurface::paintEvent(QPaintEvent *event)
+{
+ Q_UNUSED(event);
+ //WARNING: This might trigger unnecessary refreshes from MLT's producer, but without this,
+ // as soon as monitor is covered by a popup menu or another window, image is corrupted.
+ emit refreshMonitor();
+}
+
+
+#include "abstractmonitor.moc"