X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fabstractmonitor.cpp;h=eac998a99784ae16d177404a9011031ef7d0d1a5;hb=c3302003093710ee247ad84c0fe2ef3c579d417f;hp=02ed9a99ddc9304ade7c0e3035acac75f44c53d0;hpb=ddcc903a2d2363bec128c1effd7a4f6c1e820f82;p=kdenlive diff --git a/src/abstractmonitor.cpp b/src/abstractmonitor.cpp index 02ed9a99..eac998a9 100644 --- a/src/abstractmonitor.cpp +++ b/src/abstractmonitor.cpp @@ -26,22 +26,41 @@ #include #include +#include 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) : @@ -50,8 +69,6 @@ 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); @@ -94,7 +111,6 @@ void VideoContainer::mouseDoubleClickEvent(QMouseEvent * event) void VideoContainer::switchFullScreen() { // TODO: disable screensaver? - m_monitor->pause(); Qt::WindowFlags flags = windowFlags(); if (!isFullScreen()) { // Check if we ahave a multiple monitor setup @@ -142,5 +158,26 @@ void VideoContainer::switchFullScreen() 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"