113void QEglFSScreen::handleCursorMove(
const QPoint &pos)
116 const QOpenGLCompositor *compositor = QOpenGLCompositor::instance();
117 const QList<QOpenGLCompositorWindow *> windows = compositor->windows();
118 QEglFSIntegration *platformIntegration =
static_cast<QEglFSIntegration *>(QGuiApplicationPrivate::platformIntegration());
121 if (windows.isEmpty())
125 if (windows.size() == 1) {
126 QWindow *window = windows[0]->sourceWindow();
127 if (platformIntegration->pointerWindow() != window) {
128 platformIntegration->setPointerWindow(window);
129 QWindowSystemInterface::handleEnterEvent(window, window->mapFromGlobal(pos), pos);
134 QWindow *enter =
nullptr, *leave =
nullptr;
135 for (
int i = windows.size() - 1; i >= 0; --i) {
136 QWindow *window = windows[i]->sourceWindow();
137 const QRect geom = window->geometry();
138 if (geom.contains(pos)) {
139 if (platformIntegration->pointerWindow() != window) {
140 leave = platformIntegration->pointerWindow();
141 platformIntegration->setPointerWindow(window);
148 if (enter && leave) {
149 QWindowSystemInterface::handleEnterLeaveEvent(enter, leave, enter->mapFromGlobal(pos), pos);
151 QWindowSystemInterface::handleEnterEvent(enter, enter->mapFromGlobal(pos), pos);
153 QWindowSystemInterface::handleLeaveEvent(leave);
160QPixmap QEglFSScreen::grabWindow(WId wid,
int x,
int y,
int width,
int height)
const
163 QOpenGLCompositor *compositor = QOpenGLCompositor::instance();
164 const QList<QOpenGLCompositorWindow *> windows = compositor->windows();
165 Q_ASSERT(!windows.isEmpty());
169 QEglFSWindow *primaryWin =
static_cast<QEglFSWindow *>(windows.first()->sourceWindow()->handle());
170 if (primaryWin->isRaster() || primaryWin->backingStore()) {
174 img = compositor->grab();
180 qWarning(
"grabWindow: Not supported for non-composited OpenGL content. Use QQuickWindow::grabWindow() instead.");
185 const QSize screenSize = geometry().size();
187 width = screenSize.width() - x;
189 height = screenSize.height() - y;
190 return QPixmap::fromImage(img).copy(x, y, width, height);
193 for (QOpenGLCompositorWindow *w : windows) {
194 const QWindow *window = w->sourceWindow();
195 if (window->winId() == wid) {
196 const QRect geom = window->geometry();
198 width = geom.width() - x;
200 height = geom.height() - y;
201 QRect rect(geom.topLeft() + QPoint(x, y), QSize(width, height));
202 rect &= window->geometry();
203 return QPixmap::fromImage(img).copy(rect);
216QWindow *QEglFSScreen::topLevelAt(
const QPoint &point)
const
219 QOpenGLCompositor *compositor = QOpenGLCompositor::instance();
220 const QList<QOpenGLCompositorWindow *> windows = compositor->windows();
221 const int windowCount = windows.size();
224 for (
int i = windowCount - 1; i >= 0; i--) {
225 QWindow *window = windows[i]->sourceWindow();
226 if (window->isVisible() && window->geometry().contains(point))
231 return QPlatformScreen::topLevelAt(point);