X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fabstractmonitor.cpp;h=4b2d5b7d1cc82a1cc017c454128d78e9c17ede57;hb=05812d33728689c0c531b81e283cd4616ab07842;hp=b83765e60bab0c70b4c3c07ae4171df4f1fe30ec;hpb=ac5f5c9f6d4bdffeb76f3f2098b80f27bc532606;p=kdenlive diff --git a/src/abstractmonitor.cpp b/src/abstractmonitor.cpp index b83765e6..4b2d5b7d 100644 --- a/src/abstractmonitor.cpp +++ b/src/abstractmonitor.cpp @@ -20,30 +20,52 @@ #include "abstractmonitor.h" +#include VideoPreviewContainer::VideoPreviewContainer(QWidget *parent) : - QFrame(parent), - m_image(new QImage()) + QFrame(parent) { setFrameShape(QFrame::NoFrame); setFocusPolicy(Qt::ClickFocus); setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + connect(&m_refreshTimer, SIGNAL(timeout()), this, SLOT(update())); + m_refreshTimer.setSingleShot(false); + m_refreshTimer.setInterval(200); +} + +VideoPreviewContainer::~VideoPreviewContainer() +{ + qDeleteAll(m_imageQueue); } void VideoPreviewContainer::setImage(QImage img) { - if (m_image) delete m_image; - m_image = new QImage(img); - update(); + if (m_imageQueue.count() > 2) { + delete m_imageQueue.takeLast();//replace(10, new QImage(img)); + } + m_imageQueue.prepend(new QImage(img)); +} + +void VideoPreviewContainer::stop() +{ + m_refreshTimer.stop(); + qDeleteAll(m_imageQueue); + m_imageQueue.clear(); +} + +void VideoPreviewContainer::start() +{ + m_refreshTimer.start(); } // virtual void VideoPreviewContainer::paintEvent(QPaintEvent */*event*/) { - if (m_image->isNull()) return; + if (m_imageQueue.isEmpty()) return; + QImage *img = m_imageQueue.takeFirst(); QPainter painter(this); - double ar = (double) m_image->width() / m_image->height(); + double ar = (double) img->width() / img->height(); QRect rect = this->frameRect(); int paintW = rect.height() * ar + 0.5; if (paintW > rect.width()) { @@ -58,7 +80,8 @@ void VideoPreviewContainer::paintEvent(QPaintEvent */*event*/) rect.setWidth(paintW); } - painter.drawImage(rect, *m_image); + painter.drawImage(rect, *img); + delete img; }