diff options
author | Miodrag Milanović <mmicko@gmail.com> | 2020-01-11 16:29:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-11 16:29:26 +0100 |
commit | 56918e5596a8531c5a21bed8e9407fa0ea7aa507 (patch) | |
tree | e3ba4ae0f3abae7d5c09debf76bfb872feb64d56 /gui/fpgaviewwidget.cc | |
parent | abfe31d5d22a0ed1cc6ef32cf73fc1826b090b1c (diff) | |
parent | 0bf8fa23d91ae9bc46a45a4a2d8d12061e54c742 (diff) | |
download | nextpnr-56918e5596a8531c5a21bed8e9407fa0ea7aa507.tar.gz nextpnr-56918e5596a8531c5a21bed8e9407fa0ea7aa507.tar.bz2 nextpnr-56918e5596a8531c5a21bed8e9407fa0ea7aa507.zip |
Merge pull request #377 from YosysHQ/mmicko/recording
Enable screenshot and recording feature
Diffstat (limited to 'gui/fpgaviewwidget.cc')
-rw-r--r-- | gui/fpgaviewwidget.cc | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/gui/fpgaviewwidget.cc b/gui/fpgaviewwidget.cc index 2e1bbf63..f1494452 100644 --- a/gui/fpgaviewwidget.cc +++ b/gui/fpgaviewwidget.cc @@ -22,6 +22,9 @@ #include <QApplication> #include <QCoreApplication> +#include <QDir> +#include <QFileInfo> +#include <QImageWriter> #include <QMouseEvent> #include <QWidget> @@ -35,7 +38,7 @@ NEXTPNR_NAMESPACE_BEGIN FPGAViewWidget::FPGAViewWidget(QWidget *parent) - : QOpenGLWidget(parent), ctx_(nullptr), paintTimer_(this), lineShader_(this), zoom_(10.0f), + : QOpenGLWidget(parent), movieSaving(false), ctx_(nullptr), paintTimer_(this), lineShader_(this), zoom_(10.0f), rendererArgs_(new FPGAViewWidget::RendererArgs), rendererData_(new FPGAViewWidget::RendererData) { colors_.background = QColor("#000000"); @@ -322,6 +325,26 @@ void FPGAViewWidget::paintGL() lineShader_.draw(GraphicElement::STYLE_SELECTED, colors_.selected, thick11Px, matrix); lineShader_.draw(GraphicElement::STYLE_HOVER, colors_.hovered, thick2Px, matrix); + if (movieSaving) { + if (movieCounter == currentFrameSkip) { + QMutexLocker lock(&rendererArgsLock_); + movieCounter = 0; + QImage image = grabFramebuffer(); + if (!movieSkipSame || movieLastImage != image) { + currentMovieFrame++; + + QString number = QString("movie_%1.png").arg(currentMovieFrame, 5, 10, QChar('0')); + + QFileInfo fileName = QFileInfo(QDir(movieDir), number); + QImageWriter imageWriter(fileName.absoluteFilePath(), "png"); + imageWriter.write(image); + movieLastImage = image; + } + } else { + movieCounter++; + } + } + // Render ImGui QtImGui::newFrame(); QMutexLocker lock(&rendererArgsLock_); @@ -579,6 +602,24 @@ void FPGAViewWidget::renderLines(void) } } +void FPGAViewWidget::movieStart(QString dir, long frameSkip, bool skipSame) +{ + QMutexLocker locker(&rendererArgsLock_); + movieLastImage = QImage(); + movieSkipSame = skipSame; + movieDir = dir; + currentMovieFrame = 0; + movieCounter = 0; + currentFrameSkip = frameSkip; + movieSaving = true; +} + +void FPGAViewWidget::movieStop() +{ + QMutexLocker locker(&rendererArgsLock_); + movieSaving = false; +} + void FPGAViewWidget::onSelectedArchItem(std::vector<DecalXY> decals, bool keep) { { |