Hello community, here is the log from the commit of package libqt5-qtbase for openSUSE:Factory checked in at 2020-01-19 20:55:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libqt5-qtbase (Old) and /work/SRC/openSUSE:Factory/.libqt5-qtbase.new.26092 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libqt5-qtbase" Sun Jan 19 20:55:21 2020 rev:103 rq:759684 version:5.14.0 Changes: -------- --- /work/SRC/openSUSE:Factory/libqt5-qtbase/libqt5-qtbase.changes 2019-09-21 17:28:44.272735494 +0200 +++ /work/SRC/openSUSE:Factory/.libqt5-qtbase.new.26092/libqt5-qtbase.changes 2020-01-19 20:57:06.292039764 +0100 @@ -1,0 +2,92 @@ +Fri Dec 27 13:07:32 UTC 2019 - Fabian Vogt <[email protected]> + +- Update license tag + +------------------------------------------------------------------- +Thu Dec 26 00:05:29 UTC 2019 - Fabian Vogt <[email protected]> + +- Add patches to avoid regression with rendering of translucent text + (QTBUG-80982): + * 0001-Revert-Fix-text-rendering-regression-on-semi-transpa.patch + * 0002-Revert-Fix-crash-with-gamma-corrected-text-blending-.patch + * 0003-Revert-Handle-transparent-pen-color-in-fast-text-pat.patch + +------------------------------------------------------------------- +Thu Dec 12 12:40:51 UTC 2019 - Fabian Vogt <[email protected]> + +- Update to 5.14.0: + * New bugfix release + * For the changes between 5.13.2 and 5.14.0 please see: + https://code.qt.io/cgit/qt/qtbase.git/tree/dist/changes-5.14.0?h=v5.14.0 + * For the changes between 5.13.1 and 5.13.2 please see: + https://code.qt.io/cgit/qt/qtbase.git/tree/dist/changes-5.13.2?h=v5.14.0 + +------------------------------------------------------------------- +Wed Dec 4 14:37:31 UTC 2019 - Fabian Vogt <[email protected]> + +- Update to 5.14.0-rc: + * New bugfix release + * No changelog available + * For more details please see: + * For more details about Qt 5.14 please see: + https://wiki.qt.io/New_Features_in_Qt_5.14 +- Drop patch, Qt behaviour changed now and applications can deal with + it meanwhile: + * 0001-Revert-QWidgetWindow-Immediately-forward-close-event.patch + +------------------------------------------------------------------- +Tue Nov 12 13:00:31 UTC 2019 - Fabian Vogt <[email protected]> + +- Update to 5.14.0-beta3: + * New bugfix release + * No changelog available +- Drop libqt5-Fix-Gujarati-font.patch, didn't apply anymore: + * Was probably fixed upstream a loooong time ago (QTBUG-44568) + +------------------------------------------------------------------- +Thu Oct 24 13:22:25 UTC 2019 - Fabian Vogt <[email protected]> + +- Update to 5.14.0-beta2: + * New bugfix release + * No changelog available +- Refresh patches: + * 0001-Revert-Always-escape-the-table-names-when-creating-t.patch + +------------------------------------------------------------------- +Tue Oct 15 12:34:20 UTC 2019 - Fabian Vogt <[email protected]> + +- Update to 5.14.0-beta1: + * New bugfix release + * No changelog available +- Drop patches, now upstream: + * 0001-tslib-plugin-remove-debug-print-on-old-tslib-version.patch + * 0001-QWidget-setFocusProxy-adjust-focus-widget-properly.patch + +------------------------------------------------------------------- +Wed Oct 2 19:53:24 UTC 2019 - Fabian Vogt <[email protected]> + +- Disable relocatability, it breaks /usr/lib/sse2 (QTBUG-78948) + +------------------------------------------------------------------- +Mon Sep 30 13:29:55 UTC 2019 - Fabian Vogt <[email protected]> + +- Update to 5.14.0-alpha: + * New feature release + * No changelog available + * For more details about Qt 5.14 please see: + https://wiki.qt.io/New_Features_in_Qt_5.14 +- Refresh patches: + * 0001-Add-remote-print-queue-support.patch +- Drop patches, don't apply anymore after upstream refactoring and the + main bug for them seems fixed: + * 0001-Sanitize-QXcbScreen-s-pixelDensity-values.patch + * 0002-xcb-Use-the-screen-s-physical-DPI-as-logical-DPI-unl.patch +- Drop patches, now upstream: + * 0001-Fix-notification-of-QDockWidget-when-it-gets-undocke.patch + * 0001-Fix-CMake-config-files-for-libdir-different-from-lib.patch + * 0001-Fix-qfloat16-methods-definition-without-declaration-.patch +- Enable zstd support again, issues got fixed upstream meanwhile +- Add patch to fix build against older tslib: + * 0001-tslib-plugin-remove-debug-print-on-old-tslib-version.patch + +------------------------------------------------------------------- Old: ---- 0001-Fix-CMake-config-files-for-libdir-different-from-lib.patch 0001-Fix-notification-of-QDockWidget-when-it-gets-undocke.patch 0001-Fix-qfloat16-methods-definition-without-declaration-.patch 0001-QWidget-setFocusProxy-adjust-focus-widget-properly.patch 0001-Revert-QWidgetWindow-Immediately-forward-close-event.patch 0001-Sanitize-QXcbScreen-s-pixelDensity-values.patch 0002-xcb-Use-the-screen-s-physical-DPI-as-logical-DPI-unl.patch libqt5-Fix-Gujarati-font.patch qtbase-everywhere-src-5.13.1.tar.xz New: ---- 0001-Revert-Fix-text-rendering-regression-on-semi-transpa.patch 0002-Revert-Fix-crash-with-gamma-corrected-text-blending-.patch 0003-Revert-Handle-transparent-pen-color-in-fast-text-pat.patch qtbase-everywhere-src-5.14.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libqt5-qtbase.spec ++++++ --- /var/tmp/diff_new_pack.sQVl4I/_old 2020-01-19 20:57:11.068042273 +0100 +++ /var/tmp/diff_new_pack.sQVl4I/_new 2020-01-19 20:57:11.072042275 +0100 @@ -36,25 +36,23 @@ %endif Name: libqt5-qtbase -Version: 5.13.1 +Version: 5.14.0 Release: 0 Summary: C++ Program Library, Core Components -License: LGPL-2.1-with-Qt-Company-Qt-exception-1.1 or LGPL-3.0-only +License: LGPL-3.0-only or GPL-3.0-with-Qt-Company-Qt-exception-1.1 Group: System/Libraries Url: https://www.qt.io %define base_name libqt5 -%define real_version 5.13.1 -%define so_version 5.13.1 -%define tar_version qtbase-everywhere-src-5.13.1 -Source: https://download.qt.io/official_releases/qt/5.13/%{real_version}/submodules/%{tar_version}.tar.xz +%define real_version 5.14.0 +%define so_version 5.14.0 +%define tar_version qtbase-everywhere-src-5.14.0 +Source: https://download.qt.io/official_releases/qt/5.14/%{real_version}/submodules/%{tar_version}.tar.xz # to get mtime of file: Source1: libqt5-qtbase.changes Source2: macros.qt5 Source3: baselibs.conf Source99: libqt5-qtbase-rpmlintrc # patches 0-1000 are openSUSE and/or non-upstream(able) patches # -# PATCH-FIX-SUSE libqt5-Fix-Gujarati-font.patch bnc#878292 fix broken Gujarati font rendering -Patch3: libqt5-Fix-Gujarati-font.patch # PATCH-FIX-OPENSUSE disable-rc4-ciphers-bnc865241.diff bnc#865241-- Exclude rc4 ciphers from being used by default Patch6: disable-rc4-ciphers-bnc865241.diff Patch8: tell-the-truth-about-private-api.patch @@ -63,28 +61,20 @@ # PATCH-FEATURE-OPENSUSE 0001-Add-remote-print-queue-support.patch fate#322052 -- Automatically recognize and allow printing to remote cups servers Patch12: 0001-Add-remote-print-queue-support.patch # PATCH-FIX-OPENSUSE -Patch13: 0001-Revert-QWidgetWindow-Immediately-forward-close-event.patch -# PATCH-FIX-OPENSUSE -Patch17: 0001-Sanitize-QXcbScreen-s-pixelDensity-values.patch -Patch18: 0002-xcb-Use-the-screen-s-physical-DPI-as-logical-DPI-unl.patch -# PATCH-FIX-UPSTREAM -Patch20: 0001-Fix-qfloat16-methods-definition-without-declaration-.patch -# PATCH-FIX-OPENSUSE Patch21: 0001-Revert-Blacklist-nouveau-and-llvmpipe-for-multithrea.patch Patch22: 0002-Revert-qtlite-Fix-build-libs-with-no-feature-regular.patch Patch23: 0003-Revert-White-list-more-recent-Mesa-version-for-multi.patch Patch24: fix-fixqt4headers.patch # Revert to restore compatibility with akonadi and possibly other applications Patch30: 0001-Revert-Always-escape-the-table-names-when-creating-t.patch -# patches 1000-2000 and above from upstream 5.13 branch # -# patches 2000-3000 and above from upstream 5.14/dev branch # -Patch2000: 0001-Fix-notification-of-QDockWidget-when-it-gets-undocke.patch +# Reverts to avoid text rendering bug (QTBUG-80982) +Patch40: 0001-Revert-Fix-text-rendering-regression-on-semi-transpa.patch +Patch41: 0002-Revert-Fix-crash-with-gamma-corrected-text-blending-.patch +Patch42: 0003-Revert-Handle-transparent-pen-color-in-fast-text-pat.patch +# patches 1000-2000 and above from upstream 5.14 branch # +# patches 2000-3000 and above from upstream 5.15/dev branch # # Not accepted yet, https://codereview.qt-project.org/c/qt/qtbase/+/255384 Patch2001: 0002-Synthesize-Enter-LeaveEvent-for-accepted-QTabletEven.patch -# Not accepted yet, https://codereview.qt-project.org/c/qt/qtbase/+/273050 -Patch2002: 0001-Fix-CMake-config-files-for-libdir-different-from-lib.patch -# Not accepted yet, https://codereview.qt-project.org/c/qt/qtbase/+/273365 -Patch2003: 0001-QWidget-setFocusProxy-adjust-focus-widget-properly.patch BuildRequires: alsa-devel BuildRequires: cups-devel BuildRequires: double-conversion-devel @@ -124,6 +114,8 @@ %endif BuildRequires: pkgconfig(pango) +# Not packaged yet +#BuildRequires: pkgconfig(md4c) BuildRequires: pkgconfig(libdrm) BuildRequires: pkgconfig(xcb-randr) BuildRequires: pkgconfig(xcb-renderutil) @@ -156,8 +148,7 @@ BuildRequires: pkgconfig(xkbcommon) >= 0.4.1 BuildRequires: pkgconfig(xkbcommon-x11) >= 0.4.1 BuildRequires: pkgconfig(zlib) -# Breaks various existing codebases, see QTBUG-76521 -# BuildRequires: pkgconfig(libzstd) +BuildRequires: pkgconfig(libzstd) %if %journald BuildRequires: pkgconfig(libsystemd) %endif @@ -848,6 +839,8 @@ # so non-qt5 apps/libs don't get stripped sed -i -e 's|^\(QMAKE_STRIP.*=\).*$|\1|g' mkspecs/common/linux.conf +# -no-feature-relocatable is needed to support /usr/lib/sse2 etc., see QTBUG-78948 + echo yes | ./configure \ -prefix %{_prefix} \ -L %{libqt5_libdir} \ @@ -894,13 +887,12 @@ -system-freetype \ -cups \ -system-zlib \ - -no-zstd \ + -zstd \ -no-pch \ -glib \ -sctp \ -system-sqlite \ -no-sql-mysql \ - -no-strip \ %if %journald -journald \ %endif @@ -920,6 +912,7 @@ -plugin-sql-odbc \ -plugin-sql-mysql -I/usr/include/mysql/ \ -qpa "xcb;wayland" \ + -no-feature-relocatable \ -v \ QMAKE_CFLAGS+="$CFLAGS" \ QMAKE_CXXFLAGS+="$CXXFLAGS" @@ -1037,6 +1030,8 @@ %{libqt5_bindir}/uic* %{_bindir}/qvkgen* %{libqt5_bindir}/qvkgen* +%{_bindir}/tracegen* +%{libqt5_bindir}/tracegen* %{_bindir}/syncqt.pl* %{_bindir}/fixqt4headers.pl* %{libqt5_bindir}/syncqt.pl* ++++++ 0001-Add-remote-print-queue-support.patch ++++++ --- /var/tmp/diff_new_pack.sQVl4I/_old 2020-01-19 20:57:11.084042282 +0100 +++ /var/tmp/diff_new_pack.sQVl4I/_new 2020-01-19 20:57:11.084042282 +0100 @@ -18,10 +18,10 @@ src/plugins/printsupport/cups/qppdprintdevice.cpp | 33 +++++++- 4 files changed, 160 insertions(+), 11 deletions(-) -Index: qtbase-everywhere-src-5.12.1/src/plugins/printsupport/cups/qcupsprintengine.cpp +Index: qtbase-everywhere-src-5.14.0-alpha/src/plugins/printsupport/cups/qcupsprintengine.cpp =================================================================== ---- qtbase-everywhere-src-5.12.1.orig/src/plugins/printsupport/cups/qcupsprintengine.cpp -+++ qtbase-everywhere-src-5.12.1/src/plugins/printsupport/cups/qcupsprintengine.cpp +--- qtbase-everywhere-src-5.14.0-alpha.orig/src/plugins/printsupport/cups/qcupsprintengine.cpp ++++ qtbase-everywhere-src-5.14.0-alpha/src/plugins/printsupport/cups/qcupsprintengine.cpp @@ -48,6 +48,7 @@ #include <qbuffer.h> #include "private/qcups_p.h" // Only needed for PPK_CupsOptions @@ -72,10 +72,10 @@ QFile::remove(tempFile); } -Index: qtbase-everywhere-src-5.12.1/src/plugins/printsupport/cups/qcupsprintersupport.cpp +Index: qtbase-everywhere-src-5.14.0-alpha/src/plugins/printsupport/cups/qcupsprintersupport.cpp =================================================================== ---- qtbase-everywhere-src-5.12.1.orig/src/plugins/printsupport/cups/qcupsprintersupport.cpp -+++ qtbase-everywhere-src-5.12.1/src/plugins/printsupport/cups/qcupsprintersupport.cpp +--- qtbase-everywhere-src-5.14.0-alpha.orig/src/plugins/printsupport/cups/qcupsprintersupport.cpp ++++ qtbase-everywhere-src-5.14.0-alpha/src/plugins/printsupport/cups/qcupsprintersupport.cpp @@ -61,6 +61,35 @@ # include <cups/language.h> #endif @@ -206,10 +206,10 @@ + + QT_END_NAMESPACE -Index: qtbase-everywhere-src-5.12.1/src/plugins/printsupport/cups/qcupsprintersupport_p.h +Index: qtbase-everywhere-src-5.14.0-alpha/src/plugins/printsupport/cups/qcupsprintersupport_p.h =================================================================== ---- qtbase-everywhere-src-5.12.1.orig/src/plugins/printsupport/cups/qcupsprintersupport_p.h -+++ qtbase-everywhere-src-5.12.1/src/plugins/printsupport/cups/qcupsprintersupport_p.h +--- qtbase-everywhere-src-5.14.0-alpha.orig/src/plugins/printsupport/cups/qcupsprintersupport_p.h ++++ qtbase-everywhere-src-5.14.0-alpha/src/plugins/printsupport/cups/qcupsprintersupport_p.h @@ -56,6 +56,8 @@ #include <QtCore/qstringlist.h> @@ -234,19 +234,11 @@ }; QT_END_NAMESPACE -Index: qtbase-everywhere-src-5.12.1/src/plugins/printsupport/cups/qppdprintdevice.cpp +Index: qtbase-everywhere-src-5.14.0-alpha/src/plugins/printsupport/cups/qppdprintdevice.cpp =================================================================== ---- qtbase-everywhere-src-5.12.1.orig/src/plugins/printsupport/cups/qppdprintdevice.cpp -+++ qtbase-everywhere-src-5.12.1/src/plugins/printsupport/cups/qppdprintdevice.cpp -@@ -41,6 +41,7 @@ - - #include "qcupsprintersupport_p.h" - -+#include "qcupsprintersupport_p.h" - #include <QtCore/QMimeDatabase> - #include <qdebug.h> - -@@ -65,10 +66,36 @@ QPpdPrintDevice::QPpdPrintDevice(const Q +--- qtbase-everywhere-src-5.14.0-alpha.orig/src/plugins/printsupport/cups/qppdprintdevice.cpp ++++ qtbase-everywhere-src-5.14.0-alpha/src/plugins/printsupport/cups/qppdprintdevice.cpp +@@ -65,10 +65,36 @@ QPpdPrintDevice::QPpdPrintDevice(const Q if (parts.size() > 1) m_cupsInstance = parts.at(1).toUtf8(); ++++++ 0001-Revert-Always-escape-the-table-names-when-creating-t.patch ++++++ --- /var/tmp/diff_new_pack.sQVl4I/_old 2020-01-19 20:57:11.092042285 +0100 +++ /var/tmp/diff_new_pack.sQVl4I/_new 2020-01-19 20:57:11.092042285 +0100 @@ -19,11 +19,11 @@ .../qsqltablemodel/tst_qsqltablemodel.cpp | 10 ++ 11 files changed, 106 insertions(+), 138 deletions(-) -diff --git a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp -index febbe58506..80c0c9c522 100644 ---- a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp -+++ b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp -@@ -1551,7 +1551,7 @@ QSqlIndex QMYSQLDriver::primaryIndex(const QString& tablename) const +Index: qtbase-everywhere-src-5.14.0-beta2/src/plugins/sqldrivers/mysql/qsql_mysql.cpp +=================================================================== +--- qtbase-everywhere-src-5.14.0-beta2.orig/src/plugins/sqldrivers/mysql/qsql_mysql.cpp ++++ qtbase-everywhere-src-5.14.0-beta2/src/plugins/sqldrivers/mysql/qsql_mysql.cpp +@@ -1551,7 +1551,7 @@ QSqlIndex QMYSQLDriver::primaryIndex(con QSqlQuery i(createResult()); QString stmt(QLatin1String("show index from %1;")); QSqlRecord fil = record(tablename); @@ -32,11 +32,11 @@ while (i.isActive() && i.next()) { if (i.value(2).toString() == QLatin1String("PRIMARY")) { idx.append(fil.field(i.value(4).toString())); -diff --git a/src/plugins/sqldrivers/psql/qsql_psql.cpp b/src/plugins/sqldrivers/psql/qsql_psql.cpp -index c1be91cb22..7abd1f242b 100644 ---- a/src/plugins/sqldrivers/psql/qsql_psql.cpp -+++ b/src/plugins/sqldrivers/psql/qsql_psql.cpp -@@ -1396,8 +1396,16 @@ QSqlIndex QPSQLDriver::primaryIndex(const QString &tablename) const +Index: qtbase-everywhere-src-5.14.0-beta2/src/plugins/sqldrivers/psql/qsql_psql.cpp +=================================================================== +--- qtbase-everywhere-src-5.14.0-beta2.orig/src/plugins/sqldrivers/psql/qsql_psql.cpp ++++ qtbase-everywhere-src-5.14.0-beta2/src/plugins/sqldrivers/psql/qsql_psql.cpp +@@ -1402,8 +1402,16 @@ QSqlIndex QPSQLDriver::primaryIndex(cons QString tbl = tablename; QString schema; qSplitTableName(tbl, schema); @@ -55,7 +55,7 @@ QString stmt = QStringLiteral("SELECT pg_attribute.attname, pg_attribute.atttypid::int, " "pg_class.relname " -@@ -1432,8 +1440,16 @@ QSqlRecord QPSQLDriver::record(const QString &tablename) const +@@ -1438,8 +1446,16 @@ QSqlRecord QPSQLDriver::record(const QSt QString tbl = tablename; QString schema; qSplitTableName(tbl, schema); @@ -72,12 +72,12 @@ + else + schema = std::move(schema).toLower(); - QString stmt = QStringLiteral("SELECT pg_attribute.attname, pg_attribute.atttypid::int, " - "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, " -diff --git a/src/sql/doc/snippets/code/doc_src_sql-driver.qdoc b/src/sql/doc/snippets/code/doc_src_sql-driver.qdoc -index 9709deeccb..d127bdf8a5 100644 ---- a/src/sql/doc/snippets/code/doc_src_sql-driver.qdoc -+++ b/src/sql/doc/snippets/code/doc_src_sql-driver.qdoc + const QString adsrc = protocol() < Version8 + ? QStringLiteral("pg_attrdef.adsrc") +Index: qtbase-everywhere-src-5.14.0-beta2/src/sql/doc/snippets/code/doc_src_sql-driver.qdoc +=================================================================== +--- qtbase-everywhere-src-5.14.0-beta2.orig/src/sql/doc/snippets/code/doc_src_sql-driver.qdoc ++++ qtbase-everywhere-src-5.14.0-beta2/src/sql/doc/snippets/code/doc_src_sql-driver.qdoc @@ -237,16 +237,3 @@ Could not create database object //! [38] QPSQLDriver::getResult: Query results lost - probably discarded on executing another SQL query. @@ -95,10 +95,10 @@ -// Call toLower() on the string so that it can be matched -QSqlRecord rec = database.record(tableString.toLower()); -//! [40] -diff --git a/src/sql/doc/src/sql-driver.qdoc b/src/sql/doc/src/sql-driver.qdoc -index cccce48bb3..fd95e89812 100644 ---- a/src/sql/doc/src/sql-driver.qdoc -+++ b/src/sql/doc/src/sql-driver.qdoc +Index: qtbase-everywhere-src-5.14.0-beta2/src/sql/doc/src/sql-driver.qdoc +=================================================================== +--- qtbase-everywhere-src-5.14.0-beta2.orig/src/sql/doc/src/sql-driver.qdoc ++++ qtbase-everywhere-src-5.14.0-beta2/src/sql/doc/src/sql-driver.qdoc @@ -381,23 +381,6 @@ multibyte enabled PostgreSQL server can be found in the PostgreSQL Administrator Guide, Chapter 5. @@ -123,11 +123,11 @@ \section3 QPSQL BLOB Support Binary Large Objects are supported through the \c BYTEA field type in -diff --git a/src/sql/kernel/qsqldatabase.cpp b/src/sql/kernel/qsqldatabase.cpp -index d63a9e59a8..12ab9671b5 100644 ---- a/src/sql/kernel/qsqldatabase.cpp -+++ b/src/sql/kernel/qsqldatabase.cpp -@@ -1088,11 +1088,6 @@ QStringList QSqlDatabase::tables(QSql::TableType type) const +Index: qtbase-everywhere-src-5.14.0-beta2/src/sql/kernel/qsqldatabase.cpp +=================================================================== +--- qtbase-everywhere-src-5.14.0-beta2.orig/src/sql/kernel/qsqldatabase.cpp ++++ qtbase-everywhere-src-5.14.0-beta2/src/sql/kernel/qsqldatabase.cpp +@@ -1096,11 +1096,6 @@ QStringList QSqlDatabase::tables(QSql::T Returns the primary index for table \a tablename. If no primary index exists, an empty QSqlIndex is returned. @@ -139,7 +139,7 @@ \sa tables(), record() */ -@@ -1107,11 +1102,6 @@ QSqlIndex QSqlDatabase::primaryIndex(const QString& tablename) const +@@ -1115,11 +1110,6 @@ QSqlIndex QSqlDatabase::primaryIndex(con the table (or view) called \a tablename. The order in which the fields appear in the record is undefined. If no such table (or view) exists, an empty record is returned. @@ -151,11 +151,11 @@ */ QSqlRecord QSqlDatabase::record(const QString& tablename) const -diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp -index 7f7b81b05b..8c6ae382f6 100644 ---- a/src/sql/kernel/qsqldriver.cpp -+++ b/src/sql/kernel/qsqldriver.cpp -@@ -488,8 +488,6 @@ QString QSqlDriver::stripDelimiters(const QString &identifier, IdentifierType ty +Index: qtbase-everywhere-src-5.14.0-beta2/src/sql/kernel/qsqldriver.cpp +=================================================================== +--- qtbase-everywhere-src-5.14.0-beta2.orig/src/sql/kernel/qsqldriver.cpp ++++ qtbase-everywhere-src-5.14.0-beta2/src/sql/kernel/qsqldriver.cpp +@@ -488,8 +488,6 @@ QString QSqlDriver::stripDelimiters(cons QString QSqlDriver::sqlStatement(StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const { @@ -164,7 +164,7 @@ int i; QString s; s.reserve(128); -@@ -502,12 +500,13 @@ QString QSqlDriver::sqlStatement(StatementType type, const QString &tableName, +@@ -502,12 +500,13 @@ QString QSqlDriver::sqlStatement(Stateme if (s.isEmpty()) return s; s.chop(2); @@ -181,7 +181,7 @@ for (int i = 0; i < rec.count(); ++i) { if (!rec.isGenerated(i)) continue; -@@ -524,7 +523,8 @@ QString QSqlDriver::sqlStatement(StatementType type, const QString &tableName, +@@ -524,7 +523,8 @@ QString QSqlDriver::sqlStatement(Stateme break; } case UpdateStatement: @@ -191,7 +191,7 @@ for (i = 0; i < rec.count(); ++i) { if (!rec.isGenerated(i)) continue; -@@ -541,10 +541,10 @@ QString QSqlDriver::sqlStatement(StatementType type, const QString &tableName, +@@ -541,10 +541,10 @@ QString QSqlDriver::sqlStatement(Stateme s.clear(); break; case DeleteStatement: @@ -204,11 +204,11 @@ QString vals; for (i = 0; i < rec.count(); ++i) { if (!rec.isGenerated(i)) -diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h -index 55875359ff..97397e3159 100644 ---- a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h -+++ b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h -@@ -79,14 +79,14 @@ inline QString fixupTableName(const QString &tableName, QSqlDatabase db) +Index: qtbase-everywhere-src-5.14.0-beta2/tests/auto/sql/kernel/qsqldatabase/tst_databases.h +=================================================================== +--- qtbase-everywhere-src-5.14.0-beta2.orig/tests/auto/sql/kernel/qsqldatabase/tst_databases.h ++++ qtbase-everywhere-src-5.14.0-beta2/tests/auto/sql/kernel/qsqldatabase/tst_databases.h +@@ -80,14 +80,14 @@ inline QString fixupTableName(const QStr return tbName; } @@ -230,11 +230,11 @@ } inline static QString qTableName(const QString& prefix, QSqlDatabase db) -diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp -index f309231b10..75db31e45f 100644 ---- a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp -+++ b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp -@@ -314,8 +314,10 @@ void tst_QSqlDatabase::createTestTables(QSqlDatabase db) +Index: qtbase-everywhere-src-5.14.0-beta2/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp +=================================================================== +--- qtbase-everywhere-src-5.14.0-beta2.orig/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp ++++ qtbase-everywhere-src-5.14.0-beta2/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp +@@ -314,8 +314,10 @@ void tst_QSqlDatabase::createTestTables( " (id integer not null, t_varchar varchar(40) not null, " "t_char char(40), t_numeric numeric(6, 3), primary key (id, t_varchar))")); } @@ -246,7 +246,7 @@ + '(' + db.driver()->escapeIdentifier(QLatin1String("test test"), QSqlDriver::FieldName) + " int not null primary key)"; -@@ -339,7 +341,6 @@ void tst_QSqlDatabase::dropTestTables(QSqlDatabase db) +@@ -339,7 +341,6 @@ void tst_QSqlDatabase::dropTestTables(QS const QString qtestTable = qTableName("qtest", __FILE__, db); QStringList tableNames; tableNames << qtestTable @@ -265,7 +265,7 @@ bool views = true; bool tempTables = false; -@@ -579,10 +578,10 @@ void tst_QSqlDatabase::whitespaceInIdentifiers() +@@ -579,10 +578,10 @@ void tst_QSqlDatabase::whitespaceInIdent const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db); if (testWhiteSpaceNames(db.driverName())) { @@ -278,7 +278,7 @@ QCOMPARE(rec.count(), 1); QCOMPARE(rec.fieldName(0), QString("test test")); if (dbType == QSqlDriver::Oracle) -@@ -590,7 +589,7 @@ void tst_QSqlDatabase::whitespaceInIdentifiers() +@@ -590,7 +589,7 @@ void tst_QSqlDatabase::whitespaceInIdent else QCOMPARE(rec.field(0).type(), QVariant::Int); @@ -310,7 +310,7 @@ QCOMPARE((int)rec.count(), 2); -@@ -683,16 +681,13 @@ void tst_QSqlDatabase::testRecord(const FieldDef fieldDefs[], const QSqlRecord& +@@ -683,16 +681,13 @@ void tst_QSqlDatabase::testRecord(const void tst_QSqlDatabase::commonFieldTest(const FieldDef fieldDefs[], QSqlDatabase db, const int fieldCount) { CHECK_DATABASE(db); @@ -420,7 +420,7 @@ QCOMPARE(idx.count(), 1); QCOMPARE(idx.fieldName(0), QString("id")); } -@@ -1304,21 +1288,18 @@ void tst_QSqlDatabase::psql_escapedIdentifiers() +@@ -1304,21 +1288,18 @@ void tst_QSqlDatabase::psql_escapedIdent QSqlQuery q(db); QVERIFY_SQL( q, exec("set client_min_messages='warning'")); @@ -447,7 +447,7 @@ QSqlField fld1(field1Name, QVariant::Int); QSqlField fld2(field2Name, QVariant::String); -@@ -1326,9 +1307,7 @@ void tst_QSqlDatabase::psql_escapedIdentifiers() +@@ -1326,9 +1307,7 @@ void tst_QSqlDatabase::psql_escapedIdent rec.append(fld1); rec.append(fld2); @@ -458,7 +458,7 @@ rec = q.record(); QCOMPARE(rec.count(), 2); -@@ -1336,7 +1315,7 @@ void tst_QSqlDatabase::psql_escapedIdentifiers() +@@ -1336,7 +1315,7 @@ void tst_QSqlDatabase::psql_escapedIdent QCOMPARE(rec.fieldName(1), field2Name); QCOMPARE(rec.field(0).type(), QVariant::Int); @@ -467,7 +467,7 @@ } void tst_QSqlDatabase::psql_escapeBytea() -@@ -2167,7 +2146,7 @@ void tst_QSqlDatabase::eventNotificationPSQL() +@@ -2167,7 +2146,7 @@ void tst_QSqlDatabase::eventNotification CHECK_DATABASE(db); QSqlQuery query(db); @@ -476,7 +476,7 @@ QString payload = "payload"; QSqlDriver &driver=*(db.driver()); QVERIFY_SQL(driver, subscribeToNotification(procedureName)); -@@ -2191,22 +2170,21 @@ void tst_QSqlDatabase::eventNotificationSQLite() +@@ -2191,22 +2170,21 @@ void tst_QSqlDatabase::eventNotification QSKIP("QSQLITE specific test"); } const QString tableName(qTableName("sqlitnotifytest", __FILE__, db)); @@ -503,11 +503,11 @@ QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id, realVal) VALUES (1, 2.3)")); QTRY_COMPARE(notificationSpy.count(), 0); QTRY_COMPARE(notificationSpyExt.count(), 0); -diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp -index 784d0a70d7..710f26b72d 100644 ---- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp -+++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp -@@ -1098,7 +1098,7 @@ void tst_QSqlQuery::record() +Index: qtbase-everywhere-src-5.14.0-beta2/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +=================================================================== +--- qtbase-everywhere-src-5.14.0-beta2.orig/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp ++++ qtbase-everywhere-src-5.14.0-beta2/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +@@ -1092,7 +1092,7 @@ void tst_QSqlQuery::record() for (int i = 0; i < 3; ++i) QCOMPARE(q.record().field(i).tableName().toLower(), lowerQTest); q.clear(); @@ -516,7 +516,7 @@ SETUP_RECORD_TABLE; CHECK_RECORD; q.clear(); -@@ -3763,13 +3763,15 @@ void tst_QSqlQuery::QTBUG_5251() +@@ -3673,13 +3673,15 @@ void tst_QSqlQuery::QTBUG_5251() const QString timetest(qTableName("timetest", __FILE__, db)); tst_Databases::safeDropTable(db, timetest); QSqlQuery q(db); @@ -535,7 +535,7 @@ QVERIFY_SQL(timetestModel, select()); QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("01:02:03.666")); -@@ -3778,8 +3780,8 @@ void tst_QSqlQuery::QTBUG_5251() +@@ -3688,8 +3690,8 @@ void tst_QSqlQuery::QTBUG_5251() QVERIFY_SQL(timetestModel, submitAll()); QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("00:12:34.500")); @@ -546,11 +546,11 @@ QVERIFY_SQL(timetestModel, select()); QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("00:11:22.330")); -diff --git a/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp b/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp -index 722ef9c570..e4a277e096 100644 ---- a/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp -+++ b/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp -@@ -122,13 +122,13 @@ void tst_QSqlRelationalTableModel::recreateTestTables(QSqlDatabase db) +Index: qtbase-everywhere-src-5.14.0-beta2/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp +=================================================================== +--- qtbase-everywhere-src-5.14.0-beta2.orig/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp ++++ qtbase-everywhere-src-5.14.0-beta2/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp +@@ -122,13 +122,13 @@ void tst_QSqlRelationalTableModel::recre QVERIFY_SQL( q, exec("insert into " + reltest5 + " values('mister', 'Mr')")); if (testWhiteSpaceNames(db.driverName())) { @@ -566,7 +566,7 @@ QVERIFY_SQL( q, exec("create table " + reltest7 + " (" + db.driver()->escapeIdentifier("city id", QSqlDriver::TableName) + " int not null primary key, " + db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName) + " varchar(20))")); QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(1, 'New York')")); QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(2, 'Washington')")); -@@ -170,8 +170,8 @@ void tst_QSqlRelationalTableModel::dropTestTables( QSqlDatabase db ) +@@ -170,8 +170,8 @@ void tst_QSqlRelationalTableModel::dropT << reltest3 << reltest4 << reltest5 @@ -577,7 +577,7 @@ << qTableName("CASETEST1", db) << qTableName("casetest1", db); tst_Databases::safeDropTables( db, tableNames ); -@@ -1379,9 +1379,9 @@ void tst_QSqlRelationalTableModel::whiteSpaceInIdentifiers() +@@ -1379,9 +1379,9 @@ void tst_QSqlRelationalTableModel::white if (!testWhiteSpaceNames(db.driverName())) QSKIP("White space test irrelevant for driver"); QSqlRelationalTableModel model(0, db); @@ -589,7 +589,7 @@ db.driver()->escapeIdentifier("city id", QSqlDriver::FieldName), db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName))); QVERIFY_SQL(model, select()); -@@ -1547,6 +1547,8 @@ void tst_QSqlRelationalTableModel::relationOnFirstColumn() +@@ -1547,6 +1547,8 @@ void tst_QSqlRelationalTableModel::relat //modify the model data QVERIFY_SQL(model, setData(model.index(0, 0), 40)); @@ -598,11 +598,11 @@ QVERIFY_SQL(model, submit()); QVERIFY_SQL(model, setData(model.index(1, 0), 50)); QVERIFY_SQL(model, submit()); -diff --git a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp -index b617151a36..da31f437d9 100644 ---- a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp -+++ b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp -@@ -383,6 +383,8 @@ void tst_QSqlTableModel::selectRow() +Index: qtbase-everywhere-src-5.14.0-beta2/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp +=================================================================== +--- qtbase-everywhere-src-5.14.0-beta2.orig/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp ++++ qtbase-everywhere-src-5.14.0-beta2/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp +@@ -384,6 +384,8 @@ void tst_QSqlTableModel::selectRow() q.exec("UPDATE " + tbl + " SET a = 'Qt' WHERE id = 1"); QCOMPARE(model.data(idx).toString(), QString("b")); model.selectRow(1); @@ -611,7 +611,7 @@ QCOMPARE(model.data(idx).toString(), QString("Qt")); // Check if selectRow() refreshes a changed row. -@@ -439,6 +441,8 @@ void tst_QSqlTableModel::selectRowOverride() +@@ -440,6 +442,8 @@ void tst_QSqlTableModel::selectRowOverri // both rows should have changed QCOMPARE(model.data(idx).toString(), QString("Qt")); idx = model.index(2, 1); @@ -620,7 +620,7 @@ QCOMPARE(model.data(idx).toString(), QString("Qt")); q.exec("DELETE FROM " + tbl); -@@ -850,6 +854,8 @@ void tst_QSqlTableModel::insertRowFailure() +@@ -851,6 +855,8 @@ void tst_QSqlTableModel::insertRowFailur // populate 1 row const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db); @@ -629,7 +629,7 @@ QVERIFY_SQL(model, insertRecord(0, values)); QVERIFY_SQL(model, submitAll()); QVERIFY_SQL(model, select()); -@@ -893,6 +899,8 @@ void tst_QSqlTableModel::insertRowFailure() +@@ -894,6 +900,8 @@ void tst_QSqlTableModel::insertRowFailur // restore empty table model.revertAll(); QVERIFY_SQL(model, removeRow(0)); @@ -638,7 +638,7 @@ QVERIFY_SQL(model, submitAll()); QVERIFY_SQL(model, select()); QCOMPARE(model.rowCount(), 0); -@@ -2001,6 +2009,8 @@ void tst_QSqlTableModel::tableModifyWithBlank() +@@ -2002,6 +2010,8 @@ void tst_QSqlTableModel::tableModifyWith //Should be equivalent to QSqlQuery INSERT INTO... command) QVERIFY_SQL(model, insertRow(0)); QVERIFY_SQL(model, setData(model.index(0,0),timeString)); @@ -647,6 +647,3 @@ QVERIFY_SQL(model, submitAll()); //set a filter on the table so the only record we get is the one we just made --- -2.21.0 - ++++++ 0001-Revert-Fix-text-rendering-regression-on-semi-transpa.patch ++++++ >From d0ed9b07eb928c7d037b3fadb7423c87d7b798b0 Mon Sep 17 00:00:00 2001 From: Fabian Vogt <[email protected]> Date: Wed, 25 Dec 2019 18:54:40 +0100 Subject: [PATCH 1/3] Revert "Fix text-rendering regression on semi-transparent background on Linux" This reverts commit c0adcf0f226e247c1f2f515cd33d7945573e96a5. --- src/gui/painting/qdrawhelper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index e8d129d047..e5f752b94e 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -6044,11 +6044,11 @@ static inline void alphargbblend_argb32(quint32 *dst, uint coverage, const QRgba // nothing } else if (coverage == 0xffffffff && qAlpha(src) == 255) { blend_pixel(*dst, src); + } else if (!colorProfile) { + *dst = rgbBlend(*dst, src, coverage); } else if (*dst < 0xff000000) { // Give up and do a naive gray alphablend. Needed to deal with ARGB32 and invalid ARGB32_premultiplied, see QTBUG-60571 blend_pixel(*dst, src, qRgbAvg(coverage)); - } else if (!colorProfile) { - *dst = rgbBlend(*dst, src, coverage); } else if (srcLinear.isOpaque()) { rgbBlendPixel(dst, coverage, srcLinear, colorProfile); } else { -- 2.23.0 ++++++ 0002-Revert-Fix-crash-with-gamma-corrected-text-blending-.patch ++++++ >From a61813ac9cd94a6e7c79ccfacca9e830f905e6dc Mon Sep 17 00:00:00 2001 From: Fabian Vogt <[email protected]> Date: Wed, 25 Dec 2019 18:54:52 +0100 Subject: [PATCH 2/3] Revert "Fix crash with gamma-corrected text blending disabled" This reverts commit 6db83e2584a30b1339adba18279fbfd527a10ce7. --- src/gui/painting/qdrawhelper.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index e5f752b94e..3d06a27d8e 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -5670,8 +5670,7 @@ static inline void alphamapblend_argb32(quint32 *dst, int coverage, QRgba64 srcL QRgb s = *dst; blend_pixel(s, src); // Then gamma-corrected blend with glyph shape - QRgba64 s64 = colorProfile ? colorProfile->toLinear64(s) : QRgba64::fromArgb32(s); - grayBlendPixel(dst, coverage, s64, colorProfile); + grayBlendPixel(dst, coverage, colorProfile->toLinear64(s), colorProfile); } } @@ -5712,9 +5711,7 @@ static inline void alphamapblend_generic(int coverage, QRgba64 *dest, int x, con QRgba64 s = dest[x]; blend_pixel(s, src); // Then gamma-corrected blend with glyph shape - if (colorProfile) - s = colorProfile->toLinear(s); - grayBlendPixel(dest[x], coverage, s, colorProfile); + grayBlendPixel(dest[x], coverage, colorProfile->toLinear(s), colorProfile); } } @@ -6056,8 +6053,7 @@ static inline void alphargbblend_argb32(quint32 *dst, uint coverage, const QRgba QRgb s = *dst; blend_pixel(s, src); // Then gamma-corrected blend with glyph shape - QRgba64 s64 = colorProfile ? colorProfile->toLinear64(s) : QRgba64::fromArgb32(s); - rgbBlendPixel(dst, coverage, s64, colorProfile); + rgbBlendPixel(dst, coverage, colorProfile->toLinear64(s), colorProfile); } } @@ -6088,9 +6084,7 @@ static inline void alphargbblend_generic(uint coverage, QRgba64 *dest, int x, co QRgba64 s = dest[x]; blend_pixel(s, src); // Then gamma-corrected blend with glyph shape - if (colorProfile) - s = colorProfile->toLinear(s); - rgbBlendPixel(dest[x], coverage, s, colorProfile); + rgbBlendPixel(dest[x], coverage, colorProfile->toLinear(s), colorProfile); } } -- 2.23.0 ++++++ 0003-Revert-Handle-transparent-pen-color-in-fast-text-pat.patch ++++++ >From 84a71a1b9e600dc641e7ace5a6b384c0e138753e Mon Sep 17 00:00:00 2001 From: Fabian Vogt <[email protected]> Date: Wed, 25 Dec 2019 18:55:01 +0100 Subject: [PATCH 3/3] Revert "Handle transparent pen color in fast text path" This reverts commit d0d18b06458edd3b6b0712ea71c787404bbaa7e1. --- src/gui/painting/qdrawhelper.cpp | 187 +++++++++++------------ src/gui/painting/qdrawhelper_p.h | 2 - src/gui/painting/qpaintengine_raster.cpp | 4 +- src/gui/painting/qrgba64_p.h | 2 - 4 files changed, 94 insertions(+), 101 deletions(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 3d06a27d8e..edb363ac69 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -5658,60 +5658,44 @@ static inline void alphamapblend_argb32(quint32 *dst, int coverage, QRgba64 srcL { if (coverage == 0) { // nothing - } else if (coverage == 255 || !colorProfile) { - blend_pixel(*dst, src, coverage); - } else if (*dst < 0xff000000) { - // Give up and do a naive gray alphablend. Needed to deal with ARGB32 and invalid ARGB32_premultiplied, see QTBUG-60571 - blend_pixel(*dst, src, coverage); - } else if (src >= 0xff000000) { - grayBlendPixel(dst, coverage, srcLinear, colorProfile); + } else if (coverage == 255) { + *dst = src; + } else if (!colorProfile) { + *dst = INTERPOLATE_PIXEL_255(src, coverage, *dst, 255 - coverage); } else { - // First do naive blend with text-color - QRgb s = *dst; - blend_pixel(s, src); - // Then gamma-corrected blend with glyph shape - grayBlendPixel(dst, coverage, colorProfile->toLinear64(s), colorProfile); + if (*dst >= 0xff000000) { + grayBlendPixel(dst, coverage, srcLinear, colorProfile); + } else { + // Give up and do a naive gray alphablend. Needed to deal with ARGB32 and invalid ARGB32_premultiplied, see QTBUG-60571 + *dst = INTERPOLATE_PIXEL_255(src, coverage, *dst, 255 - coverage); + } } } #if QT_CONFIG(raster_64bit) - -static inline void grayBlendPixel(QRgba64 &dst, int coverage, QRgba64 srcLinear, const QColorTrcLut *colorProfile) -{ - // Do a gammacorrected gray alphablend... - QRgba64 dstColor = dst; - if (colorProfile) { - if (dstColor.isOpaque()) - dstColor = colorProfile->toLinear(dstColor); - else if (!dstColor.isTransparent()) - dstColor = colorProfile->toLinear(dstColor.unpremultiplied()).premultiplied(); - } - - blend_pixel(dstColor, srcLinear, coverage); - - if (colorProfile) { - if (dstColor.isOpaque()) - dstColor = colorProfile->fromLinear(dstColor); - else if (!dstColor.isTransparent()) - dstColor = colorProfile->fromLinear(dstColor.unpremultiplied()).premultiplied(); - } - dst = dstColor; -} - static inline void alphamapblend_generic(int coverage, QRgba64 *dest, int x, const QRgba64 &srcLinear, const QRgba64 &src, const QColorTrcLut *colorProfile) { if (coverage == 0) { // nothing } else if (coverage == 255) { - blend_pixel(dest[x], src); - } else if (src.isOpaque()) { - grayBlendPixel(dest[x], coverage, srcLinear, colorProfile); + dest[x] = src; } else { - // First do naive blend with text-color - QRgba64 s = dest[x]; - blend_pixel(s, src); - // Then gamma-corrected blend with glyph shape - grayBlendPixel(dest[x], coverage, colorProfile->toLinear(s), colorProfile); + QRgba64 dstColor = dest[x]; + if (colorProfile) { + if (dstColor.isOpaque()) + dstColor = colorProfile->toLinear(dstColor); + else if (!dstColor.isTransparent()) + dstColor = colorProfile->toLinear(dstColor.unpremultiplied()).premultiplied(); + } + + dstColor = interpolate255(srcLinear, coverage, dstColor, 255 - coverage); + if (colorProfile) { + if (dstColor.isOpaque()) + dstColor = colorProfile->fromLinear(dstColor); + else if (!dstColor.isTransparent()) + dstColor = colorProfile->fromLinear(dstColor.unpremultiplied()).premultiplied(); + } + dest[x] = dstColor; } } @@ -5730,8 +5714,12 @@ static void qt_alphamapblit_generic(QRasterBuffer *rasterBuffer, colorProfile = QGuiApplicationPrivate::instance()->colorProfileForA8Text(); QRgba64 srcColor = color; - if (colorProfile && color.isOpaque()) - srcColor = colorProfile->toLinear(srcColor); + if (colorProfile) { + if (color.isOpaque()) + srcColor = colorProfile->toLinear(srcColor); + else + srcColor = colorProfile->toLinear(srcColor.unpremultiplied()).premultiplied(); + } alignas(8) QRgba64 buffer[BufferSize]; const DestFetchProc64 destFetch64 = destFetchProc64[rasterBuffer->format]; @@ -5804,8 +5792,12 @@ static void qt_alphamapblit_generic(QRasterBuffer *rasterBuffer, colorProfile = QGuiApplicationPrivate::instance()->colorProfileForA8Text(); QRgba64 srcColor = color; - if (colorProfile && color.isOpaque()) - srcColor = colorProfile->toLinear(srcColor); + if (colorProfile) { + if (color.isOpaque()) + srcColor = colorProfile->toLinear(srcColor); + else + srcColor = colorProfile->toLinear(srcColor.unpremultiplied()).premultiplied(); + } quint32 buffer[BufferSize]; const DestFetchProc destFetch = destFetchProc[rasterBuffer->format]; @@ -5880,7 +5872,7 @@ void qt_alphamapblit_quint16(QRasterBuffer *rasterBuffer, int mapWidth, int mapHeight, int mapStride, const QClipData *clip, bool useGammaCorrection) { - if (useGammaCorrection || !color.isOpaque()) { + if (useGammaCorrection) { qt_alphamapblit_generic(rasterBuffer, x, y, color, map, mapWidth, mapHeight, mapStride, clip, useGammaCorrection); return; } @@ -5939,8 +5931,12 @@ static void qt_alphamapblit_argb32(QRasterBuffer *rasterBuffer, colorProfile = QGuiApplicationPrivate::instance()->colorProfileForA8Text(); QRgba64 srcColor = color; - if (colorProfile && color.isOpaque()) - srcColor = colorProfile->toLinear(srcColor); + if (colorProfile) { + if (color.isOpaque()) + srcColor = colorProfile->toLinear(srcColor); + else + srcColor = colorProfile->toLinear(srcColor.unpremultiplied()).premultiplied(); + } if (!clip) { quint32 *dest = reinterpret_cast<quint32*>(rasterBuffer->scanLine(y)) + x; @@ -6035,59 +6031,48 @@ static inline QRgb rgbBlend(QRgb d, QRgb s, uint rgbAlpha) #endif } -static inline void alphargbblend_argb32(quint32 *dst, uint coverage, const QRgba64 &srcLinear, quint32 src, const QColorTrcLut *colorProfile) +#if QT_CONFIG(raster_64bit) +static inline void alphargbblend_generic(uint coverage, QRgba64 *dest, int x, const QRgba64 &srcLinear, const QRgba64 &src, const QColorTrcLut *colorProfile) { if (coverage == 0xff000000) { // nothing - } else if (coverage == 0xffffffff && qAlpha(src) == 255) { - blend_pixel(*dst, src); - } else if (!colorProfile) { - *dst = rgbBlend(*dst, src, coverage); - } else if (*dst < 0xff000000) { - // Give up and do a naive gray alphablend. Needed to deal with ARGB32 and invalid ARGB32_premultiplied, see QTBUG-60571 - blend_pixel(*dst, src, qRgbAvg(coverage)); - } else if (srcLinear.isOpaque()) { - rgbBlendPixel(dst, coverage, srcLinear, colorProfile); + } else if (coverage == 0xffffffff) { + dest[x] = src; } else { - // First do naive blend with text-color - QRgb s = *dst; - blend_pixel(s, src); - // Then gamma-corrected blend with glyph shape - rgbBlendPixel(dst, coverage, colorProfile->toLinear64(s), colorProfile); + QRgba64 dstColor = dest[x]; + if (dstColor.isOpaque()) { + if (colorProfile) + dstColor = colorProfile->toLinear(dstColor); + dstColor = rgbBlend(dstColor, srcLinear, coverage); + if (colorProfile) + dstColor = colorProfile->fromLinear(dstColor); + dest[x] = dstColor; + } else { + // Do a gray alphablend. + alphamapblend_generic(qRgbAvg(coverage), dest, x, srcLinear, src, colorProfile); + } } } +#endif -#if QT_CONFIG(raster_64bit) -static inline void rgbBlendPixel(QRgba64 &dst, int coverage, QRgba64 slinear, const QColorTrcLut *colorProfile) -{ - // Do a gammacorrected RGB alphablend... - const QRgba64 dlinear = colorProfile ? colorProfile->toLinear64(dst) : dst; - - QRgba64 blend = rgbBlend(dlinear, slinear, coverage); - - dst = colorProfile ? colorProfile->fromLinear(blend) : blend; -} - -static inline void alphargbblend_generic(uint coverage, QRgba64 *dest, int x, const QRgba64 &srcLinear, const QRgba64 &src, const QColorTrcLut *colorProfile) +static inline void alphargbblend_argb32(quint32 *dst, uint coverage, const QRgba64 &srcLinear, quint32 src, const QColorTrcLut *colorProfile) { if (coverage == 0xff000000) { // nothing } else if (coverage == 0xffffffff) { - blend_pixel(dest[x], src); - } else if (!dest[x].isOpaque()) { - // Do a gray alphablend. - alphamapblend_generic(qRgbAvg(coverage), dest, x, srcLinear, src, colorProfile); - } else if (src.isOpaque()) { - rgbBlendPixel(dest[x], coverage, srcLinear, colorProfile); - } else { - // First do naive blend with text-color - QRgba64 s = dest[x]; - blend_pixel(s, src); - // Then gamma-corrected blend with glyph shape - rgbBlendPixel(dest[x], coverage, colorProfile->toLinear(s), colorProfile); + *dst = src; + } else if (*dst < 0xff000000) { + // Give up and do a naive gray alphablend. Needed to deal with ARGB32 and invalid ARGB32_premultiplied, see QTBUG-60571 + const int a = qRgbAvg(coverage); + *dst = INTERPOLATE_PIXEL_255(src, a, *dst, 255 - a); + } else if (!colorProfile) { + *dst = rgbBlend(*dst, src, coverage); + } else { + rgbBlendPixel(dst, coverage, srcLinear, colorProfile); } } +#if QT_CONFIG(raster_64bit) static void qt_alphargbblit_generic(QRasterBuffer *rasterBuffer, int x, int y, const QRgba64 &color, const uint *src, int mapWidth, int mapHeight, int srcStride, @@ -6102,8 +6087,12 @@ static void qt_alphargbblit_generic(QRasterBuffer *rasterBuffer, colorProfile = QGuiApplicationPrivate::instance()->colorProfileForA32Text(); QRgba64 srcColor = color; - if (colorProfile && color.isOpaque()) - srcColor = colorProfile->toLinear(srcColor); + if (colorProfile) { + if (color.isOpaque()) + srcColor = colorProfile->toLinear(srcColor); + else + srcColor = colorProfile->toLinear(srcColor.unpremultiplied()).premultiplied(); + } alignas(8) QRgba64 buffer[BufferSize]; const DestFetchProc64 destFetch64 = destFetchProc64[rasterBuffer->format]; @@ -6175,8 +6164,12 @@ static void qt_alphargbblit_generic(QRasterBuffer *rasterBuffer, colorProfile = QGuiApplicationPrivate::instance()->colorProfileForA32Text(); QRgba64 srcColor = color; - if (colorProfile && color.isOpaque()) - srcColor = colorProfile->toLinear(srcColor); + if (colorProfile) { + if (color.isOpaque()) + srcColor = colorProfile->toLinear(srcColor); + else + srcColor = colorProfile->toLinear(srcColor.unpremultiplied()).premultiplied(); + } quint32 buffer[BufferSize]; const DestFetchProc destFetch = destFetchProc[rasterBuffer->format]; @@ -6249,8 +6242,12 @@ static void qt_alphargbblit_argb32(QRasterBuffer *rasterBuffer, colorProfile = QGuiApplicationPrivate::instance()->colorProfileForA32Text(); QRgba64 srcColor = color; - if (colorProfile && color.isOpaque()) - srcColor = colorProfile->toLinear(srcColor); + if (colorProfile) { + if (color.isOpaque()) + srcColor = colorProfile->toLinear(srcColor); + else + srcColor = colorProfile->toLinear(srcColor.unpremultiplied()).premultiplied(); + } if (!clip) { quint32 *dst = reinterpret_cast<quint32*>(rasterBuffer->scanLine(y)) + x; diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h index dd42b96d79..9c5d525722 100644 --- a/src/gui/painting/qdrawhelper_p.h +++ b/src/gui/painting/qdrawhelper_p.h @@ -671,8 +671,6 @@ static Q_ALWAYS_INLINE void blend_pixel(quint32 &dst, const quint32 src) static Q_ALWAYS_INLINE void blend_pixel(quint32 &dst, const quint32 src, const int const_alpha) { - if (const_alpha == 255) - return blend_pixel(dst, src); if (src != 0) { const quint32 s = BYTE_MUL(src, const_alpha); dst = s + BYTE_MUL(dst, qAlpha(~s)); diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 40c822076b..87312b920a 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -842,8 +842,8 @@ void QRasterPaintEngine::updateRasterState() const QPainter::CompositionMode mode = s->composition_mode; s->flags.fast_text = (s->penData.type == QSpanData::Solid) && s->intOpacity == 256 - && (mode == QPainter::CompositionMode_SourceOver - || (mode == QPainter::CompositionMode_Source + && (mode == QPainter::CompositionMode_Source + || (mode == QPainter::CompositionMode_SourceOver && s->penData.solidColor.isOpaque())); } diff --git a/src/gui/painting/qrgba64_p.h b/src/gui/painting/qrgba64_p.h index d145dbfbea..ca879de27c 100644 --- a/src/gui/painting/qrgba64_p.h +++ b/src/gui/painting/qrgba64_p.h @@ -284,8 +284,6 @@ static Q_ALWAYS_INLINE void blend_pixel(QRgba64 &dst, QRgba64 src) static Q_ALWAYS_INLINE void blend_pixel(QRgba64 &dst, QRgba64 src, const int const_alpha) { - if (const_alpha == 255) - return blend_pixel(dst, src); if (!src.isTransparent()) { src = multiplyAlpha255(src, const_alpha); dst = src + multiplyAlpha65535(dst, 65535 - src.alpha()); -- 2.23.0 ++++++ qtbase-everywhere-src-5.13.1.tar.xz -> qtbase-everywhere-src-5.14.0.tar.xz ++++++ /work/SRC/openSUSE:Factory/libqt5-qtbase/qtbase-everywhere-src-5.13.1.tar.xz /work/SRC/openSUSE:Factory/.libqt5-qtbase.new.26092/qtbase-everywhere-src-5.14.0.tar.xz differ: char 25, line 1
