From: Jean-Baptiste Mardelle Date: Tue, 25 Nov 2008 09:56:52 +0000 (+0000) Subject: Show overlay info on monitor when position is at zone start or end: X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=b72fb2155efb7cdbbcb57d90c3d908a6a4d1d70a;p=kdenlive Show overlay info on monitor when position is at zone start or end: http://www.kdenlive.org/mantis/view.php?id=403 svn path=/branches/KDE4/; revision=2732 --- diff --git a/src/monitor.cpp b/src/monitor.cpp index 3ba88ef1..d28b905f 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -110,6 +111,9 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) render = new Render(m_name, (int) m_monitorRefresh->winId(), -1, this); m_monitorRefresh->setRenderer(render); + m_overlay = new Overlay(m_monitorRefresh); + m_overlay->raise(); + m_overlay->setHidden(true); connect(m_ruler, SIGNAL(seekRenderer(int)), this, SLOT(slotSeek(int))); @@ -132,6 +136,13 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) kDebug() << "/////// BUILDING MONITOR, ID: " << ui.video_frame->winId(); } +Monitor::~Monitor() { + delete m_ruler; + delete m_timePos; + delete m_overlay; + delete m_monitorRefresh; +} + QString Monitor::name() const { return m_name; } @@ -202,16 +213,19 @@ void Monitor::resetSize() { void Monitor::slotZoneMoved(int start, int end) { m_ruler->setZone(start, end); + checkOverlay(); } void Monitor::slotSetZoneStart() { m_ruler->setZone(m_position, -1); emit zoneUpdated(m_ruler->zone()); + checkOverlay(); } void Monitor::slotSetZoneEnd() { m_ruler->setZone(-1, m_position); emit zoneUpdated(m_ruler->zone()); + checkOverlay(); } // virtual @@ -350,6 +364,15 @@ void Monitor::slotSeek(int 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: "<setOverlayText(i18n("In Point")); + else if (m_position == zone.y()) m_overlay->setOverlayText(i18n("Out Point")); + else m_overlay->setHidden(true); } void Monitor::slotStart() { @@ -418,6 +441,7 @@ void Monitor::slotRewindOneFrame() { render->seekToFrame(m_position); emit renderPosition(m_position); m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); + checkOverlay(); } void Monitor::slotForwardOneFrame() { @@ -428,6 +452,7 @@ void Monitor::slotForwardOneFrame() { render->seekToFrame(m_position); emit renderPosition(m_position); m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); + checkOverlay(); } void Monitor::seekCursor(int pos) { @@ -435,6 +460,7 @@ void Monitor::seekCursor(int pos) { m_position = pos; m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(pos)); m_ruler->slotNewValue(pos); + checkOverlay(); } void Monitor::rendererStopped(int pos) { @@ -581,4 +607,28 @@ void MonitorRefresh::paintEvent(QPaintEvent * event) { if (m_renderer) m_renderer->doRefresh(); } + +Overlay::Overlay(QWidget* parent): QWidget(parent) { + setAttribute(Qt::WA_TransparentForMouseEvents); + //setAttribute(Qt::WA_OpaquePaintEvent); // + //setAttribute(Qt::WA_NoSystemBackground); + setAutoFillBackground(false); +} + +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(); +} + +void Overlay::setOverlayText(const QString &text) { + kDebug() << "/////// SET OVERLAY: " << text; + m_text = text; + setHidden(false); + update(); +} + + + #include "monitor.moc" diff --git a/src/monitor.h b/src/monitor.h index 6e989dc9..106d4bd9 100644 --- a/src/monitor.h +++ b/src/monitor.h @@ -44,11 +44,23 @@ private: Render *m_renderer; }; +class Overlay : public QWidget { + Q_OBJECT +public: + Overlay(QWidget* parent); + virtual void paintEvent(QPaintEvent * event); + void setOverlayText(const QString &); + +private: + QString m_text; +}; + class Monitor : public QWidget { Q_OBJECT public: Monitor(QString name, MonitorManager *manager, QWidget *parent = 0); + virtual ~Monitor(); Render *render; void resetProfile(); QString name() const; @@ -90,6 +102,8 @@ private: DocClipBase *m_currentClip; QPoint m_DragStartPosition; bool m_dragStarted; + Overlay *m_overlay; + void checkOverlay(); private slots: void adjustRulerSize(int length);