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
This commit is contained in:
jp9000
2018-04-18 23:42:05 -07:00
parent e92b2560b6
commit 0d4677f3bc
2 changed files with 21 additions and 0 deletions

View File

@@ -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,

View File

@@ -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<VolumeMeterTimer> updateTimer;
@@ -137,6 +140,7 @@ private:
qreal inputPeakHoldDuration;
uint64_t lastRedrawTime = 0;
bool clipping = false;
public:
explicit VolumeMeter(QWidget *parent = 0,