mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-09-11 11:06:03 -05:00
Increase precision of volume widget slider
This commit is contained in:
@@ -151,6 +151,8 @@ target_sources(
|
|||||||
lib/utils/backup.hpp
|
lib/utils/backup.hpp
|
||||||
lib/utils/curl-helper.cpp
|
lib/utils/curl-helper.cpp
|
||||||
lib/utils/curl-helper.hpp
|
lib/utils/curl-helper.hpp
|
||||||
|
lib/utils/double-slider.cpp
|
||||||
|
lib/utils/double-slider.hpp
|
||||||
lib/utils/duration-control.cpp
|
lib/utils/duration-control.cpp
|
||||||
lib/utils/duration-control.hpp
|
lib/utils/duration-control.hpp
|
||||||
lib/utils/duration.cpp
|
lib/utils/duration.cpp
|
||||||
|
|||||||
63
lib/utils/double-slider.cpp
Normal file
63
lib/utils/double-slider.cpp
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#include "double-slider.hpp"
|
||||||
|
#include <QWheelEvent>
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
namespace advss {
|
||||||
|
|
||||||
|
SliderIgnoreScroll::SliderIgnoreScroll(QWidget *parent) : QSlider(parent)
|
||||||
|
{
|
||||||
|
setFocusPolicy(Qt::StrongFocus);
|
||||||
|
}
|
||||||
|
|
||||||
|
SliderIgnoreScroll::SliderIgnoreScroll(Qt::Orientation orientation,
|
||||||
|
QWidget *parent)
|
||||||
|
: QSlider(parent)
|
||||||
|
{
|
||||||
|
setFocusPolicy(Qt::StrongFocus);
|
||||||
|
setOrientation(orientation);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SliderIgnoreScroll::wheelEvent(QWheelEvent *event)
|
||||||
|
{
|
||||||
|
if (!hasFocus()) {
|
||||||
|
event->ignore();
|
||||||
|
} else {
|
||||||
|
QSlider::wheelEvent(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DoubleSlider::DoubleSlider(QWidget *parent) : SliderIgnoreScroll(parent)
|
||||||
|
{
|
||||||
|
connect(this, &DoubleSlider::valueChanged, [this](int val) {
|
||||||
|
emit DoubleValChanged((minVal / minStep + val) * minStep);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoubleSlider::SetDoubleConstraints(double newMin, double newMax,
|
||||||
|
double newStep, double val)
|
||||||
|
{
|
||||||
|
minVal = newMin;
|
||||||
|
maxVal = newMax;
|
||||||
|
minStep = newStep;
|
||||||
|
|
||||||
|
double total = maxVal - minVal;
|
||||||
|
int intMax = int(total / minStep);
|
||||||
|
|
||||||
|
setMinimum(0);
|
||||||
|
setMaximum(intMax);
|
||||||
|
setSingleStep(1);
|
||||||
|
SetDoubleVal(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
double DoubleSlider::DoubleValue()
|
||||||
|
{
|
||||||
|
return (minVal / minStep + value()) * minStep;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoubleSlider::SetDoubleVal(double val)
|
||||||
|
{
|
||||||
|
setValue(lround((val - minVal) / minStep));
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace advss
|
||||||
40
lib/utils/double-slider.hpp
Normal file
40
lib/utils/double-slider.hpp
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
// Based on OBS DoubleSlider and SliderIgnoreScroll implementation
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "export-symbol-helper.hpp"
|
||||||
|
|
||||||
|
#include <QSlider>
|
||||||
|
|
||||||
|
namespace advss {
|
||||||
|
|
||||||
|
class SliderIgnoreScroll : public QSlider {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
SliderIgnoreScroll(QWidget *parent = nullptr);
|
||||||
|
SliderIgnoreScroll(Qt::Orientation orientation,
|
||||||
|
QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void wheelEvent(QWheelEvent *event) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ADVSS_EXPORT DoubleSlider : public SliderIgnoreScroll {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
double minVal = 0, maxVal = 100, minStep = 1;
|
||||||
|
|
||||||
|
public:
|
||||||
|
DoubleSlider(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
void SetDoubleConstraints(double newMin, double newMax, double newStep,
|
||||||
|
double val);
|
||||||
|
double DoubleValue();
|
||||||
|
signals:
|
||||||
|
void DoubleValChanged(double val);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void SetDoubleVal(double val);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace advss
|
||||||
@@ -90,15 +90,17 @@ void VolControl::setPeakMeterType(enum obs_peak_meter_type peakMeterType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
VolumeSlider::VolumeSlider(obs_fader_t *fader, QWidget *parent)
|
VolumeSlider::VolumeSlider(obs_fader_t *fader, QWidget *parent)
|
||||||
: QSlider(parent)
|
: DoubleSlider(parent)
|
||||||
{
|
{
|
||||||
fad = fader;
|
fad = fader;
|
||||||
}
|
}
|
||||||
|
|
||||||
VolumeSlider::VolumeSlider(obs_fader_t *fader, Qt::Orientation orientation,
|
VolumeSlider::VolumeSlider(obs_fader_t *fader, Qt::Orientation orientation,
|
||||||
QWidget *parent)
|
QWidget *parent)
|
||||||
: QSlider(orientation, parent)
|
: DoubleSlider(parent)
|
||||||
{
|
{
|
||||||
|
SetDoubleConstraints(0, 100, 0.01, 0);
|
||||||
|
setOrientation(orientation);
|
||||||
fad = fader;
|
fad = fader;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,7 +221,6 @@ VolControl::VolControl(OBSSource source_, bool showConfig, bool vertical)
|
|||||||
nameLabel->setText(sourceName);
|
nameLabel->setText(sourceName);
|
||||||
|
|
||||||
slider->setMinimum(0);
|
slider->setMinimum(0);
|
||||||
slider->setMaximum(int(FADER_PRECISION));
|
|
||||||
|
|
||||||
obs_fader_add_callback(obs_fader, OBSVolumeChanged, this);
|
obs_fader_add_callback(obs_fader, OBSVolumeChanged, this);
|
||||||
obs_volmeter_add_callback(obs_volmeter, OBSVolumeLevel, this);
|
obs_volmeter_add_callback(obs_volmeter, OBSVolumeLevel, this);
|
||||||
@@ -592,7 +593,9 @@ void VolumeMeter::mousePressEvent(QMouseEvent *event)
|
|||||||
|
|
||||||
VolumeMeter::VolumeMeter(QWidget *parent, obs_volmeter_t *obs_volmeter,
|
VolumeMeter::VolumeMeter(QWidget *parent, obs_volmeter_t *obs_volmeter,
|
||||||
bool vertical)
|
bool vertical)
|
||||||
: QWidget(parent), obs_volmeter(obs_volmeter), vertical(vertical)
|
: QWidget(parent),
|
||||||
|
obs_volmeter(obs_volmeter),
|
||||||
|
vertical(vertical)
|
||||||
{
|
{
|
||||||
setAttribute(Qt::WA_OpaquePaintEvent, true);
|
setAttribute(Qt::WA_OpaquePaintEvent, true);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include "double-slider.hpp"
|
||||||
|
|
||||||
#include <obs.hpp>
|
#include <obs.hpp>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
@@ -284,7 +285,7 @@ private:
|
|||||||
QLabel *nameLabel;
|
QLabel *nameLabel;
|
||||||
QLabel *volLabel;
|
QLabel *volLabel;
|
||||||
VolumeMeter *volMeter;
|
VolumeMeter *volMeter;
|
||||||
QSlider *slider;
|
DoubleSlider *slider;
|
||||||
QPushButton *config = nullptr;
|
QPushButton *config = nullptr;
|
||||||
float levelTotal;
|
float levelTotal;
|
||||||
float levelCount;
|
float levelCount;
|
||||||
@@ -327,10 +328,10 @@ public:
|
|||||||
inline void SetContextMenu(QMenu *cm) { contextMenu = cm; }
|
inline void SetContextMenu(QMenu *cm) { contextMenu = cm; }
|
||||||
|
|
||||||
void refreshColors();
|
void refreshColors();
|
||||||
QSlider *GetSlider() const { return slider; }
|
DoubleSlider *GetSlider() const { return slider; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class VolumeSlider : public QSlider {
|
class VolumeSlider : public DoubleSlider {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|||||||
Reference in New Issue
Block a user