toolbox drag improvement by Lukas Dolezal
BUG:178707 svn path=/trunk/KDE/kdelibs/; revision=901337
This commit is contained in:
parent
0f70316466
commit
d2baf76321
@ -58,7 +58,7 @@ public:
|
|||||||
int size;
|
int size;
|
||||||
QSize iconSize;
|
QSize iconSize;
|
||||||
ToolBox::Corner corner;
|
ToolBox::Corner corner;
|
||||||
QPoint dragStart;
|
QPoint dragStartRelative;
|
||||||
QTransform viewTransform;
|
QTransform viewTransform;
|
||||||
bool hidden : 1;
|
bool hidden : 1;
|
||||||
bool showing : 1;
|
bool showing : 1;
|
||||||
@ -194,7 +194,8 @@ ToolBox::Corner ToolBox::corner() const
|
|||||||
void ToolBox::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
void ToolBox::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
||||||
{
|
{
|
||||||
event->accept();
|
event->accept();
|
||||||
d->dragStart = mapToParent(event->pos()).toPoint();
|
// set grab position relative to toolbox
|
||||||
|
d->dragStartRelative = mapToParent(event->pos()).toPoint() - pos().toPoint();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolBox::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
void ToolBox::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||||
@ -203,9 +204,6 @@ void ToolBox::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODOs:
|
|
||||||
// move relative to where on the toolbox it was grabbed
|
|
||||||
// sticky points at midpoints
|
|
||||||
d->dragging = true;
|
d->dragging = true;
|
||||||
d->userMoved = true;
|
d->userMoved = true;
|
||||||
const QPoint newPos = mapToParent(event->pos()).toPoint();
|
const QPoint newPos = mapToParent(event->pos()).toPoint();
|
||||||
@ -219,6 +217,36 @@ void ToolBox::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
int x = curPos.x();
|
int x = curPos.x();
|
||||||
int y = curPos.y();
|
int y = curPos.y();
|
||||||
|
|
||||||
|
// jump to the nearest desktop border
|
||||||
|
int distanceToLeft = newPos.x() - d->dragStartRelative.x();
|
||||||
|
int distanceToRight = areaWidth - w - distanceToLeft;
|
||||||
|
int distanceToTop = newPos.y() - d->dragStartRelative.y();
|
||||||
|
int distanceToBottom = areaHeight - h - distanceToTop;
|
||||||
|
|
||||||
|
// 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());
|
||||||
|
}
|
||||||
|
|
||||||
|
//kDebug() << "distances from borders" << (newPos - d->dragStartRelative) << distanceToLeft << distanceToRight << distanceToTop << distanceToBottom << "=>" << x << y;
|
||||||
|
/*
|
||||||
if (y == 0 || y + h >= areaHeight) {
|
if (y == 0 || y + h >= areaHeight) {
|
||||||
x = curPos.x() + (newPos.x() - d->dragStart.x());
|
x = curPos.x() + (newPos.x() - d->dragStart.x());
|
||||||
if (x < 0) {
|
if (x < 0) {
|
||||||
@ -239,11 +267,10 @@ void ToolBox::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
y = areaHeight - h;
|
y = areaHeight - h;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
x = qBound(0, x, areaWidth - w);
|
x = qBound(0, x, areaWidth - w);
|
||||||
y = qBound(0, y, areaHeight - h);
|
y = qBound(0, y, areaHeight - h);
|
||||||
|
|
||||||
|
|
||||||
Corner newCorner = d->corner;
|
Corner newCorner = d->corner;
|
||||||
if (x == 0) {
|
if (x == 0) {
|
||||||
if (y == 0) {
|
if (y == 0) {
|
||||||
@ -275,7 +302,6 @@ void ToolBox::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
setPos(x, y);
|
setPos(x, y);
|
||||||
d->dragStart = newPos;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolBox::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
void ToolBox::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
||||||
@ -284,7 +310,6 @@ void ToolBox::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
emit toggled();
|
emit toggled();
|
||||||
}
|
}
|
||||||
|
|
||||||
d->dragStart = QPoint();
|
|
||||||
d->dragging = false;
|
d->dragging = false;
|
||||||
KConfigGroup cg(d->containment->config());
|
KConfigGroup cg(d->containment->config());
|
||||||
save(cg);
|
save(cg);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user