From 0d4677f3bcd1ba7300fe477b1f7dfd760334c914 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Wed, 18 Apr 2018 23:42:05 -0700 Subject: [PATCH] UI: Hold the clip flash for at least one second Holds the clipping flash for one second to better indicate that clipping is occurring. Closes obsproject/obs-studio#1201 --- UI/volume-control.cpp | 17 +++++++++++++++++ UI/volume-control.hpp | 4 ++++ 2 files changed, 21 insertions(+) diff --git a/UI/volume-control.cpp b/UI/volume-control.cpp index 47019cc4a..5373ab8a6 100644 --- a/UI/volume-control.cpp +++ b/UI/volume-control.cpp @@ -653,6 +653,13 @@ void VolumeMeter::paintTicks(QPainter &painter, int x, int y, } } +#define CLIP_FLASH_DURATION_MS 1000 + +void VolumeMeter::ClipEnding() +{ + clipping = false; +} + void VolumeMeter::paintMeter(QPainter &painter, int x, int y, int width, int height, float magnitude, float peak, float peakHold) { @@ -672,6 +679,10 @@ void VolumeMeter::paintMeter(QPainter &painter, int x, int y, int errorLength = maximumPosition - errorPosition; locker.unlock(); + if (clipping) { + peakPosition = maximumPosition; + } + if (peakPosition < minimumPosition) { painter.fillRect( minimumPosition, y, @@ -740,6 +751,12 @@ void VolumeMeter::paintMeter(QPainter &painter, int x, int y, backgroundErrorColor); } else { + if (!clipping) { + QTimer::singleShot(CLIP_FLASH_DURATION_MS, this, + SLOT(ClipEnding())); + clipping = true; + } + qreal end = errorLength + warningLength + nominalLength; painter.fillRect( minimumPosition, y, diff --git a/UI/volume-control.hpp b/UI/volume-control.hpp index 390e684dc..4e1db9eaa 100644 --- a/UI/volume-control.hpp +++ b/UI/volume-control.hpp @@ -79,6 +79,9 @@ class VolumeMeter : public QWidget READ getInputPeakHoldDuration WRITE setInputPeakHoldDuration DESIGNABLE true) +private slots: + void ClipEnding(); + private: obs_volmeter_t *obs_volmeter; static QWeakPointer updateTimer; @@ -137,6 +140,7 @@ private: qreal inputPeakHoldDuration; uint64_t lastRedrawTime = 0; + bool clipping = false; public: explicit VolumeMeter(QWidget *parent = 0,