58 KConfigGroup config = KSharedConfig::openConfig()->group(
"");
59 int sensitivity = config.readEntry(
"KineticScrollingSensitivity", 75);
60 bool enabled = config.readEntry(
"KineticScrollingEnabled",
true);
61 bool hideScrollBars = config.readEntry(
"KineticScrollingHideScrollbar",
false);
62 float resistanceCoefficient = config.readEntry(
"KineticScrollingResistanceCoefficient", 10.0f);
63 float dragVelocitySmoothFactor = config.readEntry(
"KineticScrollingDragVelocitySmoothingFactor", 1.0f);
64 float minimumVelocity = config.readEntry(
"KineticScrollingMinimumVelocity", 0.0f);
65 float axisLockThresh = config.readEntry(
"KineticScrollingAxisLockThreshold", 1.0f);
66 float maximumClickThroughVelocity = config.readEntry(
"KineticScrollingMaxClickThroughVelocity", 0.0f);
67 float flickAccelerationFactor = config.readEntry(
"KineticScrollingFlickAccelerationFactor", 1.5f);
68 float overshootDragResistanceFactor = config.readEntry(
"KineticScrollingOvershotDragResistanceFactor", 0.1f);
69 float overshootDragDistanceFactor = config.readEntry(
"KineticScrollingOvershootDragDistanceFactor", 0.3f);
70 float overshootScrollDistanceFactor = config.readEntry(
"KineticScrollingOvershootScrollDistanceFactor", 0.1f);
71 float overshootScrollTime = config.readEntry(
"KineticScrollingOvershootScrollTime", 0.4f);
74 if (enabled && scrollArea) {
76 scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOff);
77 scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOff);
78 }
else if (gestureType != QScroller::TouchGesture) {
79 auto *filter =
new KisKineticScrollerEventFilter(gestureType, scrollArea);
80 scrollArea->horizontalScrollBar()->installEventFilter(filter);
81 scrollArea->verticalScrollBar()->installEventFilter(filter);
84 QAbstractItemView *itemView = qobject_cast<QAbstractItemView *>(scrollArea);
86 itemView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
89 QScroller *scroller = QScroller::scroller(scrollArea);
90 QScroller::grabGesture(scrollArea, gestureType);
92 QScrollerProperties properties;
98 const float mm = 0.001f;
99 const float resistance = 1.0f - (sensitivity / 100.0f);
100 const float mousePressEventDelay = config.readEntry(
"KineticScrollingMousePressDelay", 1.0f - 0.75f * resistance);
102 properties.setScrollMetric(QScrollerProperties::DragStartDistance, resistance * resistanceCoefficient * mm);
103 properties.setScrollMetric(QScrollerProperties::DragVelocitySmoothingFactor, dragVelocitySmoothFactor);
104 properties.setScrollMetric(QScrollerProperties::MinimumVelocity, minimumVelocity);
105 properties.setScrollMetric(QScrollerProperties::AxisLockThreshold, axisLockThresh);
106 properties.setScrollMetric(QScrollerProperties::MaximumClickThroughVelocity, maximumClickThroughVelocity);
107 properties.setScrollMetric(QScrollerProperties::MousePressEventDelay, mousePressEventDelay);
108 properties.setScrollMetric(QScrollerProperties::AcceleratingFlickSpeedupFactor, flickAccelerationFactor);
110 properties.setScrollMetric(QScrollerProperties::VerticalOvershootPolicy, QScrollerProperties::OvershootAlwaysOn);
111 properties.setScrollMetric(QScrollerProperties::OvershootDragResistanceFactor, overshootDragResistanceFactor);
112 properties.setScrollMetric(QScrollerProperties::OvershootDragDistanceFactor, overshootDragDistanceFactor);
113 properties.setScrollMetric(QScrollerProperties::OvershootScrollDistanceFactor, overshootScrollDistanceFactor);
114 properties.setScrollMetric(QScrollerProperties::OvershootScrollTime, overshootScrollTime);
116 scroller->setScrollerProperties(properties);