diff options
Diffstat (limited to 'src/libs/modelinglib/qmt/diagram_scene/items/packageitem.cpp')
-rw-r--r-- | src/libs/modelinglib/qmt/diagram_scene/items/packageitem.cpp | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/packageitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/items/packageitem.cpp index 8cc4f7ed92..7514d58203 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/items/packageitem.cpp +++ b/src/libs/modelinglib/qmt/diagram_scene/items/packageitem.cpp @@ -141,21 +141,32 @@ void PackageItem::update() bool PackageItem::intersectShapeWithLine(const QLineF &line, QPointF *intersectionPoint, QLineF *intersectionLine) const { - QPolygonF polygon; if (m_customIcon) { - // TODO use customIcon path as shape - QRectF rect = object()->rect(); - rect.translate(object()->pos()); - polygon << rect.topLeft() << rect.topRight() << rect.bottomRight() << rect.bottomLeft() << rect.topLeft(); - } else { - QRectF rect = object()->rect(); - rect.translate(object()->pos()); - ShapeGeometry shape = calcMinimumGeometry(); - polygon << rect.topLeft() << (rect.topLeft() + QPointF(shape.m_minimumTabSize.width(), 0.0)) - << (rect.topLeft() + QPointF(shape.m_minimumTabSize.width(), shape.m_minimumTabSize.height())) - << rect.topRight() + QPointF(0.0, shape.m_minimumTabSize.height()) - << rect.bottomRight() << rect.bottomLeft() << rect.topLeft(); + QList<QPolygonF> polygons = m_customIcon->outline(); + for (int i = 0; i < polygons.size(); ++i) + polygons[i].translate(object()->pos() + object()->rect().topLeft()); + if (shapeIcon().textAlignment() == qmt::StereotypeIcon::TextalignBelow) { + if (nameItem()) { + QPolygonF polygon(nameItem()->boundingRect()); + polygon.translate(object()->pos() + nameItem()->pos()); + polygons.append(polygon); + } + if (m_contextLabel) { + QPolygonF polygon(m_contextLabel->boundingRect()); + polygon.translate(object()->pos() + m_contextLabel->pos()); + polygons.append(polygon); + } + } + return GeometryUtilities::intersect(polygons, line, nullptr, intersectionPoint, intersectionLine); } + QPolygonF polygon; + QRectF rect = object()->rect(); + rect.translate(object()->pos()); + ShapeGeometry shape = calcMinimumGeometry(); + polygon << rect.topLeft() << (rect.topLeft() + QPointF(shape.m_minimumTabSize.width(), 0.0)) + << (rect.topLeft() + QPointF(shape.m_minimumTabSize.width(), shape.m_minimumTabSize.height())) + << rect.topRight() + QPointF(0.0, shape.m_minimumTabSize.height()) + << rect.bottomRight() << rect.bottomLeft() << rect.topLeft(); return GeometryUtilities::intersect(polygon, line, intersectionPoint, intersectionLine); } |