aboutsummaryrefslogtreecommitdiffstats
path: root/gui/fpgaviewwidget.cc
diff options
context:
space:
mode:
authorMiodrag Milanovic <mmicko@gmail.com>2020-01-05 13:51:12 +0100
committerMiodrag Milanovic <mmicko@gmail.com>2020-01-05 13:51:12 +0100
commit3f439c1ef2c1f4b7694d05be53117f0afe97cc17 (patch)
treeaf84b01b5c786b564a684170ec17b1a86ac5e283 /gui/fpgaviewwidget.cc
parentabfe31d5d22a0ed1cc6ef32cf73fc1826b090b1c (diff)
downloadnextpnr-3f439c1ef2c1f4b7694d05be53117f0afe97cc17.tar.gz
nextpnr-3f439c1ef2c1f4b7694d05be53117f0afe97cc17.tar.bz2
nextpnr-3f439c1ef2c1f4b7694d05be53117f0afe97cc17.zip
Enable screenshot and recording feature
Diffstat (limited to 'gui/fpgaviewwidget.cc')
-rw-r--r--gui/fpgaviewwidget.cc38
1 files changed, 37 insertions, 1 deletions
diff --git a/gui/fpgaviewwidget.cc b/gui/fpgaviewwidget.cc
index 2e1bbf63..8730c9d9 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,23 @@ 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;
+ currentMovieFrame++;
+
+ QImage image = grabFramebuffer();
+ 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);
+ } else {
+ movieCounter++;
+ }
+ }
+
// Render ImGui
QtImGui::newFrame();
QMutexLocker lock(&rendererArgsLock_);
@@ -579,6 +599,22 @@ void FPGAViewWidget::renderLines(void)
}
}
+void FPGAViewWidget::movieStart(QString dir, long frameSkip)
+{
+ QMutexLocker locker(&rendererArgsLock_);
+ 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)
{
{