diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2015-09-07 00:18:42 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2015-09-07 00:18:42 +0900 |
commit | e418211d50821c0f65ca2e65c542e8c0afe2c066 (patch) | |
tree | 9edcec2d1f1b6539e18f6e06564df105c93efd98 /src/widgets/qiconview.cpp | |
parent | caab7b355740dd9661046c1bf73e1add9de9d045 (diff) | |
download | tqt3-e418211d50821c0f65ca2e65c542e8c0afe2c066.tar.gz tqt3-e418211d50821c0f65ca2e65c542e8c0afe2c066.zip |
Fixed (again) search algorithm for iconview widget. This resolves (again) bug 420.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'src/widgets/qiconview.cpp')
-rw-r--r-- | src/widgets/qiconview.cpp | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/src/widgets/qiconview.cpp b/src/widgets/qiconview.cpp index 224c7e66a..28c8d8570 100644 --- a/src/widgets/qiconview.cpp +++ b/src/widgets/qiconview.cpp @@ -5313,23 +5313,21 @@ void TQIconView::keyPressEvent( TQKeyEvent *e ) /* Finds the closest item in the direction \a dir starting from the specified \a fromItem. - If the arrangement is LeftToRight (icon view mode): use center as item reference - If the arrangement is TopToBottom (multicolumn view mode): use left top corner as item reference + If the arrangement is LeftToRight (icon view mode): use (center, top) as item reference + If the arrangement is TopToBottom (multicolumn view mode): use (left, top) as item reference + This is to allow for smooth scrolling when using the keyboard arrow keys. */ TQIconViewItem* TQIconView::findItem(Direction dir, const TQIconViewItem *fromItem) const { TQIconViewItem *closestItem=NULL; int distPri=0, distSec=0; int itemDistancePri=0, itemDistanceSec=0; - - TQPoint pos; + + TQPoint pos=fromItem->rect().topLeft(); if (d->arrangement == LeftToRight) { - pos=fromItem->rect().center(); - } - else { - pos=fromItem->rect().topLeft(); + pos.setX(fromItem->rect().center().x()); } - + TQRect searchRect; switch (dir) { case DirDown: @@ -5359,16 +5357,16 @@ TQIconViewItem* TQIconView::findItem(Direction dir, const TQIconViewItem *fromIt // DirDown/DirUp : primary distance X, secondary distance Y // DirLeft/DirRight: primary distance Y, secondary distance X if (d->arrangement == LeftToRight) { - // Left to right arrangement (icon view mode): use center as item reference + // Left to right arrangement (icon view mode): use (center, top) as item reference switch (dir) { case DirDown: if (ir.center().x() > pos.x()) { distPri = ir.center().x()-pos.x(); - distSec = ir.center().y(); + distSec = ir.top(); } - else if (ir.center().x() == pos.x() && ir.center().y() > pos.y()) { + else if (ir.center().x() == pos.x() && ir.top() > pos.y()) { distPri = 0; - distSec = ir.center().y()-pos.y(); + distSec = ir.top()-pos.y(); } else { itemOK = false; @@ -5378,11 +5376,11 @@ TQIconViewItem* TQIconView::findItem(Direction dir, const TQIconViewItem *fromIt case DirUp: if (ir.center().x() < pos.x()) { distPri = pos.x()-ir.center().x(); - distSec = contentsHeight()-ir.center().y(); + distSec = contentsHeight()-ir.top(); } - else if (ir.center().x() == pos.x() && ir.center().y() < pos.y()) { + else if (ir.center().x() == pos.x() && ir.top() < pos.y()) { distPri = 0; - distSec = pos.y()-ir.center().y(); + distSec = pos.y()-ir.top(); } else { itemOK = false; @@ -5390,11 +5388,11 @@ TQIconViewItem* TQIconView::findItem(Direction dir, const TQIconViewItem *fromIt break; case DirRight: - if (ir.center().y() > pos.y()) { - distPri = ir.center().y()-pos.y(); + if (ir.top() > pos.y()) { + distPri = ir.top()-pos.y(); distSec = ir.center().x(); } - else if (ir.center().y() == pos.y() && ir.center().x() > pos.x()) { + else if (ir.top() == pos.y() && ir.center().x() > pos.x()) { distPri = 0; distSec = ir.center().x()-pos.x(); } @@ -5404,11 +5402,11 @@ TQIconViewItem* TQIconView::findItem(Direction dir, const TQIconViewItem *fromIt break; case DirLeft: - if (ir.center().y() < pos.y()) { - distPri = pos.y()-ir.center().y(); + if (ir.top() < pos.y()) { + distPri = pos.y()-ir.top(); distSec = contentsWidth()-ir.center().x(); } - else if (ir.center().y() == pos.y() && ir.center().x() < pos.x()) { + else if (ir.top() == pos.y() && ir.center().x() < pos.x()) { distPri = 0; distSec = pos.x()-ir.center().x(); } @@ -5422,8 +5420,8 @@ TQIconViewItem* TQIconView::findItem(Direction dir, const TQIconViewItem *fromIt break; } } - else { - // Top to bottom arrangement (multicolumn view mode): use left top corner as item reference + else { + // Top to bottom arrangement (multicolumn view mode): use (left, top) as item reference switch (dir) { case DirDown: if (ir.left() > pos.x()) { |