112void QEglFSScreen::handleCursorMove(
const QPoint &pos)
115 const QOpenGLCompositor *compositor = QOpenGLCompositor::instance();
116 const QList<QOpenGLCompositorWindow *> windows = compositor->windows();
117 QEglFSIntegration *platformIntegration =
static_cast<QEglFSIntegration *>(QGuiApplicationPrivate::platformIntegration());
120 if (windows.isEmpty())
124 if (windows.size() == 1) {
125 QWindow *window = windows[0]->sourceWindow();
126 if (platformIntegration->pointerWindow() != window) {
127 platformIntegration->setPointerWindow(window);
128 QWindowSystemInterface::handleEnterEvent(window, window->mapFromGlobal(pos), pos);
133 QWindow *enter =
nullptr, *leave =
nullptr;
134 for (
int i = windows.size() - 1; i >= 0; --i) {
135 QWindow *window = windows[i]->sourceWindow();
136 const QRect geom = window->geometry();
137 if (geom.contains(pos)) {
138 if (platformIntegration->pointerWindow() != window) {
139 leave = platformIntegration->pointerWindow();
140 platformIntegration->setPointerWindow(window);
147 if (enter && leave) {
148 QWindowSystemInterface::handleEnterLeaveEvent(enter, leave, enter->mapFromGlobal(pos), pos);
150 QWindowSystemInterface::handleEnterEvent(enter, enter->mapFromGlobal(pos), pos);
152 QWindowSystemInterface::handleLeaveEvent(leave);
159QPixmap QEglFSScreen::grabWindow(WId wid,
int x,
int y,
int width,
int height)
const
162 QOpenGLCompositor *compositor = QOpenGLCompositor::instance();
163 const QList<QOpenGLCompositorWindow *> windows = compositor->windows();
164 Q_ASSERT(!windows.isEmpty());
168 QEglFSWindow *primaryWin =
static_cast<QEglFSWindow *>(windows.first()->sourceWindow()->handle());
169 if (primaryWin->isRaster() || primaryWin->backingStore()) {
173 img = compositor->grab();
179 qWarning(
"grabWindow: Not supported for non-composited OpenGL content. Use QQuickWindow::grabWindow() instead.");
184 const QSize screenSize = geometry().size();
186 width = screenSize.width() - x;
188 height = screenSize.height() - y;
189 return QPixmap::fromImage(img).copy(x, y, width, height);
192 for (QOpenGLCompositorWindow *w : windows) {
193 const QWindow *window = w->sourceWindow();
194 if (window->winId() == wid) {
195 const QRect geom = window->geometry();
197 width = geom.width() - x;
199 height = geom.height() - y;
200 QRect rect(geom.topLeft() + QPoint(x, y), QSize(width, height));
201 rect &= window->geometry();
202 return QPixmap::fromImage(img).copy(rect);
215QWindow *QEglFSScreen::topLevelAt(
const QPoint &point)
const
218 QOpenGLCompositor *compositor = QOpenGLCompositor::instance();
219 const QList<QOpenGLCompositorWindow *> windows = compositor->windows();
220 const int windowCount = windows.size();
223 for (
int i = windowCount - 1; i >= 0; i--) {
224 QWindow *window = windows[i]->sourceWindow();
225 if (window->isVisible() && window->geometry().contains(point))
230 return QPlatformScreen::topLevelAt(point);