Commit 8d61c9c7 authored by Martin Tobias Holmedahl Sandsmark's avatar Martin Tobias Holmedahl Sandsmark
Browse files

Fix scrolling on hidpi screens

Scrolling with libinput was unbearably slow.

QScrollBar is much better at scrolling than us, so let it handle it.

REVIEW: 128432
BUG: 357618
parent 4fad4405
......@@ -185,27 +185,7 @@ void KItemListContainer::wheelEvent(QWheelEvent* event)
KItemListSmoothScroller* smoothScroller = scrollHorizontally ?
m_horizontalSmoothScroller : m_verticalSmoothScroller;
const QScrollBar* scrollBar = smoothScroller->scrollBar();
if (!event->pixelDelta().isNull()) {
const int numPixels = event->pixelDelta().y();
if (event->modifiers().testFlag(Qt::ShiftModifier)) {
const int scrollingDirection = numPixels > 0 ? 1 : -1;
smoothScroller->scrollTo(scrollBar->value() - scrollBar->pageStep() * scrollingDirection);
} else {
smoothScroller->scrollTo(scrollBar->value() - numPixels);
}
} else {
const int numDegrees = event->angleDelta().y() / 8;
const int numSteps = qApp->wheelScrollLines() * numDegrees / 15;
if (event->modifiers().testFlag(Qt::ShiftModifier)) {
const int scrollingDirection = numSteps > 0 ? 1 : -1;
smoothScroller->scrollTo(scrollBar->value() - scrollBar->pageStep() * scrollingDirection);
} else {
smoothScroller->scrollTo(scrollBar->value() - numSteps * scrollBar->pageStep() / 12);
}
}
event->accept();
smoothScroller->handleWheelEvent(event);
}
void KItemListContainer::slotScrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous)
......
......@@ -172,8 +172,7 @@ bool KItemListSmoothScroller::eventFilter(QObject* obj, QEvent* event)
break;
case QEvent::Wheel:
handleWheelEvent(static_cast<QWheelEvent*>(event));
return true; // eat event so that QScrollBar does not scroll one step more by itself
return false; // we're the ones sending them
default:
break;
......@@ -196,25 +195,11 @@ void KItemListSmoothScroller::handleWheelEvent(QWheelEvent* event)
const bool previous = m_smoothScrolling;
m_smoothScrolling = true;
int numPixels;
if (!event->pixelDelta().isNull()) {
numPixels = event->pixelDelta().y();
} else {
const int numDegrees = event->angleDelta().y() / 8;
const int numSteps = qApp->wheelScrollLines() * numDegrees / 15;
numPixels = numSteps * m_scrollBar->pageStep() / 12;
}
int value = m_scrollBar->value();
if (event->modifiers().testFlag(Qt::ShiftModifier)) {
const int scrollingDirection = numPixels > 0 ? 1 : -1;
value -= m_scrollBar->pageStep() * scrollingDirection;
} else {
value -= numPixels;
}
m_scrollBar->setValue(value);
m_smoothScrolling = previous;
QWheelEvent copy = *event;
QApplication::sendEvent(m_scrollBar, &copy);
event->setAccepted(copy.isAccepted());
event->accept();
m_smoothScrolling = previous;
}
......@@ -77,6 +77,11 @@ public:
// stable.
bool requestScrollBarUpdate(int newMaximum);
/**
* Forwards wheel events to the scrollbar, ensuring smooth and proper scrolling
*/
void handleWheelEvent(QWheelEvent* event);
protected:
virtual bool eventFilter(QObject* obj, QEvent* event);
......@@ -84,13 +89,6 @@ private slots:
void slotAnimationStateChanged(QAbstractAnimation::State newState,
QAbstractAnimation::State oldState);
private:
/**
* Results into a smooth-scrolling of the target dependent on the direction
* of the wheel event.
*/
void handleWheelEvent(QWheelEvent* event);
private:
bool m_scrollBarPressed;
bool m_smoothScrolling;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment