[Kst] extragear/graphics/kst/src/libkstapp
Andrew Walker
arwalker at sumusltd.com
Thu Aug 3 20:10:43 CEST 2006
SVN commit 569391 by arwalker:
BUG:131738 Better restrict a line being resized to its parent - also more consistent with behaviour during line creation
M +12 -8 kstgfxmousehandlerutils.cpp
M +8 -11 ksttoplevelview.cpp
--- trunk/extragear/graphics/kst/src/libkstapp/kstgfxmousehandlerutils.cpp #569390:569391
@@ -29,10 +29,14 @@
QPoint KstGfxMouseHandlerUtils::findNearestPtOnLine(const QPoint& fromPoint, const QPoint& toPoint, const QPoint& pos, const QRect &bounds) {
QPoint npos = pos;
- if (fromPoint.y() == toPoint.y() ) {
+ if (fromPoint.y() == toPoint.y()) {
npos.setY(fromPoint.y());
+ npos.setX(kMax(npos.x(), bounds.left()));
+ npos.setX(kMin(npos.x(), bounds.right()));
} else if (fromPoint.x() == toPoint.x()) {
npos.setX(fromPoint.x());
+ npos.setY(kMax(npos.y(), bounds.top()));
+ npos.setY(kMin(npos.y(), bounds.bottom()));
} else {
double newxpos, newypos;
double slope = double(toPoint.y() - fromPoint.y()) / double(toPoint.x() - fromPoint.x());
@@ -61,14 +65,14 @@
if (maintainAspect) {
QPoint fakeMovePoint = anchorPoint + QPoint(quadrantSign(pos,anchorPoint)*abs((movePoint - anchorPoint).x()),abs((movePoint - anchorPoint).y())); // allow the rectangle to flip.
-
npos = findNearestPtOnLine(anchorPoint, fakeMovePoint, pos, bounds);
}
-
+
newSize.setTopLeft(anchorPoint);
newSize.setBottomRight(npos);
newSize = newSize.normalize();
-
+ newSize = bounds.intersect(newSize);
+
return newSize;
}
@@ -183,9 +187,9 @@
QPoint mouseDisplacement(pos - mouseOrigin); // for picking type of line..
if (mouseDisplacement.x() == 0) { // vertical line.
- npos = findNearestPtOnLine(mouseOrigin,mouseOrigin + QPoint(0,1), pos, bounds);
+ npos = findNearestPtOnLine(mouseOrigin, mouseOrigin + QPoint(0,1), pos, bounds);
} else if (mouseDisplacement.y() == 0) { // horizontal line.
- npos = findNearestPtOnLine(mouseOrigin,mouseOrigin + QPoint(1,0), pos, bounds);
+ npos = findNearestPtOnLine(mouseOrigin, mouseOrigin + QPoint(1,0), pos, bounds);
} else { // 45deg or vertical or horizontal.
int dx = int(round(2.0*mouseDisplacement.x()/abs(mouseDisplacement.y())));
int dy = int(round(2.0*mouseDisplacement.y()/abs(mouseDisplacement.x())));
@@ -197,9 +201,9 @@
dy /= abs(dy);
}
- npos = findNearestPtOnLine(mouseOrigin,mouseOrigin + QPoint(dx,dy), pos, bounds);
+ npos = findNearestPtOnLine(mouseOrigin, mouseOrigin + QPoint(dx,dy), pos, bounds);
}
- return QRect(mouseOrigin,npos);
+ return QRect(mouseOrigin, npos);
}
}
--- trunk/extragear/graphics/kst/src/libkstapp/ksttoplevelview.cpp #569390:569391
@@ -782,14 +782,7 @@
// for now we only know how to deal with lines
const QRect bounds(_pressTarget->_parent->geometry());
- QPoint npos(pos);
- //pos must be inside the parent
- npos.setX(kMax(npos.x(), bounds.left()));
- npos.setX(kMin(npos.x(), bounds.right()));
- npos.setY(kMin(npos.y(), bounds.bottom()));
- npos.setY(kMax(npos.y(), bounds.top()));
-
if (KstViewLinePtr line = kst_cast<KstViewLine>(_pressTarget)) {
QPoint movePoint, anchorPoint;
QPoint *fromPoint, *toPoint;
@@ -806,13 +799,17 @@
fromPoint = &anchorPoint;
toPoint = &movePoint;
} else {
- abort();
+ return;
}
-
+
if (maintainAspect) {
- movePoint = KstGfxMouseHandlerUtils::findNearestPtOnLine(anchorPoint, movePoint, npos, bounds);
+ movePoint = KstGfxMouseHandlerUtils::findNearestPtOnLine(anchorPoint, movePoint, pos, bounds);
} else {
- movePoint = npos; // already enforced pos inside parent.
+ if (bounds.contains(pos)) {
+ movePoint = pos;
+ } else {
+ movePoint = KstGfxMouseHandlerUtils::findNearestPtOnLine(anchorPoint, pos, pos, bounds);
+ }
}
const QRect old(_prevBand);
More information about the Kst
mailing list