aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/modelinglib/qmt/diagram_scene/items/classitem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/modelinglib/qmt/diagram_scene/items/classitem.cpp')
-rw-r--r--src/libs/modelinglib/qmt/diagram_scene/items/classitem.cpp19
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();