diff options
-rw-r--r-- | dist/changes-5.9.2 | 72 | ||||
-rw-r--r-- | src/core/delegated_frame_node.cpp | 24 | ||||
-rw-r--r-- | src/core/delegated_frame_node.h | 1 | ||||
-rw-r--r-- | src/core/surface_factory_qt.cpp | 40 | ||||
-rw-r--r-- | src/core/type_conversion.h | 5 |
5 files changed, 126 insertions, 16 deletions
diff --git a/dist/changes-5.9.2 b/dist/changes-5.9.2 new file mode 100644 index 000000000..6cc9dbe37 --- /dev/null +++ b/dist/changes-5.9.2 @@ -0,0 +1,72 @@ +Qt 5.9.2 is a bug-fix release. It maintains both forward and backward +compatibility (source and binary) with Qt 5.9.0. + +For more details, refer to the online documentation included in this +distribution. The documentation is also available online: + +http://doc.qt.io/qt-5/index.html + +The Qt version 5.9 series is binary compatible with the 5.8.x series. +Applications compiled for 5.8 will continue to run with 5.9. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker: + +https://bugreports.qt.io/ + +Each of these identifiers can be entered in the bug tracker to obtain more +information about a particular change. + +**************************************************************************** +* General * +**************************************************************************** + + - Chromium Snapshot: + * Security fixes from Chromium up to version 61.0.3163.79 + Including: CVE-2017-5092, CVE-2017-5093, CVE-2017-5095, CVE-2017-5097, + CVE-2017-5099, CVE-2017-5102, CVE-2017-5103, CVE-2017-5107, + CVE-2017-5112, CVE-2017-5114, CVE-2017-5117 and CVE-2017-5118 + * Fixed Skia to to render text correctly with FreeType 2.8.1 + * [QTBUG-50389] Fixed assert on some flash content + + - QtWebEngine: + * [QTBUG-57505] Handle --force-webrtc-ip-handling-policy on command-line + * [QTBUG-58306] Fixed handling of menu key + * [QTBUG-60790] Fixed dragging images to desktop + * [QTBUG-61354] Set referrer on download requests + * [QTBUG-61429] Fixed cancelling IME composition + * [QTBUG-61506] Stop searching when navigating away + * [QTBUG-61910] Fixed an issue where system proxy settings were not + picked up correctly + * [QTBUG-62112] Fixed upside-down rendering in software rendering mode + * [QTBUG-62112] Fixed rendering of content with preserve-3d in CSS + * [QTBUG-62311] Fixed hang when exiting with open combobox + * [QTBUG-62808] Handle --explicitly-allowed-ports on command-line + * [QTBUG-62898] Fixed accessing webchannels from document-creation + user-scripts after navigation. + * [QTBUG-62942] Fixed committing IME composition on touch events + + - QWebEngineView: + * [QTBUG-61621] Fixed propagation of unhandled key press events + + - WebEngineView: + * The callback version of printToPdf is now called with a proper + bytearray result instead of a PDF data in a javascript string. + +**************************************************************************** +* Platform Specific Changes * +**************************************************************************** + + - Linux: + * [QTBUG-61528, QTBUG-62673] Fixed various multilib build configurations + * [QTBUG-61846] Fixed host builds on Arm and MIPS + + - Windows: + * [QTBUG-60334] Fixed location of IME window + * [QTBUG-62146] Fixed following system font configuration + * [QTBUG-62200] Fixed assert on hover + * Allow WebGL to work with software OpenGL using the new command-line + argument --enable-webgl-software-rendering + + - macOS: + * [QTBUG-60605] Use OpenGL core-profile when the main application does diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp index be0858310..73e0420af 100644 --- a/src/core/delegated_frame_node.cpp +++ b/src/core/delegated_frame_node.cpp @@ -850,8 +850,8 @@ void DelegatedFrameNode::commit(ChromiumCompositorData *chromiumCompositorData, // countering the scale of devicePixel-scaled tiles when rendering them // to the final surface. QMatrix4x4 matrix; - matrix.scale(1 / m_chromiumCompositorData->frameDevicePixelRatio, - 1 / m_chromiumCompositorData->frameDevicePixelRatio); + const float devicePixelRatio = m_chromiumCompositorData->frameDevicePixelRatio; + matrix.scale(1 / devicePixelRatio, 1 / devicePixelRatio); if (QSGTransformNode::matrix() != matrix) setMatrix(matrix); @@ -873,12 +873,21 @@ void DelegatedFrameNode::commit(ChromiumCompositorData *chromiumCompositorData, frameData->resource_list.clear(); QScopedPointer<DelegatedNodeTreeHandler> nodeHandler; + const QSizeF viewportSizeInPt = apiDelegate->screenRect().size(); + const QSize viewportSize = (viewportSizeInPt * devicePixelRatio).toSize(); + // We first compare if the render passes from the previous frame data are structurally // equivalent to the render passes in the current frame data. If they are, we are going // to reuse the old nodes. Otherwise, we will delete the old nodes and build a new tree. + // + // Additionally, because we clip (i.e. don't build scene graph nodes for) quads outside + // of the visible area, we also have to rebuild the tree whenever the window is resized. #if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)) cc::DelegatedFrameData *previousFrameData = m_chromiumCompositorData->previousFrameData.get(); - const bool buildNewTree = !areRenderPassStructuresEqual(frameData, previousFrameData) || m_sceneGraphNodes.empty(); + const bool buildNewTree = + !areRenderPassStructuresEqual(frameData, previousFrameData) || + m_sceneGraphNodes.empty() || + viewportSize != m_previousViewportSize; #else // No updates possible with old scenegraph nodes const bool buildNewTree = true; @@ -912,10 +921,7 @@ void DelegatedFrameNode::commit(ChromiumCompositorData *chromiumCompositorData, // All RenderPasses except the last one are rendered to an FBO. cc::RenderPass *rootRenderPass = frameData->render_pass_list.back().get(); - QRectF screenRectQt = apiDelegate->screenRect(); - gfx::Size thisSize(int(screenRectQt.width() * m_chromiumCompositorData->frameDevicePixelRatio), - int(screenRectQt.height() * m_chromiumCompositorData->frameDevicePixelRatio)); - + gfx::Rect viewportRect(toGfx(viewportSize)); for (unsigned i = 0; i < frameData->render_pass_list.size(); ++i) { cc::RenderPass *pass = frameData->render_pass_list.at(i).get(); @@ -947,7 +953,7 @@ void DelegatedFrameNode::commit(ChromiumCompositorData *chromiumCompositorData, scissorRect = pass->output_rect; } else { renderPassParent = this; - scissorRect = gfx::Rect(thisSize); + scissorRect = viewportRect; scissorRect += rootRenderPass->output_rect.OffsetFromOrigin(); } @@ -1015,6 +1021,8 @@ void DelegatedFrameNode::commit(ChromiumCompositorData *chromiumCompositorData, ResourceHolderIterator end = resourceCandidates.constEnd(); for (ResourceHolderIterator it = resourceCandidates.constBegin(); it != end ; ++it) resourcesToRelease->push_back((*it)->returnResource()); + + m_previousViewportSize = viewportSize; } void DelegatedFrameNode::flushPolygons( diff --git a/src/core/delegated_frame_node.h b/src/core/delegated_frame_node.h index cc682988d..3b6453a4c 100644 --- a/src/core/delegated_frame_node.h +++ b/src/core/delegated_frame_node.h @@ -143,6 +143,7 @@ private: bool m_contextShared; QScopedPointer<QOffscreenSurface> m_offsurface; #endif + QSize m_previousViewportSize; }; } // namespace QtWebEngineCore diff --git a/src/core/surface_factory_qt.cpp b/src/core/surface_factory_qt.cpp index e8be84807..36c05ec5d 100644 --- a/src/core/surface_factory_qt.cpp +++ b/src/core/surface_factory_qt.cpp @@ -51,27 +51,51 @@ #if defined(USE_OZONE) #include <EGL/egl.h> -#include <dlfcn.h> + +#ifndef QT_LIBDIR_EGL +#define QT_LIBDIR_EGL "/usr/lib" +#endif +#ifndef QT_LIBDIR_GLES2 +#define QT_LIBDIR_GLES2 QT_LIBDIR_EGL +#endif namespace QtWebEngineCore { +base::NativeLibrary LoadLibrary(const base::FilePath& filename) { + base::NativeLibraryLoadError error; + base::NativeLibrary library = base::LoadNativeLibrary(filename, &error); + if (!library) { + LOG(ERROR) << "Failed to load " << filename.MaybeAsASCII() << ": " << error.ToString(); + return NULL; + } + return library; +} + bool SurfaceFactoryQt::LoadEGLGLES2Bindings() { - base::NativeLibrary eglgles2Library = dlopen(NULL, RTLD_LAZY); - if (!eglgles2Library) { - LOG(ERROR) << "Failed to open EGL/GLES2 context " << dlerror(); + base::FilePath libEGLPath = QtWebEngineCore::toFilePath(QT_LIBDIR_EGL); + libEGLPath = libEGLPath.Append("libEGL.so.1"); + base::NativeLibrary eglLibrary = LoadLibrary(libEGLPath); + if (!eglLibrary) + return false; + + base::FilePath libGLES2Path = QtWebEngineCore::toFilePath(QT_LIBDIR_GLES2); + libGLES2Path = libGLES2Path.Append("libGLESv2.so.2"); + base::NativeLibrary gles2Library = LoadLibrary(libGLES2Path); + if (!gles2Library) return false; - } - gl::GLGetProcAddressProc get_proc_address = reinterpret_cast<gl::GLGetProcAddressProc>(base::GetFunctionPointerFromNativeLibrary(eglgles2Library, "eglGetProcAddress")); + gl::GLGetProcAddressProc get_proc_address = reinterpret_cast<gl::GLGetProcAddressProc>(base::GetFunctionPointerFromNativeLibrary(eglLibrary, "eglGetProcAddress")); if (!get_proc_address) { LOG(ERROR) << "eglGetProcAddress not found."; - base::UnloadNativeLibrary(eglgles2Library); + base::UnloadNativeLibrary(eglLibrary); + base::UnloadNativeLibrary(gles2Library); return false; } gl::SetGLGetProcAddressProc(get_proc_address); - gl::AddGLNativeLibrary(eglgles2Library); + gl::AddGLNativeLibrary(eglLibrary); + gl::AddGLNativeLibrary(gles2Library); return true; } diff --git a/src/core/type_conversion.h b/src/core/type_conversion.h index ed02a9db9..39c4f610c 100644 --- a/src/core/type_conversion.h +++ b/src/core/type_conversion.h @@ -139,6 +139,11 @@ inline QRectF toQt(const gfx::RectF &rect) return QRectF(rect.x(), rect.y(), rect.width(), rect.height()); } +inline gfx::Size toGfx(const QSize &size) +{ + return gfx::Size(size.width(), size.height()); +} + inline QSize toQt(const gfx::Size &size) { return QSize(size.width(), size.height()); |