31 #include <QGuiApplication> 39 QPoint
FitRectScreen (QPoint pos,
const QSize& size, FitFlags flags,
const QPoint& shiftAdd)
44 QPoint
FitRect (QPoint pos,
const QSize& size,
const QRect& geometry,
45 FitFlags flags,
const QPoint& shiftAdd)
47 int xDiff =
std::max (0, pos.x () + size.width () - (geometry.width () + geometry.x ()));
49 xDiff =
std::min (0, pos.x () - geometry.x ());
50 int yDiff =
std::max (0, pos.y () + size.height () - (geometry.height () + geometry.y ()));
52 yDiff =
std::min (0, pos.y () - geometry.y ());
56 auto overlapFixer = [] (
int& diff,
int dim)
59 diff = dim > diff ? dim : diff;
62 if (QRect (pos - QPoint (xDiff, yDiff), size).contains (pos) && yDiff < size.height ())
63 overlapFixer (yDiff, size.height ());
64 if (QRect (pos - QPoint (xDiff, yDiff), size).contains (pos) && xDiff < size.width ())
65 overlapFixer (xDiff, size.width ());
69 pos.rx () -= xDiff + shiftAdd.x ();
71 pos.ry () -= yDiff + shiftAdd.y ();
78 if (
auto screen = QGuiApplication::screenAt (p))
81 qWarning () << Q_FUNC_INFO
82 <<
"unknown screen for point" 84 return QGuiApplication::primaryScreen ();
QPoint FitRect(QPoint pos, const QSize &size, const QRect &geometry, FitFlags flags, const QPoint &shiftAdd)
Tries to fit a rectangle (like a dialog or popup) into geometry.
QRect AvailableGeometry(const QPoint &p)
constexpr detail::AggregateType< detail::AggregateFunction::Max, Ptr > max
QScreen * GetScreenWithFallback(const QPoint &p)
QPoint FitRectScreen(QPoint pos, const QSize &size, FitFlags flags, const QPoint &shiftAdd)
Tries to fit a rectangle (like a dialog or popup) into screen.
QRect ScreenGeometry(const QPoint &p)
constexpr detail::AggregateType< detail::AggregateFunction::Min, Ptr > min