]> git.sesse.net Git - kdenlive/blobdiff - src/monitor.cpp
Fix title duration, keeping compatibility with Kdenlive 0.92
[kdenlive] / src / monitor.cpp
index ccdce950d04d512769f24e3f0c57e74002c80f26..d0f24fcf284a8444f049f7444fc96e54cad168d2 100644 (file)
@@ -52,7 +52,7 @@ Monitor::Monitor(Kdenlive::MONITORID id, MonitorManager *manager, QString profil
     m_currentClip(NULL),
     m_overlay(NULL),
     m_scale(1),
-    m_length(0),
+    m_length(2),
     m_dragStarted(false),
     m_contextMenu(NULL),
     m_effectWidget(NULL),
@@ -202,7 +202,7 @@ Monitor::Monitor(Kdenlive::MONITORID id, MonitorManager *manager, QString profil
     m_toolbar->addWidget(spacer);
     m_timePos = new TimecodeDisplay(m_monitorManager->timecode(), this);
     m_toolbar->addWidget(m_timePos);
-    connect(m_timePos, SIGNAL(editingFinished()), this, SLOT(slotSeek()));
+    connect(m_timePos, SIGNAL(timeCodeEditingFinished()), this, SLOT(slotSeek()));
     m_toolbar->setMaximumHeight(s * 1.5);
     layout->addWidget(m_toolbar);
 }
@@ -226,6 +226,7 @@ QWidget *Monitor::container()
 bool Monitor::createOpenGlWidget(QWidget *parent, const QString profile)
 {
     render = new Render(id(), 0, profile, this);
+    kDebug()<<"+++++++++++++\nCREATED OPENGL WIDG\n++++++++++++++";
     m_glWidget = new VideoGLWidget(parent);
     if (m_glWidget == NULL) {
         // Creation failed, we are in trouble...
@@ -366,8 +367,8 @@ void Monitor::updateMarkers(DocClipBase *source)
                 QAction *go = m_markerMenu->addAction(position);
                 go->setData(pos);
             }
-            m_ruler->setMarkers(marks);
-        } else m_ruler->setMarkers(QList <int>());
+        }
+       m_ruler->setMarkers(markers);
         m_markerMenu->setEnabled(!m_markerMenu->isEmpty());
     }
 }
@@ -417,24 +418,24 @@ GenTime Monitor::getSnapForPos(bool previous)
 void Monitor::slotZoneMoved(int start, int end)
 {
     m_ruler->setZone(start, end);
-    checkOverlay();
     setClipZone(m_ruler->zone());
+    checkOverlay();
 }
 
 void Monitor::slotSetZoneStart()
 {
     m_ruler->setZoneStart();
     emit zoneUpdated(m_ruler->zone());
-    checkOverlay();
     setClipZone(m_ruler->zone());
+    checkOverlay();
 }
 
 void Monitor::slotSetZoneEnd()
 {
     m_ruler->setZoneEnd();
     emit zoneUpdated(m_ruler->zone());
-    checkOverlay();
     setClipZone(m_ruler->zone());
+    checkOverlay();
 }
 
 // virtual
@@ -469,8 +470,9 @@ void Monitor::mouseReleaseEvent(QMouseEvent * event)
             if (isActive()) slotPlay();
             else slotActivateMonitor();
         } //else event->ignore(); //QWidget::mouseReleaseEvent(event);
-        m_dragStarted = false;
     }
+    m_dragStarted = false;
+    event->accept();
 }
 
 // virtual
@@ -499,9 +501,9 @@ void Monitor::mouseMoveEvent(QMouseEvent *event)
         drag->setPixmap(pix);
         drag->setHotSpot(QPoint(0, 50));*/
         drag->start(Qt::MoveAction);
-
-        //Qt::DropAction dropAction;
-        //dropAction = drag->start(Qt::CopyAction | Qt::MoveAction);
+       /*Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction);
+        Qt::DropAction dropAction;
+        dropAction = drag->start(Qt::CopyAction | Qt::MoveAction);*/
 
         //Qt::DropAction dropAction = drag->exec();
 
@@ -509,6 +511,7 @@ void Monitor::mouseMoveEvent(QMouseEvent *event)
     //event->accept();
 }
 
+
 /*void Monitor::dragMoveEvent(QDragMoveEvent * event) {
     event->setDropAction(Qt::IgnoreAction);
     event->setDropAction(Qt::MoveAction);
@@ -620,7 +623,7 @@ void Monitor::checkOverlay()
 {
     if (m_overlay == NULL) return;
     QString overlayText;
-    int pos = render->seekFramePosition();
+    int pos = m_timePos->getValue();//render->seekFramePosition();
     QPoint zone = m_ruler->zone();
     if (pos == zone.x())
         overlayText = i18n("In Point");
@@ -672,8 +675,20 @@ void Monitor::slotRewind(double speed)
     slotActivateMonitor();
     if (speed == 0) {
         double currentspeed = render->playSpeed();
-        if (currentspeed >= 0) render->play(-2);
-        else render->play(currentspeed * 2);
+       if (currentspeed >= 0) render->play(-1);
+       else switch((int) currentspeed) {
+           case -1:
+               render->play(-2);
+               break;
+           case -2:
+               render->play(-3);
+               break;
+           case -3:
+               render->play(-5);
+               break;
+           default:
+               render->play(-8);
+       }
     } else render->play(speed);
     //m_playAction->setChecked(true);
     m_playAction->setIcon(m_pauseIcon);
@@ -684,8 +699,20 @@ void Monitor::slotForward(double speed)
     slotActivateMonitor();
     if (speed == 0) {
         double currentspeed = render->playSpeed();
-        if (currentspeed <= 1) render->play(2);
-        else render->play(currentspeed * 2);
+       if (currentspeed <= 0) render->play(1);
+        else switch((int) currentspeed) {
+           case 1:
+               render->play(2);
+               break;
+           case 2:
+               render->play(3);
+               break;
+           case 3:
+               render->play(5);
+               break;
+           default:
+               render->play(8);
+       }
     } else render->play(speed);
     //m_playAction->setChecked(true);
     m_playAction->setIcon(m_pauseIcon);
@@ -710,16 +737,16 @@ void Monitor::slotForwardOneFrame(int diff)
 void Monitor::seekCursor(int pos)
 {
     if (m_ruler->slotNewValue(pos)) {
-        checkOverlay();
         m_timePos->setValue(pos);
+       checkOverlay();
     }
 }
 
 void Monitor::rendererStopped(int pos)
 {
     if (m_ruler->slotNewValue(pos)) {
-        checkOverlay();
         m_timePos->setValue(pos);
+       checkOverlay();
     }
     m_playAction->setIcon(m_playIcon);
 }
@@ -742,7 +769,7 @@ void Monitor::stop()
 void Monitor::start()
 {
     if (!isVisible() || !isActive()) return;
-    if (render) render->doRefresh();// start();
+    if (render) render->startConsumer();
 }
 
 void Monitor::refreshMonitor(bool visible)
@@ -779,12 +806,13 @@ void Monitor::slotPlay()
 {
     if (render == NULL) return;
     slotActivateMonitor();
-    if (render->playSpeed() == 0.0) {
+    if (render->isPlaying()) {
+       m_playAction->setIcon(m_playIcon);
+        render->switchPlay(false);
+    }
+    else {
         m_playAction->setIcon(m_pauseIcon);
         render->switchPlay(true);
-    } else {
-        m_playAction->setIcon(m_playIcon);
-        render->switchPlay(false);
     }
     m_ruler->refreshRuler();
 }
@@ -829,6 +857,7 @@ void Monitor::slotSetClipProducer(DocClipBase *clip, QPoint zone, bool forceUpda
 {
     if (render == NULL) return;
     if (clip == NULL && m_currentClip != NULL) {
+       m_currentClip->lastSeekPosition = render->seekFramePosition();
         kDebug()<<"// SETTING NULL CLIP MONITOR";
         m_currentClip = NULL;
         m_length = -1;
@@ -837,8 +866,9 @@ void Monitor::slotSetClipProducer(DocClipBase *clip, QPoint zone, bool forceUpda
     }
 
     if (clip != m_currentClip || forceUpdate) {
+       if (m_currentClip) m_currentClip->lastSeekPosition = render->seekFramePosition();
         m_currentClip = clip;
-        if (m_currentClip) slotActivateMonitor();
+       if (position == -1) position = clip->lastSeekPosition;
         updateMarkers(clip);
         Mlt::Producer *prod = NULL;
         if (clip) prod = clip->getCloneProducer();
@@ -1099,6 +1129,7 @@ Overlay::Overlay(QWidget* parent) :
     setBackgroundRole(QPalette::Base);
     setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
     setCursor(Qt::PointingHandCursor);
+
 }
 
 // virtual
@@ -1123,11 +1154,11 @@ void Overlay::mouseDoubleClickEvent ( QMouseEvent * event )
 void Overlay::setOverlayText(const QString &text, bool isZone)
 {
     if (text.isEmpty()) {
-       QPalette p;
+       /*QPalette p;
        p.setColor(QPalette::Base, KdenliveSettings::window_background());
        setPalette(p);
        setText(QString());
-       repaint();
+       repaint();*/
        setHidden(true);
        return;
     }