From: <j-...@us...> - 2008-11-25 13:19:22
|
Revision: 2733 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2733&view=rev Author: j-b-m Date: 2008-11-25 13:19:18 +0000 (Tue, 25 Nov 2008) Log Message: ----------- * Clip Markers are now displayed over the clip monitor * Make snap points work for clip monitor: http://www.kdenlive.org/mantis/view.php?id=404 Modified Paths: -------------- branches/KDE4/src/mainwindow.cpp branches/KDE4/src/monitor.cpp branches/KDE4/src/monitor.h Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-11-25 09:56:52 UTC (rev 2732) +++ branches/KDE4/src/mainwindow.cpp 2008-11-25 13:19:18 UTC (rev 2733) @@ -1645,14 +1645,14 @@ if (m_projectMonitor->isActive()) { if (m_activeTimeline) m_activeTimeline->projectView()->slotSeekToPreviousSnap(); - } + } else m_clipMonitor->slotSeekToPreviousSnap(); } void MainWindow::slotSnapForward() { if (m_projectMonitor->isActive()) { if (m_activeTimeline) m_activeTimeline->projectView()->slotSeekToNextSnap(); - } + } else m_clipMonitor->slotSeekToNextSnap(); } void MainWindow::slotClipStart() { Modified: branches/KDE4/src/monitor.cpp =================================================================== --- branches/KDE4/src/monitor.cpp 2008-11-25 09:56:52 UTC (rev 2732) +++ branches/KDE4/src/monitor.cpp 2008-11-25 13:19:18 UTC (rev 2733) @@ -32,7 +32,6 @@ #include <KApplication> #include <KMessageBox> -#include "gentime.h" #include "monitor.h" #include "renderer.h" #include "monitormanager.h" @@ -211,6 +210,42 @@ ui.video_frame->setMinimumSize(0, 0); } +void Monitor::slotSeekToPreviousSnap() { + if (m_currentClip) slotSeek(getSnapForPos(true).frames(m_monitorManager->timecode().fps())); +} + +void Monitor::slotSeekToNextSnap() { + if (m_currentClip) slotSeek(getSnapForPos(false).frames(m_monitorManager->timecode().fps())); +} + +GenTime Monitor::getSnapForPos(bool previous) { + QList <GenTime> snaps; + QList < GenTime > markers = m_currentClip->snapMarkers(); + for (int i = 0; i < markers.size(); ++i) { + GenTime t = markers.at(i); + snaps.append(t); + } + QPoint zone = m_ruler->zone(); + snaps.append(GenTime(zone.x(), m_monitorManager->timecode().fps())); + snaps.append(GenTime(zone.y(), m_monitorManager->timecode().fps())); + snaps.append(GenTime()); + snaps.append(m_currentClip->duration()); + qSort(snaps); + + const GenTime pos(m_position, m_monitorManager->timecode().fps()); + for (int i = 0; i < snaps.size(); ++i) { + if (previous && snaps.at(i) >= pos) { + if (i == 0) i = 1; + return snaps.at(i - 1); + } else if (!previous && snaps.at(i) > pos) { + return snaps.at(i); + } + } + return GenTime(); +} + + + void Monitor::slotZoneMoved(int start, int end) { m_ruler->setZone(start, end); checkOverlay(); @@ -360,19 +395,24 @@ void Monitor::slotSeek(int pos) { if (!m_isActive) m_monitorManager->activateMonitor(m_name); if (render == NULL) return; + m_position = pos; + checkOverlay(); render->seekToFrame(pos); - m_position = pos; emit renderPosition(m_position); m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); - checkOverlay(); } void Monitor::checkOverlay() { QPoint zone = m_ruler->zone(); - //kDebug()<<"RUL: "<<pos<<", ZONE: "<<zone; if (m_position == zone.x()) m_overlay->setOverlayText(i18n("In Point")); else if (m_position == zone.y()) m_overlay->setOverlayText(i18n("Out Point")); - else m_overlay->setHidden(true); + else { + if (m_currentClip) { + QString markerComment = m_currentClip->markerComment(GenTime(m_position, m_monitorManager->timecode().fps())); + if (markerComment.isEmpty()) m_overlay->setHidden(true); + else m_overlay->setOverlayText(markerComment, false); + } else m_overlay->setHidden(true); + } } void Monitor::slotStart() { @@ -438,10 +478,10 @@ render->play(0); if (m_position < 1) return; m_position--; + checkOverlay(); render->seekToFrame(m_position); emit renderPosition(m_position); m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); - checkOverlay(); } void Monitor::slotForwardOneFrame() { @@ -449,18 +489,18 @@ render->play(0); if (m_position >= m_length) return; m_position++; + checkOverlay(); render->seekToFrame(m_position); emit renderPosition(m_position); m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); - checkOverlay(); } void Monitor::seekCursor(int pos) { if (!m_isActive) m_monitorManager->activateMonitor(m_name); m_position = pos; + checkOverlay(); m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(pos)); m_ruler->slotNewValue(pos); - checkOverlay(); } void Monitor::rendererStopped(int pos) { @@ -608,7 +648,7 @@ } -Overlay::Overlay(QWidget* parent): QWidget(parent) { +Overlay::Overlay(QWidget* parent): QLabel(parent) { setAttribute(Qt::WA_TransparentForMouseEvents); //setAttribute(Qt::WA_OpaquePaintEvent); // //setAttribute(Qt::WA_NoSystemBackground); @@ -617,14 +657,20 @@ void Overlay::paintEvent(QPaintEvent * event) { QPainter painter(this); - painter.fillRect(event->rect(), QColor(200, 0, 0)); - painter.drawText(event->rect(), Qt::AlignCenter, m_text); - //if (m_renderer) m_renderer->doRefresh(); + QColor col; + painter.setPen(Qt::white); + if (m_isZone) col = QColor(200, 0, 0); + else col = QColor(0, 0, 200); + painter.fillRect(rect(), col); + painter.drawText(rect(), Qt::AlignCenter, text()); } -void Overlay::setOverlayText(const QString &text) { - kDebug() << "/////// SET OVERLAY: " << text; - m_text = text; + + +void Overlay::setOverlayText(const QString &text, bool isZone) { + setHidden(true); + m_isZone = isZone; + setText(' ' + text + ' '); setHidden(false); update(); } Modified: branches/KDE4/src/monitor.h =================================================================== --- branches/KDE4/src/monitor.h 2008-11-25 09:56:52 UTC (rev 2732) +++ branches/KDE4/src/monitor.h 2008-11-25 13:19:18 UTC (rev 2733) @@ -21,11 +21,14 @@ #ifndef MONITOR_H #define MONITOR_H +#include <QLabel> + #include <KIcon> #include <KAction> #include <KRestrictedLine> #include <QDomElement> +#include "gentime.h" #include "ui_monitor_ui.h" class MonitorManager; @@ -44,15 +47,15 @@ Render *m_renderer; }; -class Overlay : public QWidget { +class Overlay : public QLabel { Q_OBJECT public: Overlay(QWidget* parent); virtual void paintEvent(QPaintEvent * event); - void setOverlayText(const QString &); + void setOverlayText(const QString &, bool isZone = true); private: - QString m_text; + bool m_isZone; }; class Monitor : public QWidget { @@ -104,6 +107,7 @@ bool m_dragStarted; Overlay *m_overlay; void checkOverlay(); + GenTime getSnapForPos(bool previous); private slots: void adjustRulerSize(int length); @@ -140,6 +144,8 @@ void slotZoneStart(); void slotZoneEnd(); void slotZoneMoved(int start, int end); + void slotSeekToNextSnap(); + void slotSeekToPreviousSnap(); signals: void renderPosition(int); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |