handmovableview: wrap cursor when hand dragging

This commit is contained in:
itsmattkc
2022-07-27 11:38:13 -07:00
parent 3f6ee1dc1b
commit 301a773d62
2 changed files with 27 additions and 1 deletions
+25 -1
View File
@@ -66,6 +66,8 @@ bool HandMovableView::HandPress(QMouseEvent *event)
Qt::LeftButton,
event->modifiers());
transformed_pos_ = QPoint(0, 0);
super::mousePressEvent(&transformed);
return true;
@@ -78,12 +80,34 @@ bool HandMovableView::HandMove(QMouseEvent *event)
{
if (dragging_hand_) {
// Transform mouse event to act like the left button is pressed
QPoint adjustment(0, 0);
QMouseEvent transformed(event->type(),
event->localPos(),
event->localPos() - transformed_pos_,
Qt::LeftButton,
Qt::LeftButton,
event->modifiers());
if (event->localPos().x() < 0) {
transformed_pos_.setX(transformed_pos_.x() + width());
adjustment.setX(width());
} else if (event->localPos().x() >= width()) {
transformed_pos_.setX(transformed_pos_.x() - width());
adjustment.setX(-width());
}
if (event->pos().y() < 0) {
transformed_pos_.setY(transformed_pos_.y() + height());
adjustment.setY(height());
} else if (event->pos().y() >= height()) {
transformed_pos_.setY(transformed_pos_.y() - height());
adjustment.setY(-height());
}
if (!adjustment.isNull()) {
QCursor::setPos(QCursor::pos() + adjustment);
}
super::mouseMoveEvent(&transformed);
}
return dragging_hand_;