1
0

Accepting request 809291 from KDE:Qt:5.15

Qt 5.15.0

OBS-URL: https://build.opensuse.org/request/show/809291
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libqt5-qtdeclarative?expand=0&rev=60
This commit is contained in:
Yuchen Lin 2020-05-29 19:14:02 +00:00 committed by Git OBS Bridge
commit f991e2df38
6 changed files with 475 additions and 9 deletions

View File

@ -0,0 +1,59 @@
From 40ba29cae5cdb2ebd6330870a0f15e2e75d40de0 Mon Sep 17 00:00:00 2001
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Date: Tue, 05 May 2020 11:36:24 +0200
Subject: [PATCH] Fix subpixel positioned text with Text.NativeRendering
We would be generating subpixel positioned glyphs based on the
relative positions of the glyphs, ignoring the fractional part
contributed by the origin of the text. So if the text origin was
inside a pixel, the subpixel antialiasing would be wrong and we
would see kerning errors.
This was especially visible when using AlignHCenter on text
with hinting disabled and resizing the item it was aligning to.
Pick-to: 5.15
Task-number: QTBUG-49646
Change-Id: I0e709ba2b5d2440e34c94c6f819befe0a65a113a
---
diff --git a/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp b/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp
index be6ef25..831586c 100644
--- a/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp
+++ b/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp
@@ -789,11 +789,12 @@
const QMargins &margins)
{
Q_ASSERT(m_font.isValid());
+ QPointF position(p.x(), p.y() - m_font.ascent());
QVector<QFixedPoint> fixedPointPositions;
const int glyphPositionsSize = glyphPositions.size();
fixedPointPositions.reserve(glyphPositionsSize);
for (int i=0; i < glyphPositionsSize; ++i)
- fixedPointPositions.append(QFixedPoint::fromPointF(glyphPositions.at(i)));
+ fixedPointPositions.append(QFixedPoint::fromPointF(position + glyphPositions.at(i)));
QTextureGlyphCache *cache = glyphCache();
@@ -815,18 +816,16 @@
Q_ASSERT(geometry->sizeOfVertex() == sizeof(QVector4D));
ushort *ip = geometry->indexDataAsUShort();
- QPointF position(p.x(), p.y() - m_font.ascent());
bool supportsSubPixelPositions = fontD->fontEngine->supportsSubPixelPositions();
for (int i=0; i<glyphIndexes.size(); ++i) {
+ QPointF glyphPosition = glyphPositions.at(i) + position;
QFixed subPixelPosition;
if (supportsSubPixelPositions)
- subPixelPosition = fontD->fontEngine->subPixelPositionForX(QFixed::fromReal(glyphPositions.at(i).x()));
+ subPixelPosition = fontD->fontEngine->subPixelPositionForX(QFixed::fromReal(glyphPosition.x()));
QTextureGlyphCache::GlyphAndSubPixelPosition glyph(glyphIndexes.at(i), subPixelPosition);
const QTextureGlyphCache::Coord &c = cache->coords.value(glyph);
- QPointF glyphPosition = glyphPositions.at(i) + position;
-
// On a retina screen the glyph positions are not pre-scaled (as opposed to
// eg. the raster paint engine). To ensure that we get the same behavior as
// the raster engine (and CoreText itself) when it comes to rounding of the

View File

@ -1,3 +1,66 @@
-------------------------------------------------------------------
Tue May 26 09:50:22 UTC 2020 - Callum Farmer <callumjfarmer13@gmail.com>
- Update to version 5.15.0:
* No changelog available
* Added qtdeclarative-5.15.0-FixMaxXMaxYExtent.patch: fixes QTBUG-83890
-------------------------------------------------------------------
Wed May 20 16:14:29 UTC 2020 - Callum Farmer <callumjfarmer13@gmail.com>
- Update to 5.15.0-rc2:
* No changelog available
-------------------------------------------------------------------
Wed May 6 11:26:52 UTC 2020 - Fabian Vogt <fabian@ritter-vogt.de>
- Update to 5.15.0-rc:
* New bugfix release
* For the changes between 5.14.2 and 5.15.0 please see:
http://code.qt.io/cgit/qt/qtdeclarative.git/plain/dist/changes-5.15.0/?h=5.15.0
-------------------------------------------------------------------
Tue May 5 11:16:16 UTC 2020 - Fabian Vogt <fvogt@suse.com>
- Add patch to fix kerning with certain labels (QTBUG-49646):
* fix-subpixel-positioned-text.patch
-------------------------------------------------------------------
Fri Apr 24 07:11:08 UTC 2020 - Fabian Vogt <fabian@ritter-vogt.de>
- Update to 5.15.0-beta4:
* New bugfix release
* No changelog available
-------------------------------------------------------------------
Tue Apr 14 06:47:24 UTC 2020 - Fabian Vogt <fabian@ritter-vogt.de>
- Update to 5.15.0-beta3:
* New bugfix release
* No changelog available
-------------------------------------------------------------------
Tue Mar 24 12:13:33 UTC 2020 - Fabian Vogt <fabian@ritter-vogt.de>
- Update to 5.15.0-beta2:
* New bugfix release
* No changelog available
-------------------------------------------------------------------
Fri Feb 28 09:58:46 UTC 2020 - Fabian Vogt <fabian@ritter-vogt.de>
- Update to 5.15.0-beta1:
* New bugfix release
* No changelog available
-------------------------------------------------------------------
Wed Feb 19 10:16:19 UTC 2020 - Fabian Vogt <fabian@ritter-vogt.de>
- Update to 5.15.0-alpha:
* New feature release
* For more details please see:
https://wiki.qt.io/New_Features_in_Qt_5.15
-------------------------------------------------------------------
Mon Jan 27 13:14:12 UTC 2020 - Fabian Vogt <fabian@ritter-vogt.de>

View File

@ -1,7 +1,7 @@
#
# spec file for package libqt5-qtdeclarative
#
# Copyright (c) 2019 SUSE LLC
# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -19,22 +19,25 @@
%define qt5_snapshot 0
%define libname libQtQuick5
%define base_name libqt5
%define real_version 5.14.1
%define so_version 5.14.1
%define tar_version qtdeclarative-everywhere-src-5.14.1
%define real_version 5.15.0
%define so_version 5.15.0
%define tar_version qtdeclarative-everywhere-src-5.15.0
Name: libqt5-qtdeclarative
Version: 5.14.1
Version: 5.15.0
Release: 0
Summary: Qt 5 Declarative Library
License: LGPL-3.0-only OR (GPL-2.0-only OR GPL-3.0-or-later)
Group: Development/Libraries/X11
URL: https://www.qt.io
Source: https://download.qt.io/official_releases/qt/5.14/%{real_version}/submodules/%{tar_version}.tar.xz
Source: https://download.qt.io/official_releases/qt/5.15/%{real_version}/submodules/%{tar_version}.tar.xz
Source1: baselibs.conf
# PATCH-FIX-UPSTREAM https://codereview.qt-project.org/c/qt/qtdeclarative/+/299258/1
Patch1: fix-subpixel-positioned-text.patch
# PATCH-FIX-OPENSUSE sse2_nojit.patch -- enable JIT and sse2 only on sse2 case
Patch100: sse2_nojit.patch
# PATCH-FIX-OPENSUSE Switch to use python3 at build time
Patch102: qtdeclarative-switch-to-python3.patch
Patch103: qtdeclarative-5.15.0-FixMaxXMaxYExtent.patch
BuildRequires: fdupes
BuildRequires: libQt5Core-private-headers-devel >= %{version}
BuildRequires: libQt5Gui-private-headers-devel >= %{version}
@ -226,6 +229,8 @@ popd
%{_libqt5_archdatadir}/qml/Qt/labs/sharedimage/
%{_libqt5_archdatadir}/qml/Qt/labs/qmlmodels/
%{_libqt5_archdatadir}/qml/Qt/labs/wavefrontmesh/
%dir %{_libqt5_archdatadir}/qml/Qt/test
%{_libqt5_archdatadir}/qml/Qt/test/qtestroot/
%{_libqt5_plugindir}/qmltooling
%files private-headers-devel
@ -246,8 +251,11 @@ popd
%{_libqt5_libdir}/libQt5Q*.so
%{_libqt5_libdir}/libQt5*.a
%{_libqt5_libdir}/pkgconfig/Qt5Q*.pc
%{_libqt5_libdir}/metatypes/qt5quick*_metatypes.json
%{_libqt5_libdir}/metatypes/qt5qml*_metatypes.json
%{_libqt5_archdatadir}/mkspecs/modules/*.pri
%{_libqt5_archdatadir}/mkspecs/features/qmlcache.prf
%{_libqt5_archdatadir}/mkspecs/features/qmltypes.prf
%{_libqt5_archdatadir}/mkspecs/features/qtquickcompiler.prf
%{_libqt5_archdatadir}/qml/QtTest

View File

@ -0,0 +1,336 @@
Parent: f5a4e984 (QQuickTextInputPrivate: refactor getImplicitWidth() to calculateImplicitWidth())
Author: David Redondo <qt@david-redondo.de>
AuthorDate: 2020-05-13 11:04:23 +0200
Commit: Mitch Curtis <mitch.curtis@qt.io>
CommitDate: 2020-05-25 10:58:35 +0200
QQuickItemView: Fix max(X/Y)Extent()
QQuickFlickable maxXExtent() and maxYExtent() return the amount of space
that is not shown when inside a ScrollView. QQuickItemView however just
returned width() if vertical and height() if horizontal. In these cases
just defer to the QQuickFlickable base implementation like minXExtent()
and minYExtent() already do.
This change also adds tst_qquicklistview2 to speed up development.
tst_QQuickListView is almost 9000 lines long, and compiling it
is slow. In addition, a similar approach (creating a second test to
avoid the slowness of a massive one) already exists for QQuickItem
tests.
Fixes: QTBUG-83890
Pick-to: 5.15
Change-Id: I7f4060c2f46ae07611bedceca0d322c5f7f6affb
========================================================================================================================
--- a/src/quick/items/qquickitemview.cpp
+++ b/src/quick/items/qquickitemview.cpp
@@ -1393,7 +1393,7 @@
{
Q_D(const QQuickItemView);
if (d->layoutOrientation() == Qt::Horizontal)
- return height();
+ return QQuickFlickable::maxYExtent();
if (d->vData.maxExtentDirty) {
d->maxExtent = d->maxExtentForAxis(d->vData, false);
@@ -1421,7 +1421,7 @@
{
Q_D(const QQuickItemView);
if (d->layoutOrientation() == Qt::Vertical)
- return width();
+ return QQuickFlickable::maxXExtent();
if (d->hData.maxExtentDirty) {
d->maxExtent = d->maxExtentForAxis(d->hData, true);
--- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
+++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
@@ -73,6 +73,8 @@
tst_QQuickListView();
private slots:
+ // WARNING: please add new tests to tst_qquicklistview2; this file is too slow to work with.
+
void init();
void cleanupTestCase();
// Test QAbstractItemModel model types
@@ -297,6 +299,8 @@
void requiredObjectListModel();
+ // WARNING: please add new tests to tst_qquicklistview2; this file is too slow to work with.
+
private:
template <class T> void items(const QUrl &source);
template <class T> void changed(const QUrl &source);
@@ -10042,6 +10046,8 @@
}
}
+// WARNING: please add new tests to tst_qquicklistview2; this file is too slow to work with.
+
QTEST_MAIN(tst_QQuickListView)
#include "tst_qquicklistview.moc"
--- a/tests/auto/quick/qquicklistview2/data/maxXExtent.qml
+++ b/tests/auto/quick/qquicklistview2/data/maxXExtent.qml
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.15
+
+Item {
+ property alias view: view
+
+ ListView {
+ id: view
+ model: 10
+ width: 200
+ height: 200
+
+ Rectangle {
+ anchors.fill: parent
+ color: "transparent"
+ border.color: "darkorange"
+ }
+
+ delegate: Rectangle {
+ width: 100
+ height: 100
+ Text {
+ text: modelData
+ }
+ }
+ }
+}
--- a/tests/auto/quick/qquicklistview2/data/maxYExtent.qml
+++ b/tests/auto/quick/qquicklistview2/data/maxYExtent.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.15
+
+Item {
+ property alias view: view
+
+ ListView {
+ id: view
+ model: 10
+ width: 200
+ height: 200
+ orientation: ListView.Horizontal
+
+ Rectangle {
+ anchors.fill: parent
+ color: "transparent"
+ border.color: "darkorange"
+ }
+
+ delegate: Rectangle {
+ width: 100
+ height: 100
+ Text {
+ text: modelData
+ }
+ }
+ }
+}
--- a/tests/auto/quick/qquicklistview2/qquicklistview2.pro
+++ b/tests/auto/quick/qquicklistview2/qquicklistview2.pro
@@ -0,0 +1,12 @@
+CONFIG += testcase
+TARGET = tst_qquicklistview2
+macos:CONFIG -= app_bundle
+
+SOURCES += tst_qquicklistview2.cpp
+
+include (../../shared/util.pri)
+include (../shared/util.pri)
+
+TESTDATA = data/*
+
+QT += core-private gui-private qml-private quick-private testlib qmltest
--- a/tests/auto/quick/qquicklistview2/tst_qquicklistview2.cpp
+++ b/tests/auto/quick/qquicklistview2/tst_qquicklistview2.cpp
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QtTest>
+#include <QtQuickTest/QtQuickTest>
+#include <QtQml/qqmlapplicationengine.h>
+#include <QtQuick/qquickview.h>
+#include <QtQuick/private/qquicklistview_p.h>
+
+#include "../../shared/util.h"
+#include "../shared/viewtestutil.h"
+
+using namespace QQuickViewTestUtil;
+
+class tst_QQuickListView2 : public QQmlDataTest
+{
+ Q_OBJECT
+
+public:
+ tst_QQuickListView2();
+
+private slots:
+ void maxExtent_data();
+ void maxExtent();
+};
+
+tst_QQuickListView2::tst_QQuickListView2()
+{
+}
+
+class FriendlyItemView : public QQuickItemView
+{
+ friend class ItemViewAccessor;
+};
+
+class ItemViewAccessor
+{
+public:
+ ItemViewAccessor(QQuickItemView *itemView) :
+ mItemView(reinterpret_cast<FriendlyItemView*>(itemView))
+ {
+ }
+
+ qreal maxXExtent() const
+ {
+ return mItemView->maxXExtent();
+ }
+
+ qreal maxYExtent() const
+ {
+ return mItemView->maxYExtent();
+ }
+
+private:
+ FriendlyItemView *mItemView = nullptr;
+};
+
+void tst_QQuickListView2::maxExtent_data()
+{
+ QTest::addColumn<QString>("qmlFilePath");
+
+ QTest::addRow("maxXExtent") << "maxXExtent.qml";
+ QTest::addRow("maxYExtent") << "maxYExtent.qml";
+}
+
+void tst_QQuickListView2::maxExtent()
+{
+ QFETCH(QString, qmlFilePath);
+
+ QScopedPointer<QQuickView> window(createView());
+ QVERIFY(window);
+ window->setSource(testFileUrl(qmlFilePath));
+ QVERIFY2(window->status() == QQuickView::Ready, qPrintable(QDebug::toString(window->errors())));
+ window->resize(640, 480);
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
+
+ QQuickListView *view = window->rootObject()->property("view").value<QQuickListView*>();
+ QVERIFY(view);
+ ItemViewAccessor viewAccessor(view);
+ if (view->orientation() == QQuickListView::Vertical)
+ QCOMPARE(viewAccessor.maxXExtent(), 0);
+ else if (view->orientation() == QQuickListView::Horizontal)
+ QCOMPARE(viewAccessor.maxYExtent(), 0);
+}
+
+QTEST_MAIN(tst_QQuickListView2)
+
+#include "tst_qquicklistview2.moc"
--- a/tests/auto/quick/quick.pro
+++ b/tests/auto/quick/quick.pro
@@ -65,6 +65,7 @@
qquickitem2 \
qquickitemlayer \
qquicklistview \
+ qquicklistview2 \
qquicktableview \
qquickloader \
qquickmousearea \

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:762fe495d2f97fd70f06dc7d3929506ea3b5e3151ad813e0629209b7bc504c8a
size 21299728

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9c3c93fb7d340b2f7d738d12408c047318c78973cb45bfc5ff6b3a57e1fef699
size 21493268