| @@ -143,7 +143,6 @@ public: | |||||
| displayMeter(2, 0.0); | displayMeter(2, 0.0); | ||||
| int refresh = float(jack_get_buffer_size(jClient)) / jack_get_sample_rate(jClient) * 1000; | int refresh = float(jack_get_buffer_size(jClient)) / jack_get_sample_rate(jClient) * 1000; | ||||
| setRefreshRate(refresh > 25 ? refresh : 25); | |||||
| m_peakTimerId = startTimer(refresh > 50 ? refresh : 50); | m_peakTimerId = startTimer(refresh > 50 ? refresh : 50); | ||||
| } | } | ||||
| @@ -33,15 +33,10 @@ DigitalPeakMeter::DigitalPeakMeter(QWidget* parent) | |||||
| fColorBase(93, 231, 61), | fColorBase(93, 231, 61), | ||||
| fColorBaseAlt(15, 110, 15, 100), | fColorBaseAlt(15, 110, 15, 100), | ||||
| fChannelsData(nullptr), | fChannelsData(nullptr), | ||||
| fLastValueData(nullptr), | |||||
| fPaintTimer(this) | |||||
| fLastValueData(nullptr) | |||||
| { | { | ||||
| setChannels(0); | setChannels(0); | ||||
| setColor(GREEN); | setColor(GREEN); | ||||
| fPaintTimer.setInterval(60); | |||||
| connect(&fPaintTimer, SIGNAL(timeout()), this, SLOT(update())); | |||||
| fPaintTimer.start(); | |||||
| } | } | ||||
| DigitalPeakMeter::~DigitalPeakMeter() | DigitalPeakMeter::~DigitalPeakMeter() | ||||
| @@ -60,12 +55,23 @@ void DigitalPeakMeter::displayMeter(int meter, float level) | |||||
| if (meter <= 0 || meter > fChannels || fChannelsData == nullptr) | if (meter <= 0 || meter > fChannels || fChannelsData == nullptr) | ||||
| return qCritical("DigitalPeakMeter::displayMeter(%i, %f) - invalid meter number", meter, level); | return qCritical("DigitalPeakMeter::displayMeter(%i, %f) - invalid meter number", meter, level); | ||||
| if (level < 0.0f) | |||||
| level = -level; | |||||
| else if (level > 1.0f) | |||||
| int i = meter - 1; | |||||
| if (fSmoothMultiplier > 0) | |||||
| level = (fLastValueData[i] * fSmoothMultiplier + level) / float(fSmoothMultiplier + 1); | |||||
| if (level < 0.001f) | |||||
| level = 0.0f; | |||||
| else if (level > 0.999f) | |||||
| level = 1.0f; | level = 1.0f; | ||||
| fChannelsData[meter-1] = level; | |||||
| if (fChannelsData[i] != level) | |||||
| { | |||||
| fChannelsData[i] = level; | |||||
| update(); | |||||
| } | |||||
| fLastValueData[i] = level; | |||||
| } | } | ||||
| void DigitalPeakMeter::setChannels(int channels) | void DigitalPeakMeter::setChannels(int channels) | ||||
| @@ -87,7 +93,7 @@ void DigitalPeakMeter::setChannels(int channels) | |||||
| fChannelsData = new float[channels]; | fChannelsData = new float[channels]; | ||||
| fLastValueData = new float[channels]; | fLastValueData = new float[channels]; | ||||
| for (int i=0; i < channels; i++) | |||||
| for (int i=0; i < channels; ++i) | |||||
| { | { | ||||
| fChannelsData[i] = 0.0f; | fChannelsData[i] = 0.0f; | ||||
| fLastValueData[i] = 0.0f; | fLastValueData[i] = 0.0f; | ||||
| @@ -146,15 +152,6 @@ void DigitalPeakMeter::setOrientation(Orientation orientation) | |||||
| updateSizes(); | updateSizes(); | ||||
| } | } | ||||
| void DigitalPeakMeter::setRefreshRate(int rate) | |||||
| { | |||||
| Q_ASSERT(rate > 0); | |||||
| fPaintTimer.stop(); | |||||
| fPaintTimer.setInterval(rate); | |||||
| fPaintTimer.start(); | |||||
| } | |||||
| void DigitalPeakMeter::setSmoothRelease(int value) | void DigitalPeakMeter::setSmoothRelease(int value) | ||||
| { | { | ||||
| Q_ASSERT(value >= 0 && value <= 5); | Q_ASSERT(value >= 0 && value <= 5); | ||||
| @@ -169,7 +166,7 @@ void DigitalPeakMeter::setSmoothRelease(int value) | |||||
| QSize DigitalPeakMeter::minimumSizeHint() const | QSize DigitalPeakMeter::minimumSizeHint() const | ||||
| { | { | ||||
| return QSize(30, 30); | |||||
| return QSize(10, 10); | |||||
| } | } | ||||
| QSize DigitalPeakMeter::sizeHint() const | QSize DigitalPeakMeter::sizeHint() const | ||||
| @@ -212,13 +209,10 @@ void DigitalPeakMeter::paintEvent(QPaintEvent* event) | |||||
| painter.setPen(fColorBackground); | painter.setPen(fColorBackground); | ||||
| painter.setBrush(fGradientMeter); | painter.setBrush(fGradientMeter); | ||||
| for (int i=0; i < fChannels; i++) | |||||
| for (int i=0; i < fChannels; ++i) | |||||
| { | { | ||||
| float value, level = fChannelsData[i]; | float value, level = fChannelsData[i]; | ||||
| if (level == fLastValueData[i]) | |||||
| continue; | |||||
| if (fOrientation == HORIZONTAL) | if (fOrientation == HORIZONTAL) | ||||
| value = level * float(fWidth); | value = level * float(fWidth); | ||||
| else if (fOrientation == VERTICAL) | else if (fOrientation == VERTICAL) | ||||
| @@ -226,18 +220,12 @@ void DigitalPeakMeter::paintEvent(QPaintEvent* event) | |||||
| else | else | ||||
| value = 0.0f; | value = 0.0f; | ||||
| if (value < 0.0f) | |||||
| value = 0.0f; | |||||
| else if (fSmoothMultiplier > 0) | |||||
| value = (fLastValueData[i] * float(fSmoothMultiplier) + value) / float(fSmoothMultiplier + 1); | |||||
| if (fOrientation == HORIZONTAL) | if (fOrientation == HORIZONTAL) | ||||
| painter.drawRect(0, meterX, int(value), fSizeMeter); | painter.drawRect(0, meterX, int(value), fSizeMeter); | ||||
| else if (fOrientation == VERTICAL) | else if (fOrientation == VERTICAL) | ||||
| painter.drawRect(meterX, int(value), fSizeMeter, fHeight); | painter.drawRect(meterX, int(value), fSizeMeter, fHeight); | ||||
| meterX += fSizeMeter; | meterX += fSizeMeter; | ||||
| fLastValueData[i] = value; | |||||
| } | } | ||||
| painter.setBrush(Qt::black); | painter.setBrush(Qt::black); | ||||
| @@ -12,7 +12,7 @@ | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
| * GNU General Public License for more details. | * GNU General Public License for more details. | ||||
| * | * | ||||
| * For a full copy of the GNU General Public License see the GPL.txt file | |||||
| * For a full copy of the GNU General Public License see the COPYING file | |||||
| */ | */ | ||||
| #ifndef __DIGITALPEAKMETER_HPP__ | #ifndef __DIGITALPEAKMETER_HPP__ | ||||
| @@ -41,7 +41,6 @@ public: | |||||
| void setChannels(int channels); | void setChannels(int channels); | ||||
| void setColor(Color color); | void setColor(Color color); | ||||
| void setOrientation(Orientation orientation); | void setOrientation(Orientation orientation); | ||||
| void setRefreshRate(int rate); | |||||
| void setSmoothRelease(int value); | void setSmoothRelease(int value); | ||||
| QSize minimumSizeHint() const; | QSize minimumSizeHint() const; | ||||
| @@ -67,8 +66,6 @@ private: | |||||
| float* fChannelsData; | float* fChannelsData; | ||||
| float* fLastValueData; | float* fLastValueData; | ||||
| QTimer fPaintTimer; | |||||
| }; | }; | ||||
| #endif // __DIGITALPEAKMETER_HPP__ | #endif // __DIGITALPEAKMETER_HPP__ | ||||
| @@ -2,14 +2,14 @@ | |||||
| * Pixmap Dial, a custom Qt4 widget | * Pixmap Dial, a custom Qt4 widget | ||||
| * Copyright (C) 2011-2012 Filipe Coelho <falktx@falktx.com> | * Copyright (C) 2011-2012 Filipe Coelho <falktx@falktx.com> | ||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or modify | |||||
| * it under the terms of the GNU General Public License as published by | |||||
| * the Free Software Foundation; either version 2 of the License, or | |||||
| * any later version. | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU General Public License as | |||||
| * published by the Free Software Foundation; either version 2 of | |||||
| * the License, or any later version. | |||||
| * | * | ||||
| * This program is distributed in the hope that it will be useful, | * This program is distributed in the hope that it will be useful, | ||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU General Public License for more details. | * GNU General Public License for more details. | ||||
| * | * | ||||
| * For a full copy of the GNU General Public License see the COPYING file | * For a full copy of the GNU General Public License see the COPYING file | ||||
| @@ -2,14 +2,14 @@ | |||||
| * Pixmap Dial, a custom Qt4 widget | * Pixmap Dial, a custom Qt4 widget | ||||
| * Copyright (C) 2011-2012 Filipe Coelho <falktx@falktx.com> | * Copyright (C) 2011-2012 Filipe Coelho <falktx@falktx.com> | ||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or modify | |||||
| * it under the terms of the GNU General Public License as published by | |||||
| * the Free Software Foundation; either version 2 of the License, or | |||||
| * any later version. | |||||
| * This program is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU General Public License as | |||||
| * published by the Free Software Foundation; either version 2 of | |||||
| * the License, or any later version. | |||||
| * | * | ||||
| * This program is distributed in the hope that it will be useful, | * This program is distributed in the hope that it will be useful, | ||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU General Public License for more details. | * GNU General Public License for more details. | ||||
| * | * | ||||
| * For a full copy of the GNU General Public License see the COPYING file | * For a full copy of the GNU General Public License see the COPYING file | ||||