2015-10-18 16:15:02 +08:00
|
|
|
/*
|
|
|
|
Copyright © 2015 by The qTox Project
|
|
|
|
|
|
|
|
This file is part of qTox, a Qt-based graphical interface for Tox.
|
|
|
|
|
|
|
|
qTox is libre 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 3 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
qTox is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with qTox. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "micfeedbackwidget.h"
|
|
|
|
#include "src/audio/audio.h"
|
|
|
|
#include <QPainter>
|
|
|
|
#include <QLinearGradient>
|
|
|
|
|
2015-08-05 23:42:10 +08:00
|
|
|
MicFeedbackWidget::MicFeedbackWidget(QWidget *parent)
|
2016-04-19 17:44:46 +08:00
|
|
|
: QWidget(parent), mMeterListener(nullptr)
|
2015-10-18 16:15:02 +08:00
|
|
|
{
|
|
|
|
setFixedHeight(20);
|
|
|
|
}
|
|
|
|
|
|
|
|
void MicFeedbackWidget::paintEvent(QPaintEvent*)
|
|
|
|
{
|
2015-11-17 06:57:57 +08:00
|
|
|
const int w = width();
|
|
|
|
const int h = height();
|
2015-10-18 16:15:02 +08:00
|
|
|
QPainter painter(this);
|
2015-11-17 06:57:57 +08:00
|
|
|
painter.setPen(QPen(Qt::gray));
|
|
|
|
painter.drawRoundedRect(QRect(0, 0, w - 1, h - 1), 3., 3.);
|
2015-10-18 16:15:02 +08:00
|
|
|
|
2015-11-17 06:57:57 +08:00
|
|
|
int gradientWidth = qMax(0, qRound(w * current) - 4);
|
2015-08-05 20:45:02 +08:00
|
|
|
|
2015-11-17 06:57:57 +08:00
|
|
|
QRect gradientRect(2, 2, gradientWidth, h - 4);
|
2015-10-18 16:15:02 +08:00
|
|
|
|
2015-11-17 06:57:57 +08:00
|
|
|
QPainterPath path;
|
|
|
|
QLinearGradient gradient(0, 0, w, 0);
|
|
|
|
gradient.setColorAt(0.0, Qt::green);
|
2015-10-18 16:15:02 +08:00
|
|
|
gradient.setColorAt(0.5, Qt::yellow);
|
2015-11-17 06:57:57 +08:00
|
|
|
gradient.setColorAt(1.0, Qt::red);
|
|
|
|
path.addRoundedRect(gradientRect, 2.0, 2.0);
|
|
|
|
painter.fillPath(path, gradient);
|
2015-10-18 16:15:02 +08:00
|
|
|
|
2015-11-17 06:57:57 +08:00
|
|
|
float slice = w / 5.f;
|
2015-10-18 16:15:02 +08:00
|
|
|
int padding = slice / 2;
|
|
|
|
|
|
|
|
for (int i = 0; i < 5; ++i)
|
|
|
|
{
|
|
|
|
float pos = slice * i + padding;
|
2015-11-17 06:57:57 +08:00
|
|
|
painter.drawLine(pos, 2, pos, h - 4);
|
2015-10-18 16:15:02 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-11-17 07:14:50 +08:00
|
|
|
void MicFeedbackWidget::showEvent(QShowEvent*)
|
2015-10-18 16:15:02 +08:00
|
|
|
{
|
2016-01-21 23:25:25 +08:00
|
|
|
#if 0
|
2015-11-17 07:14:50 +08:00
|
|
|
mMeterListener = Audio::getInstance().createAudioMeterListener();
|
2015-11-30 06:45:52 +08:00
|
|
|
connect(mMeterListener, &AudioMeterListener::gainChanged,
|
|
|
|
this, &MicFeedbackWidget::onGainMetered);
|
2015-11-17 07:14:50 +08:00
|
|
|
mMeterListener->start();
|
2016-01-21 23:25:25 +08:00
|
|
|
#endif
|
2015-10-18 16:15:02 +08:00
|
|
|
}
|
2015-08-05 20:45:02 +08:00
|
|
|
|
2015-11-17 07:14:50 +08:00
|
|
|
void MicFeedbackWidget::hideEvent(QHideEvent*)
|
2015-08-05 20:45:02 +08:00
|
|
|
{
|
2016-01-21 23:25:25 +08:00
|
|
|
#if 0
|
2015-11-17 07:14:50 +08:00
|
|
|
mMeterListener->stop();
|
2016-01-21 23:25:25 +08:00
|
|
|
#endif
|
2015-08-05 20:45:02 +08:00
|
|
|
}
|
|
|
|
|
2015-11-17 07:14:50 +08:00
|
|
|
void MicFeedbackWidget::onGainMetered(qreal value)
|
2015-08-05 20:45:02 +08:00
|
|
|
{
|
2016-01-21 23:25:25 +08:00
|
|
|
#if 0
|
2015-11-17 07:14:50 +08:00
|
|
|
current = value;
|
|
|
|
update();
|
2015-11-30 06:45:52 +08:00
|
|
|
mMeterListener->processed();
|
2016-01-21 23:25:25 +08:00
|
|
|
#endif
|
2015-08-05 20:45:02 +08:00
|
|
|
}
|