From 6c550abaafb25a2a0cff63870fd2809fe28d1e82 Mon Sep 17 00:00:00 2001 From: Gitea Date: Tue, 17 Sep 2019 22:06:55 +0200 Subject: [PATCH] Calculates afterglow from a value 0.0 to 1.0 which is the factor the screen will be after 1 second (provided it draws at the set FPS rate) --- mainwindow.cpp | 7 ++++--- osciwidget.cpp | 9 ++++++++- osciwidget.h | 7 ++++--- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index afc8970..29b0ede 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -124,10 +124,11 @@ MainWindow::MainWindow(QWidget *parent) : auto widget = new QWidget; auto layout = new QFormLayout(widget); { - auto input = new QSpinBox; - input->setRange(0, 255); + auto input = new QDoubleSpinBox; + input->setRange(0, 1.0); + input->setSingleStep(0.1); input->setValue(m_ui->widget->afterglow()); - connect(input, qOverload(&QSpinBox::valueChanged), m_ui->widget, &OsciWidget::setAfterglow); + connect(input, qOverload(&QDoubleSpinBox::valueChanged), m_ui->widget, &OsciWidget::setAfterglow); layout->addRow(tr("Afterglow:"), input); } { diff --git a/osciwidget.cpp b/osciwidget.cpp index 91d1b1d..6a049eb 100644 --- a/osciwidget.cpp +++ b/osciwidget.cpp @@ -30,6 +30,13 @@ void OsciWidget::setFps(int fps) m_redrawTimerId = startTimer(1000/m_fps); } +void OsciWidget::setAfterglow(float afterglow){ + m_afterglow = afterglow; + // percentage of the image that should be visible after one second + // i.e. factor^fps=afterglow -> factor = afterglow^(1/fps) + m_afterglowColor = 255 * pow(afterglow, 1.0/m_fps); +} + void OsciWidget::setLightspeed(int lightspeed) { const auto temp = (float(lightspeed)/20.f); m_lightspeed = temp*temp*temp; @@ -73,7 +80,7 @@ void OsciWidget::updateFrameBuffer() // darkening last frame painter.setCompositionMode(QPainter::CompositionMode_Multiply); painter.setPen({}); - painter.setBrush(QColor(m_afterglow, m_afterglow, m_afterglow)); + painter.setBrush(QColor(m_afterglowColor, m_afterglowColor, m_afterglowColor)); painter.drawRect(m_pixmap.rect()); // drawing new lines ontop diff --git a/osciwidget.h b/osciwidget.h index 810c92e..9403099 100644 --- a/osciwidget.h +++ b/osciwidget.h @@ -21,7 +21,7 @@ public: float factor() const { return m_factor; } int fps() const { return m_fps; } - int afterglow() const { return m_afterglow; } + float afterglow() const { return m_afterglow; } int lightspeed() const; signals: @@ -30,7 +30,7 @@ signals: public slots: void setFactor(float factor) { m_factor = factor; } void setFps(int fps); - void setAfterglow(int afterglow) { m_afterglow = afterglow; } + void setAfterglow(float afterglow); void setLightspeed(int lightspeed); void renderSamples(const SamplePair *begin, const SamplePair *end); @@ -44,7 +44,8 @@ private: private: float m_factor{2.f}; - int m_fps{30}, m_afterglow{175}; + int m_fps{30}, m_afterglowColor{175}; + float m_afterglow{0.2}; float m_lightspeed{35.f}; std::vector m_buffer;