shift+drag node to snap to grid

portability/boost
zetaPRIME 2018-12-31 22:42:31 -05:00
parent f1dc18c274
commit 8680b57a3d
2 changed files with 14 additions and 0 deletions

View File

@ -196,6 +196,18 @@ void NodeObject::promptDelete() {
}
}
void NodeObject::mouseMoveEvent(QGraphicsSceneMouseEvent* e) {
QGraphicsObject::mouseMoveEvent(e);
if (scene()->selectedItems().size() == 1 && e->modifiers() & Qt::Modifier::SHIFT) {
// snap to grid (by center) if single selection and shift held
constexpr qreal grid = 16.0;
auto r = boundingRect();
auto cx = r.width()/2.0;
auto cy = r.height()/2.0;
setPos(std::round((x()+cx)/grid)*grid-cx, std::round((y()+cy)/grid)*grid-cy);
}
}
void NodeObject::mouseDoubleClickEvent(QGraphicsSceneMouseEvent*) {
node->onDoubleClick();
}

View File

@ -110,6 +110,8 @@ namespace Xybrid::UI {
inline const std::shared_ptr<Data::Node>& getNode() const { return node; }
void promptDelete();
void mouseMoveEvent(QGraphicsSceneMouseEvent*) override;
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent*) override;
void contextMenuEvent(QGraphicsSceneContextMenuEvent*) override;