[Digikam-devel] [Bug 147362] tool-tip for zoom indicator is below the screen if window is maximised
Gilles Caulier
caulier.gilles at gmail.com
Wed Jul 4 07:16:34 BST 2007
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
http://bugs.kde.org/show_bug.cgi?id=147362
------- Additional Comments From caulier.gilles gmail com 2007-07-04 08:16 -------
Fabien this can be a fast fix for this problem. This widget is always on the bottom of windows.
But, i prefert an advanced fix which include something like QToolTip do : check the position of the widget over the screen and adapt X and Y offset accordinly to be always readable.
See below the code from Qt3.5.7. It have been extracted from method "void QTipManager::showTip()" of qtooltip.cpp C++ file. It resume exactly what we need to compute the offset and it simple to understand :
{
...
int scr;
if ( QApplication::desktop()->isVirtualDesktop() )
scr = QApplication::desktop()->screenNumber( widget->mapToGlobal( pos ) );
else
scr = QApplication::desktop()->screenNumber( widget );
...
#ifdef Q_WS_MAC
QRect screen = QApplication::desktop()->availableGeometry( scr );
#else
QRect screen = QApplication::desktop()->screenGeometry( scr );
#endif
QPoint p;
p = widget->mapToGlobal( t->geometry.topLeft() );
if ( p.y() < screen.y() )
p.setY( screen.y() );
if ( p.x() + label->width() > screen.x() + screen.width() )
p.setX( screen.x() + screen.width() - label->width() );
if ( p.x() < screen.x() )
p.setX( screen.x() );
if ( p.y() + label->height() > screen.y() + screen.height() )
p.setY( screen.y() + screen.height() - label->height() );
if ( label->text().length() )
label->move( p );
...
}
"pos" is the current position of the mouse over the screen.
"scr" is a reference to the screen object.
"screen" is the screen rectangle. It include xinerama case.
"label" is the qtooltip label displayed by Qt over the widget.
"p" is the left/top point of the tip label to display adjusted over the screen.
You can adapt this code to DCursorTracker::eventFilter() method easily...
Gilles
More information about the Digikam-devel
mailing list