New upstream version 23.2.1+dfsg1

This commit is contained in:
Simon Chopin 2019-07-27 14:47:10 +02:00
parent cdc9a9fc87
commit b14f9eae6d
1017 changed files with 37232 additions and 11111 deletions

View file

@ -2,11 +2,11 @@
#include "qt-wrappers.hpp"
#include "obs-app.hpp"
#include "mute-checkbox.hpp"
#include "slider-ignorewheel.hpp"
#include "slider-absoluteset-style.hpp"
#include <QFontDatabase>
#include <QHBoxLayout>
#include <QPushButton>
#include <QSlider>
#include <QLabel>
#include <QPainter>
#include <QStyleFactory>
@ -14,6 +14,7 @@
using namespace std;
#define CLAMP(x, min, max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x)))
#define FADER_PRECISION 4096.0
QWeakPointer<VolumeMeterTimer> VolumeMeter::updateTimer;
@ -47,7 +48,8 @@ void VolControl::OBSVolumeMuted(void *data, calldata_t *calldata)
void VolControl::VolumeChanged()
{
slider->blockSignals(true);
slider->setValue((int) (obs_fader_get_deflection(obs_fader) * 100.0f));
slider->setValue((int) (obs_fader_get_deflection(obs_fader) *
FADER_PRECISION));
slider->blockSignals(false);
updateText();
@ -66,7 +68,7 @@ void VolControl::SetMuted(bool checked)
void VolControl::SliderChanged(int vol)
{
obs_fader_set_deflection(obs_fader, float(vol) * 0.01f);
obs_fader_set_deflection(obs_fader, float(vol) / FADER_PRECISION);
updateText();
}
@ -116,13 +118,14 @@ VolControl::VolControl(OBSSource source_, bool showConfig, bool vertical)
: source (std::move(source_)),
levelTotal (0.0f),
levelCount (0.0f),
obs_fader (obs_fader_create(OBS_FADER_CUBIC)),
obs_fader (obs_fader_create(OBS_FADER_LOG)),
obs_volmeter (obs_volmeter_create(OBS_FADER_LOG)),
vertical (vertical)
{
nameLabel = new QLabel();
volLabel = new QLabel();
mute = new MuteCheckBox();
QString sourceName = obs_source_get_name(source);
setObjectName(sourceName);
@ -153,7 +156,7 @@ VolControl::VolControl(OBSSource source_, bool showConfig, bool vertical)
QHBoxLayout *meterLayout = new QHBoxLayout;
volMeter = new VolumeMeter(nullptr, obs_volmeter, true);
slider = new QSlider(Qt::Vertical);
slider = new SliderIgnoreScroll(Qt::Vertical);
nameLayout->setAlignment(Qt::AlignCenter);
meterLayout->setAlignment(Qt::AlignCenter);
@ -188,6 +191,8 @@ VolControl::VolControl(OBSSource source_, bool showConfig, bool vertical)
mainLayout->addItem(meterLayout);
mainLayout->addItem(controlLayout);
volMeter->setFocusProxy(slider);
setMaximumWidth(110);
} else {
QHBoxLayout *volLayout = new QHBoxLayout;
@ -195,7 +200,7 @@ VolControl::VolControl(OBSSource source_, bool showConfig, bool vertical)
QHBoxLayout *botLayout = new QHBoxLayout;
volMeter = new VolumeMeter(nullptr, obs_volmeter, false);
slider = new QSlider(Qt::Horizontal);
slider = new SliderIgnoreScroll(Qt::Horizontal);
textLayout->setContentsMargins(0, 0, 0, 0);
textLayout->addWidget(nameLabel);
@ -217,6 +222,8 @@ VolControl::VolControl(OBSSource source_, bool showConfig, bool vertical)
mainLayout->addItem(textLayout);
mainLayout->addWidget(volMeter);
mainLayout->addItem(botLayout);
volMeter->setFocusProxy(slider);
}
setLayout(mainLayout);
@ -227,8 +234,9 @@ VolControl::VolControl(OBSSource source_, bool showConfig, bool vertical)
nameLabel->setText(sourceName);
nameLabel->setFont(font);
volLabel->setFont(font);
slider->setMinimum(0);
slider->setMaximum(100);
slider->setMaximum(int(FADER_PRECISION));
bool muted = obs_source_muted(source);
mute->setChecked(muted);
@ -498,6 +506,16 @@ void VolumeMeter::setPeakMeterType(enum obs_peak_meter_type peakMeterType)
}
}
void VolumeMeter::mousePressEvent(QMouseEvent *event)
{
setFocus(Qt::MouseFocusReason);
}
void VolumeMeter::wheelEvent(QWheelEvent *event)
{
QApplication::sendEvent(focusProxy(), event);
}
VolumeMeter::VolumeMeter(QWidget *parent, obs_volmeter_t *obs_volmeter,
bool vertical)
: QWidget(parent), obs_volmeter(obs_volmeter),
@ -528,6 +546,8 @@ VolumeMeter::VolumeMeter(QWidget *parent, obs_volmeter_t *obs_volmeter,
peakHoldDuration = 20.0; // 20 seconds
inputPeakHoldDuration = 1.0; // 1 second
channels = (int)audio_output_get_channels(obs_get_audio());
handleChannelCofigurationChange();
updateTimerRef = updateTimer.toStrongRef();
if (!updateTimerRef) {
@ -1007,16 +1027,22 @@ void VolumeMeter::paintEvent(QPaintEvent *event)
for (int channelNr = 0; channelNr < displayNrAudioChannels;
channelNr++) {
int channelNrFixed = (displayNrAudioChannels == 1 &&
channels > 2)
? 2
: channelNr;
if (vertical)
paintVMeter(painter, channelNr * 4, 8, 3, height - 10,
displayMagnitude[channelNr],
displayPeak[channelNr],
displayPeakHold[channelNr]);
displayMagnitude[channelNrFixed],
displayPeak[channelNrFixed],
displayPeakHold[channelNrFixed]);
else
paintHMeter(painter, 5, channelNr * 4, width - 5, 3,
displayMagnitude[channelNr],
displayPeak[channelNr],
displayPeakHold[channelNr]);
displayMagnitude[channelNrFixed],
displayPeak[channelNrFixed],
displayPeakHold[channelNrFixed]);
if (idle)
continue;
@ -1026,10 +1052,10 @@ void VolumeMeter::paintEvent(QPaintEvent *event)
// having too much visual impact.
if (vertical)
paintInputMeter(painter, channelNr * 4, 3, 3, 3,
displayInputPeakHold[channelNr]);
displayInputPeakHold[channelNrFixed]);
else
paintInputMeter(painter, 0, channelNr * 4, 3, 3,
displayInputPeakHold[channelNr]);
displayInputPeakHold[channelNrFixed]);
}
lastRedrawTime = ts;