X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmonitor.cpp;h=3a28ac48de813b5a26c4bb41aa54426772d0f423;hb=287f00a4879532d41ebf831fe9a9c287901427cf;hp=d28bd94129a50e8abe361d3ba38e4162eb08e22e;hpb=dce5251b925c314f9d7bf400459bf96b5c1b2c75;p=kdenlive diff --git a/src/monitor.cpp b/src/monitor.cpp index d28bd941..3a28ac48 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -155,7 +155,7 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget createOpenGlWidget(m_videoBox, profile); monitorCreated = true; //m_glWidget->setFixedSize(width, height); -#elif defined (USE_OPEN_GL) +#elif defined(USE_OPENGL) if (KdenliveSettings::openglmonitors()) { monitorCreated = createOpenGlWidget(m_videoBox, profile); } @@ -169,7 +169,7 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget render = new Render(m_name, (int) m_monitorRefresh->winId(), profile, this); m_monitorRefresh->setRenderer(render); } -#if defined (USE_OPEN_GL) +#ifdef USE_OPENGL else if (m_glWidget) { lay->addWidget(m_glWidget); m_videoBox->setLayout(lay); @@ -180,6 +180,7 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget connect(m_ruler, SIGNAL(seekRenderer(int)), this, SLOT(slotSeek(int))); connect(render, SIGNAL(durationChanged(int)), this, SLOT(adjustRulerSize(int))); connect(render, SIGNAL(rendererStopped(int)), this, SLOT(rendererStopped(int))); + connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int))); if (name != "clip") { connect(render, SIGNAL(rendererPosition(int)), this, SIGNAL(renderPosition(int))); @@ -229,7 +230,7 @@ const QString Monitor::name() const return m_name; } -#if defined(Q_WS_MAC) || defined(USE_OPEN_GL) +#ifdef USE_OPENGL bool Monitor::createOpenGlWidget(QWidget *parent, const QString profile) { render = new Render(m_name, 0, profile, this); @@ -273,6 +274,8 @@ void Monitor::setupMenu(QMenu *goMenu, QAction *playZone, QAction *loopZone, QMe if (m_name == "clip") { m_contextMenu->addMenu(m_markerMenu); m_contextMenu->addAction(KIcon("document-save"), i18n("Save zone"), this, SLOT(slotSaveZone())); + QAction *extractZone = m_configMenu->addAction(KIcon("document-new"), i18n("Extract Zone"), this, SLOT(slotExtractCurrentZone())); + m_contextMenu->addAction(extractZone); } QAction *extractFrame = m_configMenu->addAction(KIcon("document-new"), i18n("Extract frame"), this, SLOT(slotExtractCurrentFrame())); m_contextMenu->addAction(extractFrame); @@ -446,7 +449,7 @@ void Monitor::slotSetZoneEnd() void Monitor::mousePressEvent(QMouseEvent * event) { if (event->button() != Qt::RightButton) { - if (m_videoBox->underMouse() && (!m_overlay || !m_overlay->underMouse())) { + if (m_videoBox->geometry().contains(event->pos()) && (!m_overlay || !m_overlay->underMouse())) { m_dragStarted = true; m_DragStartPosition = event->pos(); } @@ -470,11 +473,11 @@ void Monitor::slotSwitchFullScreen() // virtual void Monitor::mouseReleaseEvent(QMouseEvent * event) { - if (m_dragStarted) { - if (m_videoBox->underMouse() && (!m_effectWidget || !m_effectWidget->isVisible())) { + if (m_dragStarted && event->button() != Qt::RightButton) { + if (m_videoBox->geometry().contains(event->pos()) && (!m_effectWidget || !m_effectWidget->isVisible())) { if (isActive()) slotPlay(); else activateMonitor(); - } else QWidget::mouseReleaseEvent(event); + } //else event->ignore(); //QWidget::mouseReleaseEvent(event); m_dragStarted = false; } } @@ -482,7 +485,6 @@ void Monitor::mouseReleaseEvent(QMouseEvent * event) // virtual void Monitor::mouseMoveEvent(QMouseEvent *event) { - // kDebug() << "// DRAG STARTED, MOUSE MOVED: "; if (!m_dragStarted || m_currentClip == NULL) return; if ((event->pos() - m_DragStartPosition).manhattanLength() @@ -502,9 +504,9 @@ void Monitor::mouseMoveEvent(QMouseEvent *event) data.append(list.join(";").toUtf8()); mimeData->setData("kdenlive/clip", data); drag->setMimeData(mimeData); - QPixmap pix = m_currentClip->thumbnail(); + /*QPixmap pix = m_currentClip->thumbnail(); drag->setPixmap(pix); - drag->setHotSpot(QPoint(0, 50)); + drag->setHotSpot(QPoint(0, 50));*/ drag->start(Qt::MoveAction); //Qt::DropAction dropAction; @@ -544,6 +546,14 @@ void Monitor::wheelEvent(QWheelEvent * event) event->accept(); } +void Monitor::mouseDoubleClickEvent(QMouseEvent * event) +{ + if (!KdenliveSettings::openglmonitors()) { + m_videoBox->switchFullScreen(); + event->accept(); + } +} + void Monitor::slotMouseSeek(int eventDelta, bool fast) { if (fast) { @@ -565,6 +575,12 @@ void Monitor::slotSetThumbFrame() emit refreshClipThumbnail(m_currentClip->getId(), true); } +void Monitor::slotExtractCurrentZone() +{ + if (m_currentClip == NULL) return; + emit extractZone(m_currentClip->getId(), m_ruler->zone()); +} + void Monitor::slotExtractCurrentFrame() { QImage frame; @@ -731,7 +747,6 @@ void Monitor::adjustRulerSize(int length) void Monitor::stop() { - disconnect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int))); if (render) render->stop(); } @@ -739,7 +754,6 @@ void Monitor::start() { if (!isVisible()) return; if (render) render->start(); - connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int))); } void Monitor::refreshMonitor(bool visible) @@ -817,7 +831,7 @@ void Monitor::updateClipProducer(Mlt::Producer *prod) render->setProducer(prod, render->seekFramePosition()); } -void Monitor::slotSetClipProducer(DocClipBase *clip, QPoint zone, int position) +void Monitor::slotSetClipProducer(DocClipBase *clip, QPoint zone, bool forceUpdate, int position) { if (render == NULL) return; if (clip == NULL && m_currentClip != NULL) { @@ -828,7 +842,7 @@ void Monitor::slotSetClipProducer(DocClipBase *clip, QPoint zone, int position) return; } - if (clip != m_currentClip) { + if (clip != m_currentClip || forceUpdate) { m_currentClip = clip; if (m_currentClip) activateMonitor(); updateMarkers(clip); @@ -877,7 +891,10 @@ void Monitor::resetProfile(const QString &profile) { m_timePos->updateTimeCode(m_monitorManager->timecode()); if (render == NULL) return; - render->resetProfile(profile); + if (!render->hasProfile(profile)) { + activateMonitor(); + render->resetProfile(profile); + } if (m_effectWidget) m_effectWidget->resetProfile(render); } @@ -912,7 +929,7 @@ void Monitor::slotSwitchMonitorInfo(bool show) if (m_overlay) return; if (m_monitorRefresh == NULL) { // Using OpenGL display -#if defined(Q_WS_MAC) || defined(USE_OPEN_GL) +#ifdef USE_OPENGL if (m_glWidget->layout()) delete m_glWidget->layout(); m_overlay = new Overlay(); connect(m_overlay, SIGNAL(editMarker()), this, SLOT(slotEditMarker())); @@ -992,7 +1009,7 @@ void Monitor::slotEffectScene(bool show) if (m_monitorRefresh) { m_monitorRefresh->setVisible(!show); } else { -#if defined(Q_WS_MAC) || defined(USE_OPEN_GL) +#ifdef USE_OPENGL m_glWidget->setVisible(!show); #endif } @@ -1001,8 +1018,9 @@ void Monitor::slotEffectScene(bool show) emit requestFrameForAnalysis(show); if (show) { m_effectWidget->getScene()->slotZoomFit(); - render->doRefresh(); } + m_videoBox->setEnabled(show); + render->doRefresh(); } } @@ -1043,6 +1061,13 @@ AbstractRender *Monitor::abstractRender() return render; } +void Monitor::reloadProducer(const QString &id) +{ + if (!m_currentClip) return; + if (m_currentClip->getId() == id) + slotSetClipProducer(m_currentClip, m_currentClip->zone(), true); +} + MonitorRefresh::MonitorRefresh(QWidget* parent) : QWidget(parent) , m_renderer(NULL) @@ -1073,20 +1098,20 @@ Overlay::Overlay(QWidget* parent) : // virtual void Overlay::mouseReleaseEvent ( QMouseEvent * event ) { - event->accept(); + event->ignore(); } // virtual void Overlay::mousePressEvent( QMouseEvent * event ) { - event->accept(); + event->ignore(); } // virtual void Overlay::mouseDoubleClickEvent ( QMouseEvent * event ) { emit editMarker(); - event->accept(); + event->ignore(); } void Overlay::setOverlayText(const QString &text, bool isZone) @@ -1109,32 +1134,20 @@ VideoContainer::VideoContainer(Monitor* parent) : { setFrameShape(QFrame::NoFrame); setFocusPolicy(Qt::ClickFocus); + setEnabled(false); setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); } -// virtual -void VideoContainer::mousePressEvent(QMouseEvent * event) -{ - if (m_monitor->underMouse()) event->setAccepted(false); -} - // virtual void VideoContainer::mouseReleaseEvent(QMouseEvent * event) { - if (m_monitor->underMouse()) event->setAccepted(false); - else { + if (event->button() != Qt::RightButton) { if (m_monitor->isActive()) { m_monitor->slotPlay(); - event->accept(); } } } -// virtual -void VideoContainer::mouseMoveEvent(QMouseEvent *event) -{ - if (m_monitor->underMouse()) event->setAccepted(false); -} // virtual void VideoContainer::keyPressEvent(QKeyEvent *event) @@ -1149,19 +1162,15 @@ void VideoContainer::keyPressEvent(QKeyEvent *event) // virtual void VideoContainer::wheelEvent(QWheelEvent * event) { - if (m_monitor->underMouse()) event->setAccepted(false); - else { - m_monitor->slotMouseSeek(event->delta(), event->modifiers() == Qt::ControlModifier); - event->accept(); - } + m_monitor->slotMouseSeek(event->delta(), event->modifiers() == Qt::ControlModifier); + event->accept(); } void VideoContainer::mouseDoubleClickEvent(QMouseEvent * event) { - Q_UNUSED(event) - if (!KdenliveSettings::openglmonitors()) switchFullScreen(); + event->accept(); } void VideoContainer::switchFullScreen() @@ -1203,6 +1212,7 @@ void VideoContainer::switchFullScreen() setUpdatesEnabled(true); show(); #endif + setEnabled(true); } else { setUpdatesEnabled(false); flags ^= (Qt::Window | Qt::SubWindow); //clear the flags... @@ -1210,6 +1220,7 @@ void VideoContainer::switchFullScreen() setWindowFlags(flags); setWindowState(windowState() ^ Qt::WindowFullScreen); // reset setUpdatesEnabled(true); + setEnabled(false); show(); } m_monitor->pause();