X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmonitor.cpp;h=6e64e829e2b8bbfeb99a2f55c5712a65c7d6715d;hb=1fdcd9d3ebec13f4620342b5bdce7cb9cbd65f66;hp=20bd0060d9a3b3d256db3ef7f34f74a896e72622;hpb=c7100fb0a6a7f7e1632cc11b7a72adffbd42a511;p=kdenlive diff --git a/src/monitor.cpp b/src/monitor.cpp index 20bd0060..6e64e829 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -59,7 +59,6 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget m_selectedClip(NULL), m_loopClipTransition(true), m_editMarker(NULL) - { QVBoxLayout *layout = new QVBoxLayout; layout->setContentsMargins(0, 0, 0, 0); @@ -456,6 +455,13 @@ void Monitor::mousePressEvent(QMouseEvent * event) } } +void Monitor::resizeEvent(QResizeEvent *event) +{ + Q_UNUSED(event); + if (render && isVisible() && isActive()) render->doRefresh(); +} + + void Monitor::slotSwitchFullScreen() { m_videoBox->switchFullScreen(); @@ -588,9 +594,9 @@ bool Monitor::isActive() const return m_monitorManager->isActive(m_name); } -void Monitor::activateMonitor() +bool Monitor::activateMonitor() { - m_monitorManager->activateMonitor(m_name); + return m_monitorManager->activateMonitor(m_name); } void Monitor::setTimePos(const QString &pos) @@ -606,8 +612,8 @@ void Monitor::slotSeek() void Monitor::slotSeek(int pos) { - //activateMonitor(); if (render == NULL) return; + activateMonitor(); render->seekToFrame(pos); } @@ -733,15 +739,18 @@ void Monitor::stop() void Monitor::start() { - if (render && (m_name != "clip" || m_currentClip != NULL)) render->start(); + if (!isVisible()) return; + if (render) render->start(); connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int))); } void Monitor::refreshMonitor(bool visible) { if (visible && render) { - activateMonitor(); - render->doRefresh(); //askForRefresh(); + if (!activateMonitor()) { + // the monitor was already active, simply refreshClipThumbnail + render->doRefresh(); + } } } @@ -765,7 +774,7 @@ void Monitor::slotPlay() { if (render == NULL) return; activateMonitor(); - if (render->playSpeed() == 0) { + if (render->playSpeed() == 0.0) { m_playAction->setIcon(m_pauseIcon); render->switchPlay(true); } else { @@ -804,27 +813,39 @@ void Monitor::slotLoopClip() m_playAction->setIcon(m_pauseIcon); } -void Monitor::slotSetXml(DocClipBase *clip, QPoint zone, const int position) +void Monitor::updateClipProducer(Mlt::Producer *prod) +{ + if (render == NULL) return; + render->setProducer(prod, render->seekFramePosition()); +} + +void Monitor::slotSetClipProducer(DocClipBase *clip, QPoint zone, int position) { if (render == NULL) return; if (clip == NULL && m_currentClip != NULL) { + kDebug()<<"// SETTING NULL CLIP MONITOR"; m_currentClip = NULL; m_length = -1; render->setProducer(NULL, -1); return; } - if (m_currentClip != NULL || clip != NULL) { - activateMonitor(); - } + if (clip != m_currentClip) { m_currentClip = clip; + if (m_currentClip) activateMonitor(); updateMarkers(clip); - if (render->setProducer(clip->producer(), position) == -1) { + Mlt::Producer *prod = NULL; + if (clip) prod = clip->getCloneProducer(); + if (render->setProducer(prod, position) == -1) { // MLT CONSUMER is broken kDebug(QtWarningMsg) << "ERROR, Cannot start monitor"; } } else { - if (position != -1) render->seek(position); + if (m_currentClip) { + activateMonitor(); + if (position == -1) position = render->seekFramePosition(); + render->seek(position); + } } if (!zone.isNull()) { m_ruler->setZone(zone.x(), zone.y()); @@ -1040,11 +1061,6 @@ void MonitorRefresh::setRenderer(Render* render) m_renderer = render; } -void MonitorRefresh::paintEvent(QPaintEvent *event) -{ - Q_UNUSED(event) - if (m_renderer) m_renderer->doRefresh(); -} Overlay::Overlay(QWidget* parent) : QLabel(parent)