From 3f1ac5899476307923686166705812c24a2e3578 Mon Sep 17 00:00:00 2001 From: Jesus Fernandez Date: Tue, 25 Apr 2017 14:22:13 +0200 Subject: Add QPlatformSurface::screen() const Classes inheriting QPlatformSurface need to return the QPlatformScreen to allow the platform integration plugin to know information about the used screen by the surface. QPlatformSurface and QPlatformWindow had the same function defined, but it was not possible to call it without casting the QPlatformSurface pointer. Change-Id: I1f93fe7c13ebbc51769677038edeca4de5db0024 Reviewed-by: Qt CI Bot Reviewed-by: Laszlo Agocs --- src/plugins/platforms/qnx/qqnxrasterbackingstore.cpp | 5 +++-- src/plugins/platforms/qnx/qqnxrasterwindow.cpp | 7 ++++--- src/plugins/platforms/qnx/qqnxwindow.cpp | 19 +++++++++++++------ src/plugins/platforms/qnx/qqnxwindow.h | 2 +- 4 files changed, 21 insertions(+), 12 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/platforms/qnx/qqnxrasterbackingstore.cpp b/src/plugins/platforms/qnx/qqnxrasterbackingstore.cpp index a758bdf7f4..dd7f907ee0 100644 --- a/src/plugins/platforms/qnx/qqnxrasterbackingstore.cpp +++ b/src/plugins/platforms/qnx/qqnxrasterbackingstore.cpp @@ -139,6 +139,7 @@ void QQnxRasterBackingStore::beginPaint(const QRegion ®ion) platformWindow()->adjustBufferSize(); if (window()->requestedFormat().alphaBufferSize() > 0) { + auto platformScreen = static_cast(platformWindow()->screen()); for (const QRect &r : region) { // Clear transparent regions const int bg[] = { @@ -149,11 +150,11 @@ void QQnxRasterBackingStore::beginPaint(const QRegion ®ion) SCREEN_BLIT_DESTINATION_HEIGHT, r.height(), SCREEN_BLIT_END }; - Q_SCREEN_CHECKERROR(screen_fill(platformWindow()->screen()->nativeContext(), + Q_SCREEN_CHECKERROR(screen_fill(platformScreen->nativeContext(), platformWindow()->renderBuffer().nativeBuffer(), bg), "failed to clear transparent regions"); } - Q_SCREEN_CHECKERROR(screen_flush_blits(platformWindow()->screen()->nativeContext(), + Q_SCREEN_CHECKERROR(screen_flush_blits(platformScreen->nativeContext(), SCREEN_WAIT_IDLE), "failed to flush blits"); } } diff --git a/src/plugins/platforms/qnx/qqnxrasterwindow.cpp b/src/plugins/platforms/qnx/qqnxrasterwindow.cpp index 7f11de228e..dc844189d1 100644 --- a/src/plugins/platforms/qnx/qqnxrasterwindow.cpp +++ b/src/plugins/platforms/qnx/qqnxrasterwindow.cpp @@ -141,6 +141,7 @@ QQnxBuffer &QQnxRasterWindow::renderBuffer() // Check if render buffer is invalid if (m_currentBufferIndex == -1) { + auto platformScreen = static_cast(screen()); // Get all buffers available for rendering screen_buffer_t buffers[MAX_BUFFER_COUNT]; const int result = screen_get_window_property_pv(nativeHandle(), SCREEN_PROPERTY_RENDER_BUFFERS, @@ -153,11 +154,11 @@ QQnxBuffer &QQnxRasterWindow::renderBuffer() // Clear Buffer int bg[] = { SCREEN_BLIT_COLOR, 0x00000000, SCREEN_BLIT_END }; - Q_SCREEN_CHECKERROR(screen_fill(screen()->nativeContext(), buffers[i], bg), + Q_SCREEN_CHECKERROR(screen_fill(platformScreen->nativeContext(), buffers[i], bg), "Failed to clear window buffer"); } - Q_SCREEN_CHECKERROR(screen_flush_blits(screen()->nativeContext(), 0), + Q_SCREEN_CHECKERROR(screen_flush_blits(platformScreen->nativeContext(), 0), "Failed to flush blits"); // Use the first available render buffer @@ -185,7 +186,7 @@ void QQnxRasterWindow::adjustBufferSize() int QQnxRasterWindow::pixelFormat() const { - return screen()->nativeFormat(); + return static_cast(screen())->nativeFormat(); } void QQnxRasterWindow::resetBuffers() diff --git a/src/plugins/platforms/qnx/qqnxwindow.cpp b/src/plugins/platforms/qnx/qqnxwindow.cpp index 2253e3b23d..38b61fd782 100644 --- a/src/plugins/platforms/qnx/qqnxwindow.cpp +++ b/src/plugins/platforms/qnx/qqnxwindow.cpp @@ -479,7 +479,7 @@ void QQnxWindow::setParent(const QPlatformWindow *window) if (newParent == m_parentWindow) return; - if (screen()->rootWindow() == this) { + if (static_cast(screen())->rootWindow() == this) { qWarning("Application window cannot be reparented"); return; } @@ -539,7 +539,7 @@ void QQnxWindow::requestActivateWindow() if (focusWindow == this) return; - if (screen()->rootWindow() == this || + if (static_cast(screen())->rootWindow() == this || (focusWindow && findWindow(focusWindow->nativeHandle()))) { // If the focus window is a child, we can just set the focus of our own window // group to our window handle @@ -550,6 +550,7 @@ void QQnxWindow::requestActivateWindow() QQnxWindow *currentWindow = this; QList windowList; while (currentWindow) { + auto platformScreen = static_cast(screen()); windowList.prepend(currentWindow); // If we find the focus window, we don't have to go further if (currentWindow == focusWindow) @@ -557,9 +558,9 @@ void QQnxWindow::requestActivateWindow() if (currentWindow->parent()){ currentWindow = static_cast(currentWindow->parent()); - } else if (screen()->rootWindow() && - screen()->rootWindow()->m_windowGroupName == currentWindow->m_parentGroupName) { - currentWindow = screen()->rootWindow(); + } else if (platformScreen->rootWindow() && + platformScreen->rootWindow()->m_windowGroupName == currentWindow->m_parentGroupName) { + currentWindow = platformScreen->rootWindow(); } else { currentWindow = 0; } @@ -622,6 +623,11 @@ void QQnxWindow::clearMMRendererWindow() m_mmRendererWindow = 0; } +QPlatformScreen *QQnxWindow::screen() const +{ + return m_screen; +} + QQnxWindow *QQnxWindow::findWindow(screen_window_t windowHandle) { if (m_window == windowHandle) @@ -775,7 +781,8 @@ void QQnxWindow::windowPosted() bool QQnxWindow::shouldMakeFullScreen() const { - return ((screen()->rootWindow() == this) && (QQnxIntegration::options() & QQnxIntegration::FullScreenApplication)); + return ((static_cast(screen())->rootWindow() == this) + && (QQnxIntegration::options() & QQnxIntegration::FullScreenApplication)); } QT_END_NAMESPACE diff --git a/src/plugins/platforms/qnx/qqnxwindow.h b/src/plugins/platforms/qnx/qqnxwindow.h index f96edc49e4..dfcca78f80 100644 --- a/src/plugins/platforms/qnx/qqnxwindow.h +++ b/src/plugins/platforms/qnx/qqnxwindow.h @@ -94,7 +94,7 @@ public: void setMMRendererWindow(screen_window_t handle); void clearMMRendererWindow(); - QQnxScreen *screen() const { return m_screen; } + QPlatformScreen *screen() const override; const QList& children() const { return m_childWindows; } QQnxWindow *findWindow(screen_window_t windowHandle); -- cgit v1.2.3