From c91c770ef1a60e7966048ece0ebfe861c8b288d1 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Sat, 13 Dec 2008 15:29:42 +0000 Subject: [PATCH] provide separate scroll increments for the horizontal and vertical scrolling svn path=/trunk/KDE/kdebase/apps/; revision=896466 --- src/dolphinviewautoscroller.cpp | 40 ++++++++++++++++++--------------- src/dolphinviewautoscroller.h | 7 +++--- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/dolphinviewautoscroller.cpp b/src/dolphinviewautoscroller.cpp index 04a396b9a..767a5b458 100644 --- a/src/dolphinviewautoscroller.cpp +++ b/src/dolphinviewautoscroller.cpp @@ -30,7 +30,8 @@ DolphinViewAutoScroller::DolphinViewAutoScroller(QAbstractItemView* parent) : QObject(parent), m_rubberBandSelection(false), - m_scrollInc(0), + m_horizontalScrollInc(0), + m_verticalScrollInc(0), m_itemView(parent), m_timer() { @@ -93,13 +94,13 @@ void DolphinViewAutoScroller::scrollViewport() QScrollBar* verticalScrollBar = m_itemView->verticalScrollBar(); if (verticalScrollBar != 0) { const int value = verticalScrollBar->value(); - verticalScrollBar->setValue(value + m_scrollInc); + verticalScrollBar->setValue(value + m_verticalScrollInc); } QScrollBar* horizontalScrollBar = m_itemView->horizontalScrollBar(); if (horizontalScrollBar != 0) { const int value = horizontalScrollBar->value(); - horizontalScrollBar->setValue(value + m_scrollInc); + horizontalScrollBar->setValue(value + m_horizontalScrollInc); } @@ -117,7 +118,7 @@ void DolphinViewAutoScroller::scrollViewport() void DolphinViewAutoScroller::triggerAutoScroll() { const bool verticalScrolling = (m_itemView->verticalScrollBar() != 0) && - m_itemView->verticalScrollBar()->isVisible(); + m_itemView->verticalScrollBar()->isVisible(); const bool horizontalScrolling = (m_itemView->horizontalScrollBar() != 0) && m_itemView->horizontalScrollBar()->isVisible(); if (!verticalScrolling && !horizontalScrolling) { @@ -128,17 +129,17 @@ void DolphinViewAutoScroller::triggerAutoScroll() QWidget* viewport = m_itemView->viewport(); const QPoint pos = viewport->mapFromGlobal(QCursor::pos()); if (verticalScrolling) { - calculateScrollIncrement(pos.y(), viewport->height()); + m_verticalScrollInc = calculateScrollIncrement(pos.y(), viewport->height()); } if (horizontalScrolling) { - calculateScrollIncrement(pos.x(), viewport->width()); + m_horizontalScrollInc = calculateScrollIncrement(pos.x(), viewport->width()); } if (m_timer->isActive()) { - if (m_scrollInc == 0) { + if ((m_horizontalScrollInc == 0) && (m_verticalScrollInc == 0)) { m_timer->stop(); } - } else if (m_scrollInc != 0) { + } else if ((m_horizontalScrollInc != 0) || (m_verticalScrollInc != 0)) { m_timer->start(); } } @@ -146,29 +147,32 @@ void DolphinViewAutoScroller::triggerAutoScroll() void DolphinViewAutoScroller::stopAutoScroll() { m_timer->stop(); - m_scrollInc = 0; + m_horizontalScrollInc = 0; + m_verticalScrollInc = 0; } -void DolphinViewAutoScroller::calculateScrollIncrement(int cursorPos, int rangeSize) +int DolphinViewAutoScroller::calculateScrollIncrement(int cursorPos, int rangeSize) const { + int inc = 0; + const int minSpeed = 2; const int maxSpeed = 32; const int speedLimiter = 8; const int autoScrollBorder = 32; if (cursorPos < autoScrollBorder) { - m_scrollInc = -minSpeed + (cursorPos - autoScrollBorder) / speedLimiter; - if (m_scrollInc < -maxSpeed) { - m_scrollInc = -maxSpeed; + inc = -minSpeed + (cursorPos - autoScrollBorder) / speedLimiter; + if (inc < -maxSpeed) { + inc = -maxSpeed; } } else if (cursorPos > rangeSize - autoScrollBorder) { - m_scrollInc = minSpeed + (cursorPos - rangeSize + autoScrollBorder) / speedLimiter; - if (m_scrollInc > maxSpeed) { - m_scrollInc = maxSpeed; + inc = minSpeed + (cursorPos - rangeSize + autoScrollBorder) / speedLimiter; + if (inc > maxSpeed) { + inc = maxSpeed; } - } else { - m_scrollInc = 0; } + + return inc; } #include "dolphinviewautoscroller.moc" diff --git a/src/dolphinviewautoscroller.h b/src/dolphinviewautoscroller.h index f0f57049b..6ef6631f7 100644 --- a/src/dolphinviewautoscroller.h +++ b/src/dolphinviewautoscroller.h @@ -50,14 +50,15 @@ private: void stopAutoScroll(); /** - * Calculates the scroll increment m_scrollInc dependent from + * Calculates the scroll increment dependent from * the cursor position \a cursorPos and the range 0 - \a rangeSize - 1. */ - void calculateScrollIncrement(int cursorPos, int rangeSize); + int calculateScrollIncrement(int cursorPos, int rangeSize) const; private: bool m_rubberBandSelection; - int m_scrollInc; + int m_horizontalScrollInc; + int m_verticalScrollInc; QAbstractItemView* m_itemView; QTimer* m_timer; }; -- 2.47.3