mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
Merge branch 'patch-1' into 'master'
qpaeq: fix: resizing on HiDPI See merge request pulseaudio/pulseaudio!41
This commit is contained in:
commit
fc43742806
1 changed files with 45 additions and 17 deletions
|
|
@ -30,6 +30,7 @@ except ImportError as e:
|
|||
|
||||
from functools import partial
|
||||
|
||||
import time
|
||||
import signal
|
||||
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
||||
SYNC_TIMEOUT = 4*1000
|
||||
|
|
@ -295,6 +296,10 @@ class QPaeq(QtWidgets.QWidget):
|
|||
|
||||
|
||||
class SliderArray(QtWidgets.QWidget):
|
||||
|
||||
# Pointless to use more than 100 frequencies:
|
||||
MAX_FREQS_NUM = 100
|
||||
|
||||
def __init__(self,filter_state,parent=None):
|
||||
super(SliderArray,self).__init__(parent)
|
||||
#self.setStyleSheet('padding: 0px; border-width: 0px; margin: 0px;')
|
||||
|
|
@ -303,7 +308,10 @@ class SliderArray(QtWidgets.QWidget):
|
|||
self.setLayout(QtWidgets.QHBoxLayout())
|
||||
self.sub_array=None
|
||||
self.set_sub_array(SliderArraySub(self.filter_state))
|
||||
self.inhibit_resize=0
|
||||
self.width_per_freq=None
|
||||
self.resizer_timer=None
|
||||
self.last_resize_planned=None
|
||||
|
||||
def set_sub_array(self,widget):
|
||||
if self.sub_array is not None:
|
||||
self.layout().removeWidget(self.sub_array)
|
||||
|
|
@ -313,23 +321,41 @@ class SliderArray(QtWidgets.QWidget):
|
|||
self.layout().addWidget(self.sub_array)
|
||||
self.sub_array.connect_signals()
|
||||
self.filter_state.readback()
|
||||
|
||||
def resizeEvent(self,event):
|
||||
super(SliderArray,self).resizeEvent(event)
|
||||
if self.inhibit_resize==0:
|
||||
self.inhibit_resize+=1
|
||||
#self.add_sliders_to_fit()
|
||||
t=QtCore.QTimer(self)
|
||||
t.setSingleShot(True)
|
||||
t.setInterval(0)
|
||||
t.timeout.connect(partial(self.add_sliders_to_fit,event))
|
||||
t.start()
|
||||
def add_sliders_to_fit(self,event):
|
||||
if event.oldSize().width()>0 and event.size().width()>0:
|
||||
i=len(self.filter_state.frequencies)*int(round(float(event.size().width())/event.oldSize().width()))
|
||||
else:
|
||||
i=len(self.filter_state.frequencies)
|
||||
|
||||
if self.width_per_freq is None:
|
||||
# This was a resize after initial draw -> no need to recalculate anything.
|
||||
# But will precalculate average width per slider:
|
||||
self.width_per_freq=self.size().width()/len(self.filter_state.frequencies)
|
||||
# Why this is needed:
|
||||
# event.oldSize().width() and event.size().width() may give strange irrelevant values on
|
||||
# HiDPI screens (with QT_AUTO_SCREEN_SCALE_FACTOR=1), e.g. resize by 40 pixels can give
|
||||
# (32540, 1071644672) as old and new widths, so it's a bad source for info.
|
||||
# Instead we can remember average width per freq and use it later.
|
||||
return
|
||||
else:
|
||||
#self.add_sliders_to_fit()
|
||||
if self.resizer_timer is None:
|
||||
self.resizer_timer=QtCore.QTimer(self)
|
||||
self.resizer_timer.setSingleShot(True)
|
||||
self.resizer_timer.setInterval(50)
|
||||
self.resizer_timer.timeout.connect(partial(self.add_sliders_to_fit,event))
|
||||
self.last_resize_planned = time.time()
|
||||
self.resizer_timer.start()
|
||||
elif (time.time() - self.last_resize_planned) < 0.2:
|
||||
# Restart timer if it is still running and less than 0.2 seconds have passed.
|
||||
# Final behaviour:
|
||||
# * if user keeps resizing window then sliders will be redrawn each 250ms
|
||||
# * if user finishes resizing, sliders will be redrawn 50ms later
|
||||
self.resizer_timer.start()
|
||||
|
||||
def add_sliders_to_fit(self,event):
|
||||
t_w=self.size().width()
|
||||
# new number of frequencies:
|
||||
i=min(self.MAX_FREQS_NUM,int(t_w/self.width_per_freq))
|
||||
|
||||
def evaluate(filter_state, target, variable):
|
||||
base_freqs=self.filter_state.freq_proper(self.filter_state.DEFAULT_FREQUENCIES)
|
||||
filter_state._set_frequency_values(subdivide(base_freqs,variable))
|
||||
|
|
@ -354,9 +380,11 @@ class SliderArray(QtWidgets.QWidget):
|
|||
return k, evaluator(k)
|
||||
i-=direction
|
||||
old_direction=direction
|
||||
searcher(i,partial(evaluate,self.filter_state,t_w))
|
||||
self.set_sub_array(SliderArraySub(self.filter_state))
|
||||
self.inhibit_resize-=1
|
||||
|
||||
if i!=len(self.filter_state.frequencies):
|
||||
searcher(i,partial(evaluate,self.filter_state,t_w))
|
||||
self.set_sub_array(SliderArraySub(self.filter_state))
|
||||
self.resizer_timer=None
|
||||
|
||||
class SliderArraySub(QtWidgets.QWidget):
|
||||
def __init__(self,filter_state,parent=None):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue