diff --git a/sources/conductortextitem.cpp b/sources/conductortextitem.cpp index 2f304233d..96e112feb 100644 --- a/sources/conductortextitem.cpp +++ b/sources/conductortextitem.cpp @@ -142,8 +142,11 @@ void ConductorTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) { if (textInteractionFlags() & Qt::TextEditable) { QGraphicsTextItem::mouseMoveEvent(e); } else if ((flags() & QGraphicsItem::ItemIsMovable) && (e -> buttons() & Qt::LeftButton)) { - QPointF intended_pos = mapToParent(e -> pos()) - matrix().map(e -> buttonDownPos(Qt::LeftButton)); + if (first_move_) { + mouse_to_origin_movement_ = before_mov_pos_ - mapToParent(e -> buttonDownPos(Qt::LeftButton)); + } + QPointF intended_pos = mapToParent(e -> pos()) + mouse_to_origin_movement_; // si ce texte est attache a un conducteur, alors ses mouvements seront // limites a une certaine distance du trace de ce conducteur if (parent_conductor_) { diff --git a/sources/conductortextitem.h b/sources/conductortextitem.h index b47c1cd68..d6bc8f120 100644 --- a/sources/conductortextitem.h +++ b/sources/conductortextitem.h @@ -61,5 +61,6 @@ class ConductorTextItem : public DiagramTextItem { bool moved_by_user_; QPointF before_mov_pos_; bool first_move_; + QPointF mouse_to_origin_movement_; }; #endif diff --git a/sources/independenttextitem.cpp b/sources/independenttextitem.cpp index b2a1a5aac..b7ee936a6 100644 --- a/sources/independenttextitem.cpp +++ b/sources/independenttextitem.cpp @@ -102,11 +102,14 @@ void IndependentTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) { // on applique le mouvement impose par la souris QPointF old_pos = pos(); - setPos(mapToParent(e -> pos()) - matrix().map(e -> buttonDownPos(Qt::LeftButton))); + if (first_move_) { + mouse_to_origin_movement_ = old_pos - e -> buttonDownScenePos(Qt::LeftButton); + } + QPointF expected_pos = e-> scenePos() + mouse_to_origin_movement_; + setPos(expected_pos); // setPos() will snap the expected position to the grid // on calcule le mouvement reellement applique par setPos() QPointF effective_movement = pos() - old_pos; - if (diagram_ptr) { // on signale le mouvement ainsi applique au schema parent, qui // l'appliquera aux autres items selectionnes selon son bon vouloir diff --git a/sources/independenttextitem.h b/sources/independenttextitem.h index 16ccad023..a8592d9cc 100644 --- a/sources/independenttextitem.h +++ b/sources/independenttextitem.h @@ -52,5 +52,6 @@ class IndependentTextItem : public DiagramTextItem { private: bool first_move_; + QPointF mouse_to_origin_movement_; }; #endif