-
- // m_itemRect defines the area of the item, where the tooltip should be
- // shown. Per default the tooltip is shown in the bottom right corner.
- // It must be assured that:
- // - the content is fully visible
- // - the content is not drawn inside m_itemRect
- const bool hasRoomToLeft = (m_itemRect.left() - size.width() >= screen.left());
- const bool hasRoomToRight = (m_itemRect.right() + size.width() <= screen.right());
- const bool hasRoomAbove = (m_itemRect.top() - size.height() >= screen.top());
- const bool hasRoomBelow = (m_itemRect.bottom() + size.height() <= screen.bottom());
- if (!hasRoomAbove && !hasRoomBelow && !hasRoomToLeft && !hasRoomToRight) {
- return;
- }
-
- int x, y;
- if (hasRoomBelow || hasRoomAbove) {
- x = QCursor::pos().x() + 16; // TODO: use mouse pointer width instead of the magic value of 16
- if (x + size.width() >= screen.right()) {
- x = screen.right() - size.width() + 1;
- }
- if (hasRoomBelow) {
- y = m_itemRect.bottom() + 1;
- } else {
- y = m_itemRect.top() - size.height();
- }
- } else {
- Q_ASSERT(hasRoomToLeft || hasRoomToRight);
- if (hasRoomToRight) {
- x = m_itemRect.right() + 1;
- } else {
- x = m_itemRect.left() - size.width();
- }
- // Put the tooltip at the bottom of the screen. The x-coordinate has already
- // been adjusted, so that no overlapping with m_itemRect occurs.
- y = screen.bottom() - size.height() + 1;
- }
-
- // Step #3 - Alter tooltip geometry
- m_fileMetaDataToolTip->setFixedSize(size);
- m_fileMetaDataToolTip->layout()->setSizeConstraint(QLayout::SetNoConstraint);
- m_fileMetaDataToolTip->setGeometry(x, y, size.width(), size.height());
- m_fileMetaDataToolTip->show();
-