Fix wrong behavior when move a text item group, with rotation different than 0

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@5223 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2018-01-28 11:16:09 +00:00
parent b626a1344e
commit 8e74d88e65
9 changed files with 56 additions and 101 deletions

View File

@@ -501,33 +501,33 @@ void DynamicElementTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
* @param event
*/
void DynamicElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
if(event->buttons() & Qt::LeftButton)
{
if((event->buttons() & Qt::LeftButton) && (flags() & ItemIsMovable))
{
QPointF old_pos = pos(); //The old pos
QPointF movement = event->pos() - event->buttonDownPos(Qt::LeftButton); //The movement since the button down pos
QPointF new_pos = pos() + mapMovementToParent(movement); //The new pos with this event
if(diagram() && m_first_move)
diagram()->beginMoveElementTexts(this);
if(m_first_move)
{
m_initial_position = pos();
if(parentElement())
parentElement()->setHighlighted(true);
}
QPointF current_parent_pos;
QPointF button_down_parent_pos;
current_parent_pos = mapToParent(mapFromScene(event->scenePos()));
button_down_parent_pos = mapToParent(mapFromScene(event->buttonDownScenePos(Qt::LeftButton)));
QPointF new_pos = m_initial_position + current_parent_pos - button_down_parent_pos;
event->modifiers() == Qt::ControlModifier ? setPos(new_pos) : setPos(Diagram::snapToGrid(new_pos));
if(m_parent_element && m_parent_element->diagram())
{
Diagram *diagram = m_parent_element->diagram();
if(m_first_move)
{
if(diagram->beginMoveElementTexts(this) == 1)
m_parent_element->setHighlighted(true);
}
//Because setPos() can be snaped to grid or not, we calcule the real movement
QPointF effective_movement = pos() - old_pos;
QPointF scene_effective_movement = mapMovementToScene(mapMovementFromParent(effective_movement));
diagram->continueMoveElementTexts(scene_effective_movement);
}
}
else
if(diagram())
diagram()->continueMoveElementTexts(event);
} else {
event->ignore();
}
if(m_first_move)
m_first_move = false;
}

View File

@@ -152,6 +152,7 @@ class DynamicElementTextItem : public DiagramTextItem
CrossRefItem *m_Xref_item = nullptr;
QGraphicsTextItem *m_slave_Xref_item = nullptr;
qreal m_text_width = -1;
QPointF m_initial_position;
};
#endif // DYNAMICELEMENTTEXTITEM_H

View File

@@ -272,7 +272,7 @@ void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
QPointF scene_effective_movement = mapMovementToScene(mapMovementFromParent(effective_movement));
// on applique le mouvement subi aux autres textes a deplacer
diagram_ptr -> continueMoveElementTexts(scene_effective_movement);
diagram_ptr -> continueMoveElementTexts(event);
}
} else event -> ignore();

View File

@@ -394,28 +394,31 @@ void ElementTextItemGroup::mousePressEvent(QGraphicsSceneMouseEvent *event)
*/
void ElementTextItemGroup::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
if(isSelected() && event->buttons() & Qt::LeftButton)
if((event->buttons() & Qt::LeftButton) && (flags() & ItemIsMovable))
{
if(diagram() && m_first_move)
diagram()->beginMoveElementTexts(this);
QPointF old_pos = pos();
if(m_first_move)
{
m_mouse_to_origin_movement = old_pos - event->buttonDownScenePos(Qt::LeftButton);
m_initial_position = pos();
if(parentElement())
parentElement()->setHighlighted(true);
}
QPointF expected_pos = event->scenePos() + m_mouse_to_origin_movement;
event->modifiers() == Qt::ControlModifier ? setPos(expected_pos) : setPos(Diagram::snapToGrid(expected_pos));
QPointF current_parent_pos;
QPointF button_down_parent_pos;
current_parent_pos = mapToParent(mapFromScene(event->scenePos()));
button_down_parent_pos = mapToParent(mapFromScene(event->buttonDownScenePos(Qt::LeftButton)));
QPointF new_pos = m_initial_position + current_parent_pos - button_down_parent_pos;
event->modifiers() == Qt::ControlModifier ? setPos(new_pos) : setPos(Diagram::snapToGrid(new_pos));
QPointF effective_movement = pos() - old_pos;
if(diagram())
diagram()->continueMoveElementTexts(effective_movement);
}
else
diagram()->continueMoveElementTexts(event);
} else {
event->ignore();
}
if(m_first_move)
m_first_move = false;

View File

@@ -91,7 +91,7 @@ class ElementTextItemGroup : public QObject, public QGraphicsItemGroup
Qt::Alignment m_alignment = Qt::AlignJustify;
QString m_name;
bool m_first_move = true;
QPointF m_mouse_to_origin_movement;
QPointF m_initial_position;
int m_vertical_adjustment = 0;
CrossRefItem *m_Xref_item = nullptr;
Element *m_parent_element = nullptr;