replace ScaledScrollBar with BigScrollBar

step 3 - connect wheel event
This commit is contained in:
2024-04-14 09:36:50 +02:00
parent 9b9399f120
commit 7d20bae74d

View File

@@ -1,5 +1,6 @@
import enum import enum
from PySide6.QtGui import QWheelEvent
from PySide6.QtWidgets import QWidget, QStylePainter, QStyle, QStyleOptionSlider, QSlider, QAbstractSlider from PySide6.QtWidgets import QWidget, QStylePainter, QStyle, QStyleOptionSlider, QSlider, QAbstractSlider
from PySide6.QtCore import Qt, QSize, QEvent, QRect, QPoint, Signal from PySide6.QtCore import Qt, QSize, QEvent, QRect, QPoint, Signal
@@ -46,7 +47,7 @@ class BigScrollBar(QWidget):
def paintEvent(self, event): def paintEvent(self, event):
p = QStylePainter(self) p = QStylePainter(self)
o = self.style_options() o = self.style_options()
print(f"style_options: sliderPosition: {o.sliderPosition}") # print(f"style_options: sliderPosition: {o.sliderPosition}")
p.drawComplexControl(QStyle.ComplexControl.CC_ScrollBar, o) p.drawComplexControl(QStyle.ComplexControl.CC_ScrollBar, o)
def style_options(self) -> QStyleOptionSlider: def style_options(self) -> QStyleOptionSlider:
@@ -67,8 +68,8 @@ class BigScrollBar(QWidget):
o.minimum = self.minimun * t o.minimum = self.minimun * t
o.maximum = self.maximum * t o.maximum = self.maximum * t
o.sliderPosition = int(self.value * t) o.sliderPosition = int(self.value * t)
print(f"t={t}") # print(f"t={t}")
print(f"({self.minimun}, {self.value}, {self.maximum}) -> ({o.minimum},{o.sliderPosition},{o.maximum})") # print(f"({self.minimun}, {self.value}, {self.maximum}) -> ({o.minimum},{o.sliderPosition},{o.maximum})")
return o return o
@@ -114,7 +115,7 @@ class BigScrollBar(QWidget):
self.pressedControl = self.style().hitTestComplexControl(QStyle.ComplexControl.CC_ScrollBar, style_options, self.pressedControl = self.style().hitTestComplexControl(QStyle.ComplexControl.CC_ScrollBar, style_options,
event.position().toPoint(), self) event.position().toPoint(), self)
print(f"pressedControl {self.pressedControl}") # print(f"pressedControl {self.pressedControl}")
sr: QRect = self.style().subControlRect(QStyle.ComplexControl.CC_ScrollBar, style_options, sr: QRect = self.style().subControlRect(QStyle.ComplexControl.CC_ScrollBar, style_options,
QStyle.SubControl.SC_ScrollBarSlider, self) QStyle.SubControl.SC_ScrollBarSlider, self)
@@ -140,7 +141,6 @@ class BigScrollBar(QWidget):
# self.repaint(self.style().subControlRect(QStyle.ComplexControl.CC_ScrollBar, style_options, self.pressedControl)) # self.repaint(self.style().subControlRect(QStyle.ComplexControl.CC_ScrollBar, style_options, self.pressedControl))
def activateControl(self, control): def activateControl(self, control):
action = QAbstractSlider.SliderAction.SliderNoAction
match control: match control:
case QStyle.SubControl.SC_ScrollBarAddPage: case QStyle.SubControl.SC_ScrollBarAddPage:
self.scroll_event.emit(self.ScrollEvent.PageDown) self.scroll_event.emit(self.ScrollEvent.PageDown)
@@ -177,6 +177,18 @@ class BigScrollBar(QWidget):
# print(f"move to value: {new_position}") # print(f"move to value: {new_position}")
self.set_value(new_position) self.set_value(new_position)
def wheelEvent(self, event: QWheelEvent):
event.ignore()
# when using a touchpad we can have simultaneous horizontal and vertical movement
horizontal = abs(event.angleDelta().x()) > abs(event.angleDelta().y())
if horizontal:
return
scroll_event = self.ScrollEvent.LinesDown if event.angleDelta().y() < 0 else self.ScrollEvent.LinesUp
self.scroll_event.emit(scroll_event)
def pixelPosToRangeValue(self, pos: int): def pixelPosToRangeValue(self, pos: int):
opt: QStyleOptionSlider = self.style_options() opt: QStyleOptionSlider = self.style_options()