diff options
Diffstat (limited to 'src/corelib/core/mscrollchain.cpp')
-rw-r--r-- | src/corelib/core/mscrollchain.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/corelib/core/mscrollchain.cpp b/src/corelib/core/mscrollchain.cpp index a292ec32..0d4ecd7f 100644 --- a/src/corelib/core/mscrollchain.cpp +++ b/src/corelib/core/mscrollchain.cpp @@ -61,6 +61,24 @@ void MScrollChain::addBottomUpScroll(const QRect &targetRect, } } +void MScrollChain::addMinimalScroll(const QRect &localRect, + int startingIndex, + int untilIndex) +{ + untilIndex = qBound<int>(0, untilIndex, chainItems.count() - 1); + startingIndex = qBound<int>(0, startingIndex, untilIndex); + + for (int i = startingIndex; i <= untilIndex; ++i) { + ScrollChainItem &chainItem(chainItems[i]); + + // Map target rectangle and origin point to delegate widget's local coordinates. + QRect delegateRect = mapToChainItemFromScrollTarget(chainItem, localRect); + + // Scroll the chain item. + chainItem.calculateScrolling(delegateRect, delegateRect.topLeft()); + } +} + void MScrollChain::applyScrolling() { for (ChainItemList::iterator item = chainItems.begin(); item != chainItems.end(); ++item) { @@ -198,6 +216,15 @@ QPoint MScrollChain::mapToChainItemFromScrollTarget(const ScrollChainItem &item, return mappedPoint; } + +QRect MScrollChain::mapToChainItemFromScrollTarget(const ScrollChainItem &item, + const QRect &rect) +{ + QRect moved = rect; + moved.moveTo(mapToChainItemFromScrollTarget(item, rect.topLeft())); + return moved; +} + QSharedPointer<MAbstractScroller> MScrollChain::findScrollerDelegate(const QGraphicsWidget *widget) const { QSharedPointer<MAbstractScroller> result; |