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);
}
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);
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)));
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);
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);
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();
}
// 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;
}
}
// virtual
void Monitor::mouseMoveEvent(QMouseEvent *event)
{
- // kDebug() << "// DRAG STARTED, MOUSE MOVED: ";
if (!m_dragStarted || m_currentClip == NULL) return;
if ((event->pos() - m_DragStartPosition).manhattanLength()
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;
event->accept();
}
+void Monitor::mouseDoubleClickEvent(QMouseEvent * event)
+{
+ if (!KdenliveSettings::openglmonitors()) {
+ m_videoBox->switchFullScreen();
+ event->accept();
+ }
+}
+
void Monitor::slotMouseSeek(int eventDelta, bool fast)
{
if (fast) {
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;
void Monitor::stop()
{
- disconnect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int)));
if (render) render->stop();
}
{
if (!isVisible()) return;
if (render) render->start();
- connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int)));
}
void Monitor::refreshMonitor(bool visible)
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) {
return;
}
- if (clip != m_currentClip) {
+ if (clip != m_currentClip || forceUpdate) {
m_currentClip = clip;
if (m_currentClip) activateMonitor();
updateMarkers(clip);
{
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);
}
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()));
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
}
emit requestFrameForAnalysis(show);
if (show) {
m_effectWidget->getScene()->slotZoomFit();
- render->doRefresh();
}
+ m_videoBox->setEnabled(show);
+ render->doRefresh();
}
}
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)
// 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)
{
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)
// 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()
setUpdatesEnabled(true);
show();
#endif
+ setEnabled(true);
} else {
setUpdatesEnabled(false);
flags ^= (Qt::Window | Qt::SubWindow); //clear the flags...
setWindowFlags(flags);
setWindowState(windowState() ^ Qt::WindowFullScreen); // reset
setUpdatesEnabled(true);
+ setEnabled(false);
show();
}
m_monitor->pause();