From df893dde814fbeb9f09f9ef0693a6cd1af2d1fcf Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sat, 4 Apr 2015 16:13:48 +0300 Subject: [PATCH 1/2] UI: Add SliderAbsoluteSetStyle class When this class is used in conjunction with a QSlider control, allows direct setting of the slider handle position when clicking in an area other than the slider handle. The default QSlider handle behavior is to step towards clicked position. --- obs/CMakeLists.txt | 2 ++ obs/slider-absoluteset-style.cpp | 19 +++++++++++++++++++ obs/slider-absoluteset-style.hpp | 12 ++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 obs/slider-absoluteset-style.cpp create mode 100644 obs/slider-absoluteset-style.hpp diff --git a/obs/CMakeLists.txt b/obs/CMakeLists.txt index dd36d0b1c..e96625e49 100644 --- a/obs/CMakeLists.txt +++ b/obs/CMakeLists.txt @@ -114,6 +114,7 @@ set(obs_SOURCES visibility-checkbox.cpp vertical-scroll-area.cpp visibility-item-widget.cpp + slider-absoluteset-style.cpp source-list-widget.cpp crash-report.cpp qt-wrappers.cpp) @@ -148,6 +149,7 @@ set(obs_HEADERS visibility-checkbox.hpp vertical-scroll-area.hpp visibility-item-widget.hpp + slider-absoluteset-style.hpp source-list-widget.hpp qt-display.hpp crash-report.hpp diff --git a/obs/slider-absoluteset-style.cpp b/obs/slider-absoluteset-style.cpp new file mode 100644 index 000000000..064f89a10 --- /dev/null +++ b/obs/slider-absoluteset-style.cpp @@ -0,0 +1,19 @@ +#include "slider-absoluteset-style.hpp" + +SliderAbsoluteSetStyle::SliderAbsoluteSetStyle(const QString& baseStyle) + :QProxyStyle(baseStyle) +{ +} +SliderAbsoluteSetStyle::SliderAbsoluteSetStyle(QStyle* baseStyle) + :QProxyStyle(baseStyle) +{ +} + +int SliderAbsoluteSetStyle::styleHint(QStyle::StyleHint hint, + const QStyleOption* option = 0, const QWidget* widget = 0, + QStyleHintReturn* returnData = 0) const +{ + if(hint == QStyle::SH_Slider_AbsoluteSetButtons) + return (Qt::LeftButton | Qt::MidButton); + return QProxyStyle::styleHint(hint, option, widget, returnData); +} diff --git a/obs/slider-absoluteset-style.hpp b/obs/slider-absoluteset-style.hpp new file mode 100644 index 000000000..a94ebebdd --- /dev/null +++ b/obs/slider-absoluteset-style.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include + +class SliderAbsoluteSetStyle : public QProxyStyle +{ +public: + SliderAbsoluteSetStyle(const QString& baseStyle); + SliderAbsoluteSetStyle(QStyle* baseStyle); + int styleHint(QStyle::StyleHint hint, const QStyleOption* option, + const QWidget* widget, QStyleHintReturn* returnData) const; +}; From 8ce623165a9f4eb8f4692f00404b53e342b14a66 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sat, 4 Apr 2015 16:19:22 +0300 Subject: [PATCH 2/2] UI: Change Volume Control volume slider behavior Replaced default volume slider style with SliderAbsoluteSetStyle. --- obs/volume-control.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/obs/volume-control.cpp b/obs/volume-control.cpp index 2dab2bb5a..2777b2d06 100644 --- a/obs/volume-control.cpp +++ b/obs/volume-control.cpp @@ -1,6 +1,7 @@ #include "volume-control.hpp" #include "qt-wrappers.hpp" #include "mute-checkbox.hpp" +#include "slider-absoluteset-style.hpp" #include #include #include @@ -161,6 +162,8 @@ VolControl::VolControl(OBSSource source_) obs_fader_attach_source(obs_fader, source); obs_volmeter_attach_source(obs_volmeter, source); + slider->setStyle(new SliderAbsoluteSetStyle(slider->style())); + /* Call volume changed once to init the slider position and label */ VolumeChanged(); }