From kde-commits Sat Apr 24 19:49:41 2010 From: Marco Martin Date: Sat, 24 Apr 2010 19:49:41 +0000 To: kde-commits Subject: KDE/kdelibs/plasma/private Message-Id: <20100424194941.9538EAC8A3 () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=127213837717372 SVN commit 1118457 by mart: snap with real center M +24 -23 internaltoolbox.cpp --- trunk/KDE/kdelibs/plasma/private/internaltoolbox.cpp #1118456:1118457 @@ -304,34 +304,35 @@ int distanceToTop = newPos.y() - d->dragStartRelative.y(); int distanceToBottom = areaHeight - h - distanceToTop; - int distancetoHorizontalMiddle = qAbs(newPos.x() - areaWidth/2); - int distancetoVerticalMiddle = qAbs(newPos.y() - areaHeight/2); + int distancetoHorizontalMiddle = qAbs((newPos.x() + boundingRect().size().width()/2) - areaWidth/2 - d->dragStartRelative.x()); + int distancetoVerticalMiddle = qAbs((newPos.y() + boundingRect().size().height()/2) - areaHeight/2 - d->dragStartRelative.y()); - // decide which border is the nearest - if (distanceToLeft < distanceToTop && distanceToLeft < distanceToRight && - distanceToLeft < distanceToBottom ) { - x = 0; - y = (newPos.y() - d->dragStartRelative.y()); - } else if (distanceToRight < distanceToTop && distanceToRight < distanceToLeft && - distanceToRight < distanceToBottom) { - x = areaWidth - w; - y = (newPos.y() - d->dragStartRelative.y()); - } else if (distanceToTop < distanceToLeft && distanceToTop < distanceToRight && - distanceToTop < distanceToBottom ) { - y = 0; - x = (newPos.x() - d->dragStartRelative.x()); - } else if (distanceToBottom < distanceToLeft && distanceToBottom < distanceToRight && - distanceToBottom < distanceToTop) { - y = areaHeight - h; - x = (newPos.x() - d->dragStartRelative.x()); - } - if (distancetoHorizontalMiddle < 10) { - x = areaWidth/2 - d->dragStartRelative.x(); + x = areaWidth/2 - boundingRect().size().width()/2; } else if (distancetoVerticalMiddle < 10) { - y = areaHeight/2 - d->dragStartRelative.y(); + y = areaHeight/2 - boundingRect().size().height()/2; + } else { + // decide which border is the nearest + if (distanceToLeft < distanceToTop && distanceToLeft < distanceToRight && + distanceToLeft < distanceToBottom ) { + x = 0; + y = (newPos.y() - d->dragStartRelative.y()); + } else if (distanceToRight < distanceToTop && distanceToRight < distanceToLeft && + distanceToRight < distanceToBottom) { + x = areaWidth - w; + y = (newPos.y() - d->dragStartRelative.y()); + } else if (distanceToTop < distanceToLeft && distanceToTop < distanceToRight && + distanceToTop < distanceToBottom ) { + y = 0; + x = (newPos.x() - d->dragStartRelative.x()); + } else if (distanceToBottom < distanceToLeft && distanceToBottom < distanceToRight && + distanceToBottom < distanceToTop) { + y = areaHeight - h; + x = (newPos.x() - d->dragStartRelative.x()); + } } + x = qBound(0, x, areaWidth - w); y = qBound(0, y, areaHeight - h);