volume-control.hpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #pragma once
  2. #include <obs.hpp>
  3. #include <QWidget>
  4. class VolumeMeter : public QWidget
  5. {
  6. Q_OBJECT
  7. private:
  8. float mag, peak, peakHold;
  9. QColor bkColor, magColor, peakColor, peakHoldColor;
  10. QTimer *resetTimer;
  11. public:
  12. explicit VolumeMeter(QWidget *parent = 0);
  13. void setLevels(float nmag, float npeak, float npeakHold);
  14. protected:
  15. void paintEvent(QPaintEvent *event);
  16. private slots:
  17. void resetState();
  18. };
  19. class QLabel;
  20. class QSlider;
  21. class VolControl : public QWidget {
  22. Q_OBJECT
  23. private:
  24. OBSSource source;
  25. QLabel *nameLabel;
  26. QLabel *volLabel;
  27. VolumeMeter *volMeter;
  28. QSlider *slider;
  29. bool signalChanged;
  30. uint64_t lastMeterTime;
  31. float levelTotal;
  32. float levelCount;
  33. static void OBSVolumeChanged(void *param, calldata_t *calldata);
  34. static void OBSVolumeLevel(void *data, calldata_t *calldata);
  35. private slots:
  36. void VolumeChanged(int vol);
  37. void VolumeLevel(float mag, float peak, float peakHold);
  38. void SliderChanged(int vol);
  39. public:
  40. VolControl(OBSSource source);
  41. ~VolControl();
  42. inline obs_source_t *GetSource() const {return source;}
  43. QString GetName() const;
  44. void SetName(const QString &newName);
  45. };