Compare commits

...

2 Commits

Author SHA1 Message Date
9c1b8298be implement snap back
Only works on Windows. In Linux this is disabled.
2024-04-21 17:37:35 +02:00
811e3c7f82 cleanup 2024-04-21 17:30:19 +02:00

View File

@@ -1,8 +1,8 @@
import enum
from PySide6.QtGui import QWheelEvent
from PySide6.QtWidgets import QWidget, QStylePainter, QStyle, QStyleOptionSlider, QSlider, QAbstractSlider
from PySide6.QtCore import Qt, QSize, QEvent, QRect, QPoint, Signal, QTimer, QElapsedTimer
from PySide6.QtWidgets import QWidget, QStylePainter, QStyle, QStyleOptionSlider
from PySide6.QtCore import Qt, QSize, QEvent, QRect, QPoint, Signal, QTimer
class BigScrollBar(QWidget):
@@ -78,32 +78,15 @@ class BigScrollBar(QWidget):
return o
## QSize QScrollBar::sizeHint() const
# {
# ensurePolished();
# QStyleOptionSlider opt;
# initStyleOption(&opt);
# int scrollBarExtent = style()->pixelMetric(QStyle::PM_ScrollBarExtent, &opt, this);
# int scrollBarSliderMin = style()->pixelMetric(QStyle::PM_ScrollBarSliderMin, &opt, this);
# QSize size;
# if (opt.orientation == Qt::Horizontal)
# size = QSize(scrollBarExtent * 2 + scrollBarSliderMin, scrollBarExtent);
# else
# size = QSize(scrollBarExtent, scrollBarExtent * 2 + scrollBarSliderMin);
#
# return style()->sizeFromContents(QStyle::CT_ScrollBar, &opt, size, this);
# }
def sizeHint(self):
scroll_bar_extend = self.style().pixelMetric(QStyle.PixelMetric.PM_ScrollBarExtent)
scroll_bar_slider_min = self.style().pixelMetric(QStyle.PixelMetric.PM_ScrollBarSliderMin)
scroll_bar_extend: int = self.style().pixelMetric(QStyle.PixelMetric.PM_ScrollBarExtent)
scroll_bar_slider_min: int = self.style().pixelMetric(QStyle.PixelMetric.PM_ScrollBarSliderMin)
# print(f"scroll_bar_extend: {scroll_bar_extend}, scroll_bar_slider_min: {scroll_bar_slider_min}")
# for vertial
# for vertical
size = QSize(scroll_bar_extend, scroll_bar_extend * 2 + scroll_bar_slider_min)
o = self.style_options()
return self.style().sizeFromContents(QStyle.ContentsType.CT_ScrollBar, o, size, self)
opts = self.style_options()
return self.style().sizeFromContents(QStyle.ContentsType.CT_ScrollBar, opts, size, self)
def event(self, event: QEvent) -> bool:
# print(f"event type: {event.type()}")
@@ -135,6 +118,7 @@ class BigScrollBar(QWidget):
if self.pressedControl == QStyle.SubControl.SC_ScrollBarSlider:
self.click_offset = click.y() - sr.y()
self.snap_back_position = self.value
if (self.pressedControl == QStyle.SubControl.SC_ScrollBarAddPage
or self.pressedControl == QStyle.SubControl.SC_ScrollBarSubPage) \
@@ -225,9 +209,9 @@ class BigScrollBar(QWidget):
QStyle.SubControl.SC_ScrollBarSlider, self)
# only for vertical scrollbars
slider_length = sr.height();
slider_min = gr.y();
slider_max = gr.bottom() - slider_length + 1;
slider_length = sr.height()
slider_min = gr.y()
slider_max = gr.bottom() - slider_length + 1
val = QStyle.sliderValueFromPosition(opt.minimum, opt.maximum, pos - slider_min,
slider_max - slider_min, opt.upsideDown)