From b0c5380d556516dc238d0eb26fa1377cf62ed81c Mon Sep 17 00:00:00 2001 From: Thomas Hartmann <Thomas.Hartmann@digia.com> Date: Tue, 14 Jan 2014 12:28:25 +0100 Subject: [PATCH] QmlDesigner.FormEditor: crash fix Anchors and/or anchor targets might be invalid. e.g.: anchors.left: parent We have to check this. Task-number: QTCREATORBUG-11255 Change-Id: Ib939292d0f89cc1d22119972627c03f1e85043db Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com> --- .../anchorindicatorgraphicsitem.cpp | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/anchorindicatorgraphicsitem.cpp b/src/plugins/qmldesigner/components/formeditor/anchorindicatorgraphicsitem.cpp index 7e7a21a67bb..38d8db1e4b1 100644 --- a/src/plugins/qmldesigner/components/formeditor/anchorindicatorgraphicsitem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/anchorindicatorgraphicsitem.cpp @@ -211,24 +211,26 @@ static void updateAnchorLinePoints(QPointF *firstPoint, QPointF *secondPoint, co void AnchorIndicatorGraphicsItem::updateAnchorIndicator(const AnchorLine &sourceAnchorLine, const AnchorLine targetAnchorLine) { - m_sourceAnchorLineType = sourceAnchorLine.type(); - m_targetAnchorLineType = targetAnchorLine.type(); + if (sourceAnchorLine.isValid() && targetAnchorLine.isValid()) { + m_sourceAnchorLineType = sourceAnchorLine.type(); + m_targetAnchorLineType = targetAnchorLine.type(); - m_startPoint = createAnchorPoint(sourceAnchorLine.qmlItemNode(), sourceAnchorLine.type()); + m_startPoint = createAnchorPoint(sourceAnchorLine.qmlItemNode(), sourceAnchorLine.type()); - if (targetAnchorLine.qmlItemNode() == sourceAnchorLine.qmlItemNode().instanceParentItem()) - m_endPoint = createParentAnchorPoint(targetAnchorLine.qmlItemNode(), targetAnchorLine.type(), sourceAnchorLine.qmlItemNode()); - else - m_endPoint = createAnchorPoint(targetAnchorLine.qmlItemNode(), targetAnchorLine.type()); + if (targetAnchorLine.qmlItemNode() == sourceAnchorLine.qmlItemNode().instanceParentItem()) + m_endPoint = createParentAnchorPoint(targetAnchorLine.qmlItemNode(), targetAnchorLine.type(), sourceAnchorLine.qmlItemNode()); + else + m_endPoint = createAnchorPoint(targetAnchorLine.qmlItemNode(), targetAnchorLine.type()); - m_firstControlPoint = createControlPoint(m_startPoint, sourceAnchorLine.type(), m_endPoint); - m_secondControlPoint = createControlPoint(m_endPoint, targetAnchorLine.type(), m_startPoint); + m_firstControlPoint = createControlPoint(m_startPoint, sourceAnchorLine.type(), m_endPoint); + m_secondControlPoint = createControlPoint(m_endPoint, targetAnchorLine.type(), m_startPoint); - updateAnchorLinePoints(&m_sourceAnchorLineFirstPoint, &m_sourceAnchorLineSecondPoint, sourceAnchorLine); - updateAnchorLinePoints(&m_targetAnchorLineFirstPoint, &m_targetAnchorLineSecondPoint, targetAnchorLine); + updateAnchorLinePoints(&m_sourceAnchorLineFirstPoint, &m_sourceAnchorLineSecondPoint, sourceAnchorLine); + updateAnchorLinePoints(&m_targetAnchorLineFirstPoint, &m_targetAnchorLineSecondPoint, targetAnchorLine); - updateBoundingRect(); - update(); + updateBoundingRect(); + update(); + } } void AnchorIndicatorGraphicsItem::updateBoundingRect() -- GitLab