diff options
Diffstat (limited to 'src/libs/modelinglib/qmt/diagram_scene/items/classitem.cpp')
-rw-r--r-- | src/libs/modelinglib/qmt/diagram_scene/items/classitem.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/classitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/items/classitem.cpp index 3e65c36dae..658b6bdb38 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/items/classitem.cpp +++ b/src/libs/modelinglib/qmt/diagram_scene/items/classitem.cpp @@ -287,8 +287,25 @@ void ClassItem::update() bool ClassItem::intersectShapeWithLine(const QLineF &line, QPointF *intersectionPoint, QLineF *intersectionLine) const { + if (m_customIcon) { + 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; - // TODO if m_customIcon then use that shape + label's shape as intersection path QRectF rect = object()->rect(); rect.translate(object()->pos()); polygon << rect.topLeft() << rect.topRight() << rect.bottomRight() << rect.bottomLeft() << rect.topLeft(); |