#include <QVBoxLayout>
+#define SEEK_INACTIVE (-1)
+
+
Monitor::Monitor(Kdenlive::MONITORID id, MonitorManager *manager, QString profile, QWidget *parent) :
AbstractMonitor(id, manager, parent),
render(NULL),
m_currentClip(NULL),
- m_ruler(new SmallRuler(m_monitorManager)),
m_overlay(NULL),
m_scale(1),
m_length(0),
// Get base size for icons
int s = style()->pixelMetric(QStyle::PM_SmallIconSize);
- // Monitor ruler
- layout->addWidget(m_ruler);
+
// Tool bar buttons
m_toolbar = new QToolBar(this);
m_toolbar->setIconSize(QSize(s, s));
m_playIcon = KIcon("media-playback-start");
m_pauseIcon = KIcon("media-playback-pause");
+
if (id != Kdenlive::dvdMonitor) {
m_toolbar->addAction(KIcon("kdenlive-zone-start"), i18n("Set zone start"), this, SLOT(slotSetZoneStart()));
m_toolbar->addAction(KIcon("kdenlive-zone-end"), i18n("Set zone end"), this, SLOT(slotSetZoneEnd()));
- } else {
- m_ruler->setZone(-3, -2);
}
m_toolbar->addAction(KIcon("media-seek-backward"), i18n("Rewind"), this, SLOT(slotRewind()));
}
#endif
+ // Monitor ruler
+ m_ruler = new SmallRuler(m_monitorManager, render);
+ if (id == Kdenlive::dvdMonitor) m_ruler->setZone(-3, -2);
+ layout->addWidget(m_ruler);
+
connect(m_audioSlider, SIGNAL(valueChanged(int)), this, SLOT(slotSetVolume(int)));
- 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)));
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);
}
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...
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());
}
}
void Monitor::slotSetZoneStart()
{
- m_ruler->setZone(m_ruler->position(), -1);
+ m_ruler->setZoneStart();
emit zoneUpdated(m_ruler->zone());
checkOverlay();
setClipZone(m_ruler->zone());
void Monitor::slotSetZoneEnd()
{
- m_ruler->setZone(-1, m_ruler->position());
+ m_ruler->setZoneEnd();
emit zoneUpdated(m_ruler->zone());
checkOverlay();
setClipZone(m_ruler->zone());
if (fast) {
int delta = m_monitorManager->timecode().fps();
if (eventDelta > 0) delta = 0 - delta;
- slotSeek(m_ruler->position() - delta);
+ if (render->requestedSeekPosition != SEEK_INACTIVE)
+ slotSeek(render->requestedSeekPosition - delta);
+ else slotSeek(render->seekFramePosition() - delta);
} else {
if (eventDelta >= 0) slotForwardOneFrame();
else slotRewindOneFrame();
if (render == NULL) return;
slotActivateMonitor();
render->seekToFrame(pos);
+ m_ruler->update();
}
void Monitor::checkOverlay()
{
if (m_overlay == NULL) return;
QString overlayText;
- int pos = m_ruler->position();
+ int pos = render->seekFramePosition();
QPoint zone = m_ruler->zone();
if (pos == zone.x())
overlayText = i18n("In Point");
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);
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);
slotActivateMonitor();
render->play(0);
render->seekToFrameDiff(-diff);
+ m_ruler->update();
}
void Monitor::slotForwardOneFrame(int diff)
slotActivateMonitor();
render->play(0);
render->seekToFrameDiff(diff);
+ m_ruler->update();
}
void Monitor::seekCursor(int pos)
{
- //slotActivateMonitor();
if (m_ruler->slotNewValue(pos)) {
checkOverlay();
m_timePos->setValue(pos);
void Monitor::start()
{
if (!isVisible() || !isActive()) return;
- if (render) render->doRefresh();// start();
+ if (render) render->startConsumer();
}
void Monitor::refreshMonitor(bool visible)
m_playAction->setIcon(m_playIcon);
render->switchPlay(false);
}
+ m_ruler->refreshRuler();
}
void Monitor::slotPlayZone()
{
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;
}
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();