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