QWindow *QXcbScreen::topLevelAt(const QPoint &p) const { xcb_window_t root = m_screen->root; int x = p.x(); int y = p.y(); xcb_window_t parent = root; xcb_window_t child = root; do { xcb_translate_coordinates_cookie_t translate_cookie = xcb_translate_coordinates_unchecked(xcb_connection(), parent, child, x, y); xcb_translate_coordinates_reply_t *translate_reply = xcb_translate_coordinates_reply(xcb_connection(), translate_cookie, NULL); if (!translate_reply) { return 0; } parent = child; child = translate_reply->child; x = translate_reply->dst_x; y = translate_reply->dst_y; free(translate_reply); if (!child || child == root) return 0; QPlatformWindow *platformWindow = connection()->platformWindowFromId(child); if (platformWindow) return platformWindow->window(); } while (parent != child); return 0; }
void QOpenWFDGLContext::swapBuffers(QPlatformSurface *surface) { glFlush(); QPlatformWindow *window = static_cast<QPlatformWindow *>(surface); QOpenWFDScreen *screen = static_cast<QOpenWFDScreen *>(QPlatformScreen::platformScreenForWindow(window->window())); screen->swapBuffers(); }
bool QOpenWFDGLContext::makeCurrent(QPlatformSurface *surface) { Q_ASSERT(surface->surface()->surfaceType() == QSurface::OpenGLSurface); EGLDisplay display = mWfdDevice->eglDisplay(); EGLContext context = mWfdDevice->eglContext(); if (!eglMakeCurrent(display,EGL_NO_SURFACE,EGL_NO_SURFACE,context)) { qDebug("GLContext: eglMakeCurrent FAILED!"); } QPlatformWindow *window = static_cast<QPlatformWindow *>(surface); QOpenWFDScreen *screen = static_cast<QOpenWFDScreen *>(QPlatformScreen::platformScreenForWindow(window->window())); screen->bindFramebuffer(); return true; }
bool QKmsContext::makeCurrent(QPlatformSurface *surface) { Q_ASSERT(surface->surface()->supportsOpenGL()); EGLDisplay display = m_device->eglDisplay(); EGLSurface eglSurface; if (surface->surface()->surfaceClass() == QSurface::Window) { QPlatformWindow *window = static_cast<QPlatformWindow *>(surface); QKmsScreen *screen = static_cast<QKmsScreen *>(QPlatformScreen::platformScreenForWindow(window->window())); eglSurface = screen->eglSurface(); screen->waitForPageFlipComplete(); } else { eglSurface = static_cast<QKmsOffscreenWindow *>(surface)->surface(); } bool ok = eglMakeCurrent(display, eglSurface, eglSurface, m_eglContext); if (!ok) qWarning("QKmsContext::makeCurrent(): eglError: %x, this: %p", eglGetError(), this); return true; }
void QKmsContext::swapBuffers(QPlatformSurface *surface) { //Cast context to a window surface and get the screen the context //is on and call swapBuffers on that screen. QPlatformWindow *window = static_cast<QPlatformWindow *>(surface); QKmsScreen *screen = static_cast<QKmsScreen *> (QPlatformScreen::platformScreenForWindow(window->window())); screen->swapBuffers(); }