64 KConfigGroup config = KSharedConfig::openConfig()->group(
"");
65 int sensitivity = config.readEntry(
"KineticScrollingSensitivity", 75);
66 bool enabled = config.readEntry(
"KineticScrollingEnabled",
true);
67 bool hideScrollBars = config.readEntry(
"KineticScrollingHideScrollbar",
false);
68 float resistanceCoefficient = config.readEntry(
"KineticScrollingResistanceCoefficient", 10.0f);
69 float dragVelocitySmoothFactor = config.readEntry(
"KineticScrollingDragVelocitySmoothingFactor", 1.0f);
70 float minimumVelocity = config.readEntry(
"KineticScrollingMinimumVelocity", 0.0f);
71 float axisLockThresh = config.readEntry(
"KineticScrollingAxisLockThreshold", 1.0f);
72 float maximumClickThroughVelocity = config.readEntry(
"KineticScrollingMaxClickThroughVelocity", 0.0f);
73 float flickAccelerationFactor = config.readEntry(
"KineticScrollingFlickAccelerationFactor", 1.5f);
74 float overshootDragResistanceFactor = config.readEntry(
"KineticScrollingOvershotDragResistanceFactor", 0.1f);
75 float overshootDragDistanceFactor = config.readEntry(
"KineticScrollingOvershootDragDistanceFactor", 0.3f);
76 float overshootScrollDistanceFactor = config.readEntry(
"KineticScrollingOvershootScrollDistanceFactor", 0.1f);
77 float overshootScrollTime = config.readEntry(
"KineticScrollingOvershootScrollTime", 0.4f);
80 if (enabled && scrollArea) {
82 scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOff);
83 scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOff);
84 }
else if (gestureType != QScroller::TouchGesture) {
85 auto *filter =
new KisKineticScrollerEventFilter(gestureType, scrollArea);
86 scrollArea->horizontalScrollBar()->installEventFilter(filter);
87 scrollArea->verticalScrollBar()->installEventFilter(filter);
90 QAbstractItemView *itemView = qobject_cast<QAbstractItemView *>(scrollArea);
92 itemView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
95 QScroller *scroller = QScroller::scroller(scrollArea);
96 QScroller::grabGesture(scrollArea, gestureType);
98 QScrollerProperties properties;
104 const float mm = 0.001f;
105 const float resistance = 1.0f - (sensitivity / 100.0f);
106 float mousePressEventDelay = config.readEntry(
"KineticScrollingMousePressDelay", 1.0f - 0.75f * resistance);
112 QAndroidJniObject::callStaticMethod<jint>(
"org/krita/android/MainActivity",
"getLongPressTimeout",
"()I");
114 int maxDelayMs = qApp->styleHints()->mousePressAndHoldInterval();
116 float maxDelay = float(maxDelayMs) / 1000.0f;
117 if (mousePressEventDelay > maxDelay) {
118 mousePressEventDelay = maxDelay;
121 properties.setScrollMetric(QScrollerProperties::DragStartDistance, resistance * resistanceCoefficient * mm);
122 properties.setScrollMetric(QScrollerProperties::DragVelocitySmoothingFactor, dragVelocitySmoothFactor);
123 properties.setScrollMetric(QScrollerProperties::MinimumVelocity, minimumVelocity);
124 properties.setScrollMetric(QScrollerProperties::AxisLockThreshold, axisLockThresh);
125 properties.setScrollMetric(QScrollerProperties::MaximumClickThroughVelocity, maximumClickThroughVelocity);
126 properties.setScrollMetric(QScrollerProperties::MousePressEventDelay, mousePressEventDelay);
127 properties.setScrollMetric(QScrollerProperties::AcceleratingFlickSpeedupFactor, flickAccelerationFactor);
129 properties.setScrollMetric(QScrollerProperties::VerticalOvershootPolicy, QScrollerProperties::OvershootAlwaysOn);
130 properties.setScrollMetric(QScrollerProperties::OvershootDragResistanceFactor, overshootDragResistanceFactor);
131 properties.setScrollMetric(QScrollerProperties::OvershootDragDistanceFactor, overshootDragDistanceFactor);
132 properties.setScrollMetric(QScrollerProperties::OvershootScrollDistanceFactor, overshootScrollDistanceFactor);
133 properties.setScrollMetric(QScrollerProperties::OvershootScrollTime, overshootScrollTime);
135 scroller->setScrollerProperties(properties);