diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index 4c1f9f20f7..da4d98955d 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -367,7 +367,6 @@ Q_GLOBAL_STATIC(QMetaTypeCustomRegistery, customTypeRegistery) \value QPixmap QPixmap \value QLocale QLocale \value QBitmap QBitmap - \value QMatrix QMatrix \value QTransform QTransform \value QMatrix4x4 QMatrix4x4 \value QVector2D QVector2D diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index 32d45b34ff..b9ab0cbca6 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -176,7 +176,6 @@ inline Q_DECL_CONSTEXPR int qMetaTypeId(); F(QPen, 76, QPen) \ F(QTextLength, 77, QTextLength) \ F(QTextFormat, 78, QTextFormat) \ - F(QMatrix, 79, QMatrix) \ F(QTransform, 80, QTransform) \ F(QMatrix4x4, 81, QMatrix4x4) \ F(QVector2D, 82, QVector2D) \ @@ -473,7 +472,7 @@ public: QFont = 64, QPixmap = 65, QBrush = 66, QColor = 67, QPalette = 68, QIcon = 69, QImage = 70, QPolygon = 71, QRegion = 72, QBitmap = 73, QCursor = 74, QKeySequence = 75, QPen = 76, QTextLength = 77, QTextFormat = 78, - QMatrix = 79, QTransform = 80, QMatrix4x4 = 81, QVector2D = 82, + QTransform = 80, QMatrix4x4 = 81, QVector2D = 82, QVector3D = 83, QVector4D = 84, QQuaternion = 85, QPolygonF = 86, QColorSpace = 87, // Widget types diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index f339ff66cd..7d93dde022 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -1669,7 +1669,6 @@ Q_CORE_EXPORT void QVariantPrivate::registerHandler(const int /* Modules::Names \value Locale a QLocale \value LongLong a \l qlonglong \value Map a QVariantMap - \value Matrix a QMatrix \value Transform a QTransform \value Matrix4x4 a QMatrix4x4 \value Palette a QPalette @@ -2486,7 +2485,7 @@ void QVariant::load(QDataStream &s) typeId = QMetaType::QSizePolicy; } else if (typeId > 75 && typeId <= 86) { // and as a result these types received lower ids too - // QKeySequence QPen QTextLength QTextFormat QMatrix QTransform QMatrix4x4 QVector2D QVector3D QVector4D QQuaternion + // QKeySequence QPen QTextLength QTextFormat QTransform QMatrix4x4 QVector2D QVector3D QVector4D QQuaternion typeId -=1; } } diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h index 5f0fdd4bf5..cf95f12689 100644 --- a/src/corelib/kernel/qvariant.h +++ b/src/corelib/kernel/qvariant.h @@ -72,7 +72,6 @@ class QEasingCurve; class QLine; class QLineF; class QLocale; -class QMatrix; class QTransform; class QStringList; class QTime; @@ -190,7 +189,6 @@ class Q_CORE_EXPORT QVariant Pen = QMetaType::QPen, TextLength = QMetaType::QTextLength, TextFormat = QMetaType::QTextFormat, - Matrix = QMetaType::QMatrix, Transform = QMetaType::QTransform, Matrix4x4 = QMetaType::QMatrix4x4, Vector2D = QMetaType::QVector2D, diff --git a/src/corelib/tools/qpoint.h b/src/corelib/tools/qpoint.h index f0a91c4ff8..1258e465dd 100644 --- a/src/corelib/tools/qpoint.h +++ b/src/corelib/tools/qpoint.h @@ -265,7 +265,6 @@ public: #endif private: - friend class QMatrix; friend class QTransform; qreal xp; diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index eb3b07fdae..b3108529c2 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -160,7 +160,6 @@ qt_add_module(Gui painting/qgrayraster.c painting/qgrayraster_p.h painting/qicc.cpp painting/qicc_p.h painting/qimagescale.cpp - painting/qmatrix.cpp painting/qmatrix.h painting/qmemrotate.cpp painting/qmemrotate_p.h painting/qoutlinemapper.cpp painting/qoutlinemapper_p.h painting/qpagedpaintdevice.cpp painting/qpagedpaintdevice.h painting/qpagedpaintdevice_p.h diff --git a/src/gui/image/qbitmap.cpp b/src/gui/image/qbitmap.cpp index a44f7151b1..88af4073c8 100644 --- a/src/gui/image/qbitmap.cpp +++ b/src/gui/image/qbitmap.cpp @@ -310,18 +310,4 @@ QBitmap QBitmap::transformed(const QTransform &matrix) const return bm; } -#if QT_DEPRECATED_SINCE(5, 13) -/*! - \overload - \obsolete - - This convenience function converts the \a matrix to a QTransform - and calls the overloaded function. -*/ -QBitmap QBitmap::transformed(const QMatrix &matrix) const -{ - return transformed(QTransform(matrix)); -} -#endif - QT_END_NAMESPACE diff --git a/src/gui/image/qbitmap.h b/src/gui/image/qbitmap.h index 3cc360f670..2bdfa73bdf 100644 --- a/src/gui/image/qbitmap.h +++ b/src/gui/image/qbitmap.h @@ -76,10 +76,6 @@ public: static QBitmap fromData(const QSize &size, const uchar *bits, QImage::Format monoFormat = QImage::Format_MonoLSB); -#if QT_DEPRECATED_SINCE(5, 13) - QT_DEPRECATED_X("Use QBitmap::transformed(QTransform) instead") - QBitmap transformed(const QMatrix &) const; -#endif QBitmap transformed(const QTransform &matrix) const; typedef QExplicitlySharedDataPointer DataPtr; diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp index 684051786d..1406683b97 100644 --- a/src/gui/image/qimage.cpp +++ b/src/gui/image/qimage.cpp @@ -43,7 +43,6 @@ #include "qdatastream.h" #include "qcolortransform.h" #include "qmap.h" -#include "qmatrix.h" #include "qtransform.h" #include "qimagereader.h" #include "qimagewriter.h" @@ -2856,65 +2855,6 @@ QImage QImage::scaledToHeight(int h, Qt::TransformationMode mode) const return transformed(wm, mode); } - -#if QT_DEPRECATED_SINCE(5, 15) - -/*! - \obsolete - - Use trueMatrix(const QTransform &matrix, int w, int h) instead. - - \fn QMatrix QImage::trueMatrix(const QMatrix &matrix, int width, int height) - - Returns the actual matrix used for transforming an image with the - given \a width, \a height and \a matrix. - - When transforming an image using the transformed() function, the - transformation matrix is internally adjusted to compensate for - unwanted translation, i.e. transformed() returns the smallest - image containing all transformed points of the original image. - This function returns the modified matrix, which maps points - correctly from the original image into the new image. - - \sa transformed(), {QImage#Image Transformations}{Image - Transformations} -*/ -QMatrix QImage::trueMatrix(const QMatrix &matrix, int w, int h) -{ - return trueMatrix(QTransform(matrix), w, h).toAffine(); -} - -/*! - \obsolete - - Use transformed(const QTransform &matrix, Qt::TransformationMode mode) instead. - - Returns a copy of the image that is transformed using the given - transformation \a matrix and transformation \a mode. - - The returned image will normally have the same {Image Formats}{format} as - the original image. However, a complex transformation may result in an - image where not all pixels are covered by the transformed pixels of the - original image. In such cases, those background pixels will be assigned a - transparent color value, and the transformed image will be given a format - with an alpha channel, even if the orginal image did not have that. - - The transformation \a matrix is internally adjusted to compensate - for unwanted translation; i.e. the image produced is the smallest - image that contains all the transformed points of the original - image. Use the trueMatrix() function to retrieve the actual matrix - used for transforming an image. - - \sa trueMatrix(), {QImage#Image Transformations}{Image - Transformations} -*/ -QImage QImage::transformed(const QMatrix &matrix, Qt::TransformationMode mode) const -{ - return transformed(QTransform(matrix), mode); -} - -#endif // QT_DEPRECATED_SINCE(5, 15) - /*! Builds and returns a 1-bpp mask from the alpha buffer in this image. Returns a null image if the image's format is diff --git a/src/gui/image/qimage.h b/src/gui/image/qimage.h index 5a1524b419..df8d2729ef 100644 --- a/src/gui/image/qimage.h +++ b/src/gui/image/qimage.h @@ -60,7 +60,6 @@ QT_BEGIN_NAMESPACE class QColorSpace; class QColorTransform; class QIODevice; -class QMatrix; class QStringList; class QTransform; class QVariant; @@ -247,12 +246,6 @@ public: Qt::TransformationMode mode = Qt::FastTransformation) const; QImage scaledToWidth(int w, Qt::TransformationMode mode = Qt::FastTransformation) const; QImage scaledToHeight(int h, Qt::TransformationMode mode = Qt::FastTransformation) const; -#if QT_DEPRECATED_SINCE(5, 15) - QT_DEPRECATED_X("Use transformed(const QTransform &matrix, Qt::TransformationMode mode)") - QImage transformed(const QMatrix &matrix, Qt::TransformationMode mode = Qt::FastTransformation) const; - QT_DEPRECATED_X("trueMatrix(const QTransform &, int w, int h)") - static QMatrix trueMatrix(const QMatrix &, int w, int h); -#endif // QT_DEPRECATED_SINCE(5, 15) QImage transformed(const QTransform &matrix, Qt::TransformationMode mode = Qt::FastTransformation) const; static QTransform trueMatrix(const QTransform &, int w, int h); QImage mirrored(bool horizontally = false, bool vertically = true) const & diff --git a/src/gui/image/qpicture.cpp b/src/gui/image/qpicture.cpp index d469ac8aae..73c97f4436 100644 --- a/src/gui/image/qpicture.cpp +++ b/src/gui/image/qpicture.cpp @@ -465,7 +465,7 @@ bool QPicture::exec(QPainter *painter, QDataStream &s, int nrecords) QPen pen; QBrush brush; QRegion rgn; - QMatrix wmatrix; + qreal wmatrix[6]; QTransform matrix; QTransform worldMatrix = painter->transform(); @@ -820,8 +820,12 @@ bool QPicture::exec(QPainter *painter, QDataStream &s, int nrecords) if (d->formatMajor >= 8) { s >> matrix >> i_8; } else { - s >> wmatrix >> i_8; - matrix = QTransform(wmatrix); + s >> wmatrix[0] >> wmatrix[1] + >> wmatrix[2] >> wmatrix[3] + >> wmatrix[4] >> wmatrix[5] >> i_8; + matrix = QTransform(wmatrix[0], wmatrix[1], + wmatrix[2], wmatrix[3], + wmatrix[4], wmatrix[5]); } // i_8 is always false due to updateXForm() in qpaintengine_pic.cpp painter->setTransform(matrix * worldMatrix, i_8); diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index 269f236ecd..c162b706cb 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -458,24 +458,6 @@ QTransform QPixmap::trueMatrix(const QTransform &m, int w, int h) return QImage::trueMatrix(m, w, h); } -#if QT_DEPRECATED_SINCE(5, 15) -/*! - \overload - \obsolete - - Use trueMatrix(const QTransform &m, int w, int h) instead. - - This convenience function loads the matrix \a m into a - QTransform and calls the overloaded function with the - QTransform and the width \a w and the height \a h. - */ -QMatrix QPixmap::trueMatrix(const QMatrix &m, int w, int h) -{ - return trueMatrix(QTransform(m), w, h).toAffine(); -} -#endif // QT_DEPRECATED_SINCE(5, 15) - - /*! \fn bool QPixmap::isQBitmap() const @@ -1238,29 +1220,6 @@ QPixmap QPixmap::transformed(const QTransform &transform, return data->transformed(transform, mode); } -#if QT_DEPRECATED_SINCE(5, 15) -/*! - \overload - \obsolete - - Use transformed(const QTransform &transform, Qt::TransformationMode mode)() instead. - - This convenience function loads the \a matrix into a - QTransform and calls the overloaded function. - */ -QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode) const -{ - return transformed(QTransform(matrix), mode); -} -#endif // QT_DEPRECATED_SINCE(5, 15) - - - - - - - - /*! \class QPixmap \inmodule QtGui diff --git a/src/gui/image/qpixmap.h b/src/gui/image/qpixmap.h index e47a9fe59e..2708d267b9 100644 --- a/src/gui/image/qpixmap.h +++ b/src/gui/image/qpixmap.h @@ -129,12 +129,6 @@ public: Qt::TransformationMode mode = Qt::FastTransformation) const; QPixmap scaledToWidth(int w, Qt::TransformationMode mode = Qt::FastTransformation) const; QPixmap scaledToHeight(int h, Qt::TransformationMode mode = Qt::FastTransformation) const; -#if QT_DEPRECATED_SINCE(5, 15) - QT_DEPRECATED_X("Use transformed(const QTransform &, Qt::TransformationMode mode)") - QPixmap transformed(const QMatrix &, Qt::TransformationMode mode = Qt::FastTransformation) const; - QT_DEPRECATED_X("Use trueMatrix(const QTransform &m, int w, int h)") - static QMatrix trueMatrix(const QMatrix &m, int w, int h); -#endif // QT_DEPRECATED_SINCE(5, 15) QPixmap transformed(const QTransform &, Qt::TransformationMode mode = Qt::FastTransformation) const; static QTransform trueMatrix(const QTransform &m, int w, int h); diff --git a/src/gui/kernel/qwindowdefs.h b/src/gui/kernel/qwindowdefs.h index cb0842da8c..5d4955c436 100644 --- a/src/gui/kernel/qwindowdefs.h +++ b/src/gui/kernel/qwindowdefs.h @@ -68,7 +68,6 @@ class QFontMetrics; class QFontInfo; class QPen; class QBrush; -class QMatrix; class QPixmap; class QBitmap; class QMovie; diff --git a/src/gui/math3d/qmatrix4x4.cpp b/src/gui/math3d/qmatrix4x4.cpp index cdaed788e9..2adb94573b 100644 --- a/src/gui/math3d/qmatrix4x4.cpp +++ b/src/gui/math3d/qmatrix4x4.cpp @@ -40,7 +40,6 @@ #include "qmatrix4x4.h" #include #include -#include #include #include @@ -187,42 +186,6 @@ QMatrix4x4::QMatrix4x4(const float *values, int cols, int rows) flagBits = General; } -#if QT_DEPRECATED_SINCE(5, 15) -/*! - \obsolete - - Constructs a 4x4 matrix from a conventional Qt 2D affine - transformation \a matrix. - - If \a matrix has a special type (identity, translate, scale, etc), - the programmer should follow this constructor with a call to - optimize() if they wish QMatrix4x4 to optimize further - calls to translate(), scale(), etc. - - \sa toAffine(), optimize() -*/ -QMatrix4x4::QMatrix4x4(const QMatrix& matrix) -{ - m[0][0] = matrix.m11(); - m[0][1] = matrix.m12(); - m[0][2] = 0.0f; - m[0][3] = 0.0f; - m[1][0] = matrix.m21(); - m[1][1] = matrix.m22(); - m[1][2] = 0.0f; - m[1][3] = 0.0f; - m[2][0] = 0.0f; - m[2][1] = 0.0f; - m[2][2] = 1.0f; - m[2][3] = 0.0f; - m[3][0] = matrix.dx(); - m[3][1] = matrix.dy(); - m[3][2] = 0.0f; - m[3][3] = 1.0f; - flagBits = Translation | Scale | Rotation2D; -} -#endif // QT_DEPRECATED_SINCE(5, 15) - /*! Constructs a 4x4 matrix from the conventional Qt 2D transformation matrix \a transform. @@ -1663,26 +1626,6 @@ void QMatrix4x4::copyDataTo(float *values) const values[row * 4 + col] = float(m[col][row]); } -#if QT_DEPRECATED_SINCE(5, 15) -/*! - \obsolete - - Use toTransform() instead. - - Returns the conventional Qt 2D affine transformation matrix that - corresponds to this matrix. It is assumed that this matrix - only contains 2D affine transformation elements. - - \sa toTransform() -*/ -QMatrix QMatrix4x4::toAffine() const -{ - return QMatrix(m[0][0], m[0][1], - m[1][0], m[1][1], - m[3][0], m[3][1]); -} -#endif // QT_DEPRECATED_SINCE(5, 15) - /*! Returns the conventional Qt 2D transformation matrix that corresponds to this matrix. diff --git a/src/gui/math3d/qmatrix4x4.h b/src/gui/math3d/qmatrix4x4.h index 5a8b2c0daf..95f4db92ec 100644 --- a/src/gui/math3d/qmatrix4x4.h +++ b/src/gui/math3d/qmatrix4x4.h @@ -52,7 +52,6 @@ QT_BEGIN_NAMESPACE #ifndef QT_NO_MATRIX4X4 -class QMatrix; class QTransform; class QVariant; @@ -72,9 +71,6 @@ public: QMatrix4x4(const float *values, int cols, int rows); QMatrix4x4(const QTransform& transform); -#if QT_DEPRECATED_SINCE(5, 15) - QMatrix4x4(const QMatrix& matrix); -#endif // QT_DEPRECATED_SINCE(5, 15) inline const float& operator()(int row, int column) const; inline float& operator()(int row, int column); @@ -158,9 +154,6 @@ public: void copyDataTo(float *values) const; -#if QT_DEPRECATED_SINCE(5, 15) - QT_DEPRECATED_X("Use toTransform()") QMatrix toAffine() const; -#endif // QT_DEPRECATED_SINCE(5, 15) QTransform toTransform() const; QTransform toTransform(float distanceToPlane) const; diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 94a88f55dc..21a40540c4 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -26,7 +26,6 @@ HEADERS += \ painting/qfixed_p.h \ painting/qgrayraster_p.h \ painting/qicc_p.h \ - painting/qmatrix.h \ painting/qmemrotate_p.h \ painting/qoutlinemapper_p.h \ painting/qpagedpaintdevice.h \ @@ -83,7 +82,6 @@ SOURCES += \ painting/qgrayraster.c \ painting/qicc.cpp \ painting/qimagescale.cpp \ - painting/qmatrix.cpp \ painting/qmemrotate.cpp \ painting/qoutlinemapper.cpp \ painting/qpagedpaintdevice.cpp \ diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp index 28cc20bfc5..c8fc447446 100644 --- a/src/gui/painting/qbrush.cpp +++ b/src/gui/painting/qbrush.cpp @@ -892,26 +892,6 @@ bool QBrush::isOpaque() const return false; } - -#if QT_DEPRECATED_SINCE(5, 15) -/*! - \since 4.2 - \obsolete - - Use setTransform() instead. - - Sets \a matrix as an explicit transformation matrix on the - current brush. The brush transformation matrix is merged with - QPainter transformation matrix to produce the final result. - - \sa matrix() -*/ -void QBrush::setMatrix(const QMatrix &matrix) -{ - setTransform(QTransform(matrix)); -} -#endif // QT_DEPRECATED_SINCE(5, 15) - /*! \since 4.3 diff --git a/src/gui/painting/qbrush.h b/src/gui/painting/qbrush.h index 9a719b3059..621387615b 100644 --- a/src/gui/painting/qbrush.h +++ b/src/gui/painting/qbrush.h @@ -46,7 +46,6 @@ #include #include #include -#include #include #include #include @@ -89,11 +88,6 @@ public: inline Qt::BrushStyle style() const; void setStyle(Qt::BrushStyle); -#if QT_DEPRECATED_SINCE(5, 15) - QT_DEPRECATED_X("Use transform()") inline QMatrix matrix() const; - QT_DEPRECATED_X("Use setTransform()") void setMatrix(const QMatrix &mat); -#endif // QT_DEPRECATED_SINCE(5, 15) - inline QTransform transform() const; void setTransform(const QTransform &); @@ -159,10 +153,6 @@ struct QBrushData inline Qt::BrushStyle QBrush::style() const { return d->style; } inline const QColor &QBrush::color() const { return d->color; } -#if QT_DEPRECATED_SINCE(5, 15) -QT_DEPRECATED_X("Use transform()") -inline QMatrix QBrush::matrix() const { return d->transform.toAffine(); } -#endif // QT_DEPRECATED_SINCE(5, 15) inline QTransform QBrush::transform() const { return d->transform; } inline bool QBrush::isDetached() const { return d->ref.loadRelaxed() == 1; } diff --git a/src/gui/painting/qcolormatrix_p.h b/src/gui/painting/qcolormatrix_p.h index edb2d32258..749aad3b2c 100644 --- a/src/gui/painting/qcolormatrix_p.h +++ b/src/gui/painting/qcolormatrix_p.h @@ -112,7 +112,7 @@ inline bool operator!=(const QColorVector &v1, const QColorVector &v2) // A matrix mapping 3 value colors. -// Not using QMatrix because only floats are needed and performance is critical. +// Not using QTransform because only floats are needed and performance is critical. class QColorMatrix { public: diff --git a/src/gui/painting/qmatrix.cpp b/src/gui/painting/qmatrix.cpp deleted file mode 100644 index 7ebd2dbd09..0000000000 --- a/src/gui/painting/qmatrix.cpp +++ /dev/null @@ -1,1191 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** 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-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qmatrix.h" - -#include "qdatastream.h" -#include "qdebug.h" -#include "qhashfunctions.h" -#include "qregion.h" -#include "qpainterpath.h" -#include "qpainterpath_p.h" -#include "qtransform.h" -#include "qvariant.h" -#include - -#include - -QT_BEGIN_NAMESPACE - -/*! - \class QMatrix - \brief The QMatrix class specifies 2D transformations of a - coordinate system. - \obsolete - - \ingroup painting - \inmodule QtGui - - A matrix specifies how to translate, scale, shear or rotate the - coordinate system, and is typically used when rendering graphics. - QMatrix, in contrast to QTransform, does not allow perspective - transformations. QTransform is the recommended transformation - class in Qt. - - A QMatrix object can be built using the setMatrix(), scale(), - rotate(), translate() and shear() functions. Alternatively, it - can be built by applying \l {QMatrix#Basic Matrix - Operations}{basic matrix operations}. The matrix can also be - defined when constructed, and it can be reset to the identity - matrix (the default) using the reset() function. - - The QMatrix class supports mapping of graphic primitives: A given - point, line, polygon, region, or painter path can be mapped to the - coordinate system defined by \e this matrix using the map() - function. In case of a rectangle, its coordinates can be - transformed using the mapRect() function. A rectangle can also be - transformed into a \e polygon (mapped to the coordinate system - defined by \e this matrix), using the mapToPolygon() function. - - QMatrix provides the isIdentity() function which returns \c true if - the matrix is the identity matrix, and the isInvertible() function - which returns \c true if the matrix is non-singular (i.e. AB = BA = - I). The inverted() function returns an inverted copy of \e this - matrix if it is invertible (otherwise it returns the identity - matrix). In addition, QMatrix provides the determinant() function - returning the matrix's determinant. - - Finally, the QMatrix class supports matrix multiplication, and - objects of the class can be streamed as well as compared. - - \tableofcontents - - \section1 Rendering Graphics - - When rendering graphics, the matrix defines the transformations - but the actual transformation is performed by the drawing routines - in QPainter. - - By default, QPainter operates on the associated device's own - coordinate system. The standard coordinate system of a - QPaintDevice has its origin located at the top-left position. The - \e x values increase to the right; \e y values increase - downward. For a complete description, see the \l {Coordinate - System}{coordinate system} documentation. - - QPainter has functions to translate, scale, shear and rotate the - coordinate system without using a QMatrix. For example: - - \table 100% - \row - \li \inlineimage qmatrix-simpletransformation.png - \li - \snippet matrix/matrix.cpp 0 - \endtable - - Although these functions are very convenient, it can be more - efficient to build a QMatrix and call QPainter::setMatrix() if you - want to perform more than a single transform operation. For - example: - - \table 100% - \row - \li \inlineimage qmatrix-combinedtransformation.png - \li - \snippet matrix/matrix.cpp 1 - \endtable - - \section1 Basic Matrix Operations - - \image qmatrix-representation.png - - A QMatrix object contains a 3 x 3 matrix. The \c dx and \c dy - elements specify horizontal and vertical translation. The \c m11 - and \c m22 elements specify horizontal and vertical scaling. And - finally, the \c m21 and \c m12 elements specify horizontal and - vertical \e shearing. - - QMatrix transforms a point in the plane to another point using the - following formulas: - - \snippet code/src_gui_painting_qmatrix.cpp 0 - - The point \e (x, y) is the original point, and \e (x', y') is the - transformed point. \e (x', y') can be transformed back to \e (x, - y) by performing the same operation on the inverted() matrix. - - The various matrix elements can be set when constructing the - matrix, or by using the setMatrix() function later on. They can also - be manipulated using the translate(), rotate(), scale() and - shear() convenience functions, The currently set values can be - retrieved using the m11(), m12(), m21(), m22(), dx() and dy() - functions. - - Translation is the simplest transformation. Setting \c dx and \c - dy will move the coordinate system \c dx units along the X axis - and \c dy units along the Y axis. Scaling can be done by setting - \c m11 and \c m22. For example, setting \c m11 to 2 and \c m22 to - 1.5 will double the height and increase the width by 50%. The - identity matrix has \c m11 and \c m22 set to 1 (all others are set - to 0) mapping a point to itself. Shearing is controlled by \c m12 - and \c m21. Setting these elements to values different from zero - will twist the coordinate system. Rotation is achieved by - carefully setting both the shearing factors and the scaling - factors. - - Here's the combined transformations example using basic matrix - operations: - - \table 100% - \row - \li \inlineimage qmatrix-combinedtransformation.png - \li - \snippet matrix/matrix.cpp 2 - \endtable - - \sa QPainter, QTransform, {Coordinate System}, - {painting/affine}{Affine Transformations Example}, {Transformations Example} -*/ - - -// some defines to inline some code -#define MAPDOUBLE(x, y, nx, ny) \ -{ \ - qreal fx = x; \ - qreal fy = y; \ - nx = _m11*fx + _m21*fy + _dx; \ - ny = _m12*fx + _m22*fy + _dy; \ -} - -#define MAPINT(x, y, nx, ny) \ -{ \ - qreal fx = x; \ - qreal fy = y; \ - nx = qRound(_m11*fx + _m21*fy + _dx); \ - ny = qRound(_m12*fx + _m22*fy + _dy); \ -} - -/***************************************************************************** - QMatrix member functions - *****************************************************************************/ -/*! - \fn QMatrix::QMatrix(Qt::Initialization) - \internal -*/ - -/*! - Constructs an identity matrix. - - All elements are set to zero except \c m11 and \c m22 (specifying - the scale), which are set to 1. - - \sa reset() -*/ - -QMatrix::QMatrix() - : _m11(1.) - , _m12(0.) - , _m21(0.) - , _m22(1.) - , _dx(0.) - , _dy(0.) -{ -} - -/*! - Constructs a matrix with the elements, \a m11, \a m12, \a m21, \a - m22, \a dx and \a dy. - - \sa setMatrix() -*/ - -QMatrix::QMatrix(qreal m11, qreal m12, qreal m21, qreal m22, qreal dx, qreal dy) - : _m11(m11) - , _m12(m12) - , _m21(m21) - , _m22(m22) - , _dx(dx) - , _dy(dy) -{ -} - -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -/*! - Constructs a matrix that is a copy of the given \a matrix. - */ -QMatrix::QMatrix(const QMatrix &matrix) noexcept - : _m11(matrix._m11) - , _m12(matrix._m12) - , _m21(matrix._m21) - , _m22(matrix._m22) - , _dx(matrix._dx) - , _dy(matrix._dy) -{ -} -#endif - -/*! - Sets the matrix elements to the specified values, \a m11, \a m12, - \a m21, \a m22, \a dx and \a dy. - - Note that this function replaces the previous values. QMatrix - provide the translate(), rotate(), scale() and shear() convenience - functions to manipulate the various matrix elements based on the - currently defined coordinate system. - - \sa QMatrix() -*/ - -void QMatrix::setMatrix(qreal m11, qreal m12, qreal m21, qreal m22, qreal dx, qreal dy) -{ - _m11 = m11; - _m12 = m12; - _m21 = m21; - _m22 = m22; - _dx = dx; - _dy = dy; -} - - -/*! - \fn qreal QMatrix::m11() const - - Returns the horizontal scaling factor. - - \sa scale(), {QMatrix#Basic Matrix Operations}{Basic Matrix - Operations} -*/ - -/*! - \fn qreal QMatrix::m12() const - - Returns the vertical shearing factor. - - \sa shear(), {QMatrix#Basic Matrix Operations}{Basic Matrix - Operations} -*/ - -/*! - \fn qreal QMatrix::m21() const - - Returns the horizontal shearing factor. - - \sa shear(), {QMatrix#Basic Matrix Operations}{Basic Matrix - Operations} -*/ - -/*! - \fn qreal QMatrix::m22() const - - Returns the vertical scaling factor. - - \sa scale(), {QMatrix#Basic Matrix Operations}{Basic Matrix - Operations} -*/ - -/*! - \fn qreal QMatrix::dx() const - - Returns the horizontal translation factor. - - \sa translate(), {QMatrix#Basic Matrix Operations}{Basic Matrix - Operations} -*/ - -/*! - \fn qreal QMatrix::dy() const - - Returns the vertical translation factor. - - \sa translate(), {QMatrix#Basic Matrix Operations}{Basic Matrix - Operations} -*/ - - -/*! - Maps the given coordinates \a x and \a y into the coordinate - system defined by this matrix. The resulting values are put in *\a - tx and *\a ty, respectively. - - The coordinates are transformed using the following formulas: - - \snippet code/src_gui_painting_qmatrix.cpp 1 - - The point (x, y) is the original point, and (x', y') is the - transformed point. - - \sa {QMatrix#Basic Matrix Operations}{Basic Matrix Operations} -*/ - -void QMatrix::map(qreal x, qreal y, qreal *tx, qreal *ty) const -{ - MAPDOUBLE(x, y, *tx, *ty); -} - - - -/*! - \overload - - Maps the given coordinates \a x and \a y into the coordinate - system defined by this matrix. The resulting values are put in *\a - tx and *\a ty, respectively. Note that the transformed coordinates - are rounded to the nearest integer. -*/ - -void QMatrix::map(int x, int y, int *tx, int *ty) const -{ - MAPINT(x, y, *tx, *ty); -} - -QRect QMatrix::mapRect(const QRect &rect) const -{ - QRect result; - if (_m12 == 0.0F && _m21 == 0.0F) { - int x = qRound(_m11*rect.x() + _dx); - int y = qRound(_m22*rect.y() + _dy); - int w = qRound(_m11*rect.width()); - int h = qRound(_m22*rect.height()); - if (w < 0) { - w = -w; - x -= w; - } - if (h < 0) { - h = -h; - y -= h; - } - result = QRect(x, y, w, h); - } else { - // see mapToPolygon for explanations of the algorithm. - qreal x0, y0; - qreal x, y; - MAPDOUBLE(rect.left(), rect.top(), x0, y0); - qreal xmin = x0; - qreal ymin = y0; - qreal xmax = x0; - qreal ymax = y0; - MAPDOUBLE(rect.right() + 1, rect.top(), x, y); - xmin = qMin(xmin, x); - ymin = qMin(ymin, y); - xmax = qMax(xmax, x); - ymax = qMax(ymax, y); - MAPDOUBLE(rect.right() + 1, rect.bottom() + 1, x, y); - xmin = qMin(xmin, x); - ymin = qMin(ymin, y); - xmax = qMax(xmax, x); - ymax = qMax(ymax, y); - MAPDOUBLE(rect.left(), rect.bottom() + 1, x, y); - xmin = qMin(xmin, x); - ymin = qMin(ymin, y); - xmax = qMax(xmax, x); - ymax = qMax(ymax, y); - result = QRect(qRound(xmin), qRound(ymin), qRound(xmax)-qRound(xmin), qRound(ymax)-qRound(ymin)); - } - return result; -} - -/*! - \fn QRectF QMatrix::mapRect(const QRectF &rectangle) const - - Creates and returns a QRectF object that is a copy of the given \a - rectangle, mapped into the coordinate system defined by this - matrix. - - The rectangle's coordinates are transformed using the following - formulas: - - \snippet code/src_gui_painting_qmatrix.cpp 2 - - If rotation or shearing has been specified, this function returns - the \e bounding rectangle. To retrieve the exact region the given - \a rectangle maps to, use the mapToPolygon() function instead. - - \sa mapToPolygon(), {QMatrix#Basic Matrix Operations}{Basic Matrix - Operations} -*/ -QRectF QMatrix::mapRect(const QRectF &rect) const -{ - QRectF result; - if (_m12 == 0.0F && _m21 == 0.0F) { - qreal x = _m11*rect.x() + _dx; - qreal y = _m22*rect.y() + _dy; - qreal w = _m11*rect.width(); - qreal h = _m22*rect.height(); - if (w < 0) { - w = -w; - x -= w; - } - if (h < 0) { - h = -h; - y -= h; - } - result = QRectF(x, y, w, h); - } else { - qreal x0, y0; - qreal x, y; - MAPDOUBLE(rect.x(), rect.y(), x0, y0); - qreal xmin = x0; - qreal ymin = y0; - qreal xmax = x0; - qreal ymax = y0; - MAPDOUBLE(rect.x() + rect.width(), rect.y(), x, y); - xmin = qMin(xmin, x); - ymin = qMin(ymin, y); - xmax = qMax(xmax, x); - ymax = qMax(ymax, y); - MAPDOUBLE(rect.x() + rect.width(), rect.y() + rect.height(), x, y); - xmin = qMin(xmin, x); - ymin = qMin(ymin, y); - xmax = qMax(xmax, x); - ymax = qMax(ymax, y); - MAPDOUBLE(rect.x(), rect.y() + rect.height(), x, y); - xmin = qMin(xmin, x); - ymin = qMin(ymin, y); - xmax = qMax(xmax, x); - ymax = qMax(ymax, y); - result = QRectF(xmin, ymin, xmax-xmin, ymax - ymin); - } - return result; -} - -/*! - \fn QRect QMatrix::mapRect(const QRect &rectangle) const - \overload - - Creates and returns a QRect object that is a copy of the given \a - rectangle, mapped into the coordinate system defined by this - matrix. Note that the transformed coordinates are rounded to the - nearest integer. -*/ - - -/*! - \fn QPoint operator*(const QPoint &point, const QMatrix &matrix) - \relates QMatrix - - This is the same as \a{matrix}.map(\a{point}). - - \sa QMatrix::map() -*/ - -QPoint QMatrix::map(const QPoint &p) const -{ - qreal fx = p.x(); - qreal fy = p.y(); - return QPoint(qRound(_m11*fx + _m21*fy + _dx), - qRound(_m12*fx + _m22*fy + _dy)); -} - -/*! - \fn QPointF operator*(const QPointF &point, const QMatrix &matrix) - \relates QMatrix - - Same as \a{matrix}.map(\a{point}). - - \sa QMatrix::map() -*/ - -/*! - \overload - - Creates and returns a QPointF object that is a copy of the given - \a point, mapped into the coordinate system defined by this - matrix. -*/ -QPointF QMatrix::map(const QPointF &point) const -{ - qreal fx = point.x(); - qreal fy = point.y(); - return QPointF(_m11*fx + _m21*fy + _dx, _m12*fx + _m22*fy + _dy); -} - -/*! - \fn QPoint QMatrix::map(const QPoint &point) const - \overload - - Creates and returns a QPoint object that is a copy of the given \a - point, mapped into the coordinate system defined by this - matrix. Note that the transformed coordinates are rounded to the - nearest integer. -*/ - -/*! - \fn QLineF operator*(const QLineF &line, const QMatrix &matrix) - \relates QMatrix - - This is the same as \a{matrix}.map(\a{line}). - - \sa QMatrix::map() -*/ - -/*! - \fn QLine operator*(const QLine &line, const QMatrix &matrix) - \relates QMatrix - - This is the same as \a{matrix}.map(\a{line}). - - \sa QMatrix::map() -*/ - -/*! - \overload - - Creates and returns a QLineF object that is a copy of the given \a - line, mapped into the coordinate system defined by this matrix. -*/ -QLineF QMatrix::map(const QLineF &line) const -{ - return QLineF(map(line.p1()), map(line.p2())); -} - -/*! - \overload - - Creates and returns a QLine object that is a copy of the given \a - line, mapped into the coordinate system defined by this matrix. - Note that the transformed coordinates are rounded to the nearest - integer. -*/ -QLine QMatrix::map(const QLine &line) const -{ - return QLine(map(line.p1()), map(line.p2())); -} - -/*! - \fn QPolygonF operator *(const QPolygonF &polygon, const QMatrix &matrix) - \relates QMatrix - - This is the same as \a{matrix}.map(\a{polygon}). - - \sa QMatrix::map() -*/ - -/*! - \fn QPolygon operator*(const QPolygon &polygon, const QMatrix &matrix) - \relates QMatrix - - This is the same as \a{matrix}.map(\a{polygon}). - - \sa QMatrix::map() -*/ - -QPolygon QMatrix::map(const QPolygon &a) const -{ - int size = a.size(); - int i; - QPolygon p(size); - const QPoint *da = a.constData(); - QPoint *dp = p.data(); - for(i = 0; i < size; i++) { - MAPINT(da[i].x(), da[i].y(), dp[i].rx(), dp[i].ry()); - } - return p; -} - -/*! - \fn QPolygonF QMatrix::map(const QPolygonF &polygon) const - \overload - - Creates and returns a QPolygonF object that is a copy of the given - \a polygon, mapped into the coordinate system defined by this - matrix. -*/ -QPolygonF QMatrix::map(const QPolygonF &a) const -{ - int size = a.size(); - int i; - QPolygonF p(size); - const QPointF *da = a.constData(); - QPointF *dp = p.data(); - for(i = 0; i < size; i++) { - MAPDOUBLE(da[i].xp, da[i].yp, dp[i].xp, dp[i].yp); - } - return p; -} - -/*! - \fn QPolygon QMatrix::map(const QPolygon &polygon) const - \overload - - Creates and returns a QPolygon object that is a copy of the given - \a polygon, mapped into the coordinate system defined by this - matrix. Note that the transformed coordinates are rounded to the - nearest integer. -*/ - -/*! - \fn QRegion operator*(const QRegion ®ion, const QMatrix &matrix) - \relates QMatrix - - This is the same as \a{matrix}.map(\a{region}). - - \sa QMatrix::map() -*/ - -extern QPainterPath qt_regionToPath(const QRegion ®ion); - -/*! - \fn QRegion QMatrix::map(const QRegion ®ion) const - \overload - - Creates and returns a QRegion object that is a copy of the given - \a region, mapped into the coordinate system defined by this matrix. - - Calling this method can be rather expensive if rotations or - shearing are used. -*/ -QRegion QMatrix::map(const QRegion &r) const -{ - if (_m11 == 1.0 && _m22 == 1.0 && _m12 == 0.0 && _m21 == 0.0) { // translate or identity - if (_dx == 0.0 && _dy == 0.0) // Identity - return r; - QRegion copy(r); - copy.translate(qRound(_dx), qRound(_dy)); - return copy; - } - - QPainterPath p = map(qt_regionToPath(r)); - return p.toFillPolygon(QTransform()).toPolygon(); -} - -/*! - \fn QPainterPath operator *(const QPainterPath &path, const QMatrix &matrix) - \relates QMatrix - - This is the same as \a{matrix}.map(\a{path}). - - \sa QMatrix::map() -*/ - -/*! - \overload - - Creates and returns a QPainterPath object that is a copy of the - given \a path, mapped into the coordinate system defined by this - matrix. -*/ -QPainterPath QMatrix::map(const QPainterPath &path) const -{ - if (path.isEmpty()) - return QPainterPath(); - - QPainterPath copy = path; - - // Translate or identity - if (_m11 == 1.0 && _m22 == 1.0 && _m12 == 0.0 && _m21 == 0.0) { - - // Translate - if (_dx != 0.0 || _dy != 0.0) { - copy.detach(); - for (int i=0; ielements[i]; - e.x += _dx; - e.y += _dy; - } - } - - // Full xform - } else { - copy.detach(); - for (int i=0; ielements[i]; - qreal fx = e.x, fy = e.y; - e.x = _m11*fx + _m21*fy + _dx; - e.y = _m12*fx + _m22*fy + _dy; - } - } - - return copy; -} - -/*! - \fn QPolygon QMatrix::mapToPolygon(const QRect &rectangle) const - - Creates and returns a QPolygon representation of the given \a - rectangle, mapped into the coordinate system defined by this - matrix. - - The rectangle's coordinates are transformed using the following - formulas: - - \snippet code/src_gui_painting_qmatrix.cpp 3 - - Polygons and rectangles behave slightly differently when - transformed (due to integer rounding), so - \c{matrix.map(QPolygon(rectangle))} is not always the same as - \c{matrix.mapToPolygon(rectangle)}. - - \sa mapRect(), {QMatrix#Basic Matrix Operations}{Basic Matrix - Operations} -*/ -QPolygon QMatrix::mapToPolygon(const QRect &rect) const -{ - QPolygon a(4); - qreal x[4], y[4]; - if (_m12 == 0.0F && _m21 == 0.0F) { - x[0] = _m11*rect.x() + _dx; - y[0] = _m22*rect.y() + _dy; - qreal w = _m11*rect.width(); - qreal h = _m22*rect.height(); - if (w < 0) { - w = -w; - x[0] -= w; - } - if (h < 0) { - h = -h; - y[0] -= h; - } - x[1] = x[0]+w; - x[2] = x[1]; - x[3] = x[0]; - y[1] = y[0]; - y[2] = y[0]+h; - y[3] = y[2]; - } else { - qreal right = rect.x() + rect.width(); - qreal bottom = rect.y() + rect.height(); - MAPDOUBLE(rect.x(), rect.y(), x[0], y[0]); - MAPDOUBLE(right, rect.y(), x[1], y[1]); - MAPDOUBLE(right, bottom, x[2], y[2]); - MAPDOUBLE(rect.x(), bottom, x[3], y[3]); - } -#if 0 - int i; - for(i = 0; i< 4; i++) - qDebug("coords(%d) = (%f/%f) (%d/%d)", i, x[i], y[i], qRound(x[i]), qRound(y[i])); - qDebug("width=%f, height=%f", qSqrt((x[1]-x[0])*(x[1]-x[0]) + (y[1]-y[0])*(y[1]-y[0])), - qSqrt((x[0]-x[3])*(x[0]-x[3]) + (y[0]-y[3])*(y[0]-y[3]))); -#endif - // all coordinates are correctly, tranform to a pointarray - // (rounding to the next integer) - a.setPoints(4, qRound(x[0]), qRound(y[0]), - qRound(x[1]), qRound(y[1]), - qRound(x[2]), qRound(y[2]), - qRound(x[3]), qRound(y[3])); - return a; -} - -/*! - Resets the matrix to an identity matrix, i.e. all elements are set - to zero, except \c m11 and \c m22 (specifying the scale) which are - set to 1. - - \sa QMatrix(), isIdentity(), {QMatrix#Basic Matrix - Operations}{Basic Matrix Operations} -*/ - -void QMatrix::reset() -{ - _m11 = _m22 = 1.0; - _m12 = _m21 = _dx = _dy = 0.0; -} - -/*! - \fn bool QMatrix::isIdentity() const - - Returns \c true if the matrix is the identity matrix, otherwise - returns \c false. - - \sa reset() -*/ - -/*! - Moves the coordinate system \a dx along the x axis and \a dy along - the y axis, and returns a reference to the matrix. - - \sa setMatrix() -*/ - -QMatrix &QMatrix::translate(qreal dx, qreal dy) -{ - _dx += dx*_m11 + dy*_m21; - _dy += dy*_m22 + dx*_m12; - return *this; -} - -/*! - \fn QMatrix &QMatrix::scale(qreal sx, qreal sy) - - Scales the coordinate system by \a sx horizontally and \a sy - vertically, and returns a reference to the matrix. - - \sa setMatrix() -*/ - -QMatrix &QMatrix::scale(qreal sx, qreal sy) -{ - _m11 *= sx; - _m12 *= sx; - _m21 *= sy; - _m22 *= sy; - return *this; -} - -/*! - Shears the coordinate system by \a sh horizontally and \a sv - vertically, and returns a reference to the matrix. - - \sa setMatrix() -*/ - -QMatrix &QMatrix::shear(qreal sh, qreal sv) -{ - qreal tm11 = sv*_m21; - qreal tm12 = sv*_m22; - qreal tm21 = sh*_m11; - qreal tm22 = sh*_m12; - _m11 += tm11; - _m12 += tm12; - _m21 += tm21; - _m22 += tm22; - return *this; -} - -const qreal deg2rad = qreal(0.017453292519943295769); // pi/180 - -/*! - \fn QMatrix &QMatrix::rotate(qreal degrees) - - Rotates the coordinate system the given \a degrees - counterclockwise. - - Note that if you apply a QMatrix to a point defined in widget - coordinates, the direction of the rotation will be clockwise - because the y-axis points downwards. - - Returns a reference to the matrix. - - \sa setMatrix() -*/ - -QMatrix &QMatrix::rotate(qreal a) -{ - qreal sina = 0; - qreal cosa = 0; - if (a == 90. || a == -270.) - sina = 1.; - else if (a == 270. || a == -90.) - sina = -1.; - else if (a == 180.) - cosa = -1.; - else{ - qreal b = deg2rad*a; // convert to radians - sina = qSin(b); // fast and convenient - cosa = qCos(b); - } - qreal tm11 = cosa*_m11 + sina*_m21; - qreal tm12 = cosa*_m12 + sina*_m22; - qreal tm21 = -sina*_m11 + cosa*_m21; - qreal tm22 = -sina*_m12 + cosa*_m22; - _m11 = tm11; _m12 = tm12; - _m21 = tm21; _m22 = tm22; - return *this; -} - -/*! - \fn bool QMatrix::isInvertible() const - - Returns \c true if the matrix is invertible, otherwise returns \c false. - - \sa inverted() -*/ - -/*! - \since 4.6 - \fn qreal QMatrix::determinant() const - - Returns the matrix's determinant. -*/ - -/*! - Returns an inverted copy of this matrix. - - If the matrix is singular (not invertible), the returned matrix is - the identity matrix. If \a invertible is valid (i.e. not 0), its - value is set to true if the matrix is invertible, otherwise it is - set to false. - - \sa isInvertible() -*/ - -QMatrix QMatrix::inverted(bool *invertible) const -{ - qreal dtr = determinant(); - if (dtr == 0.0) { - if (invertible) - *invertible = false; // singular matrix - return QMatrix(true); - } - else { // invertible matrix - if (invertible) - *invertible = true; - qreal dinv = 1.0/dtr; - return QMatrix((_m22*dinv), (-_m12*dinv), - (-_m21*dinv), (_m11*dinv), - ((_m21*_dy - _m22*_dx)*dinv), - ((_m12*_dx - _m11*_dy)*dinv), - true); - } -} - - -/*! - \fn bool QMatrix::operator==(const QMatrix &matrix) const - - Returns \c true if this matrix is equal to the given \a matrix, - otherwise returns \c false. -*/ - -bool QMatrix::operator==(const QMatrix &m) const -{ - return _m11 == m._m11 && - _m12 == m._m12 && - _m21 == m._m21 && - _m22 == m._m22 && - _dx == m._dx && - _dy == m._dy; -} - - -/*! - \since 5.6 - \relates QMatrix - - Returns the hash value for \a key, using - \a seed to seed the calculation. -*/ -uint qHash(const QMatrix &key, uint seed) noexcept -{ - QtPrivate::QHashCombine hash; - seed = hash(seed, key.m11()); - seed = hash(seed, key.m12()); - seed = hash(seed, key.m21()); - seed = hash(seed, key.m22()); - seed = hash(seed, key.dx()); - seed = hash(seed, key.dy()); - return seed; -} - -/*! - \fn bool QMatrix::operator!=(const QMatrix &matrix) const - - Returns \c true if this matrix is not equal to the given \a matrix, - otherwise returns \c false. -*/ - -bool QMatrix::operator!=(const QMatrix &m) const -{ - return _m11 != m._m11 || - _m12 != m._m12 || - _m21 != m._m21 || - _m22 != m._m22 || - _dx != m._dx || - _dy != m._dy; -} - -/*! - \fn QMatrix &QMatrix::operator *=(const QMatrix &matrix) - \overload - - Returns the result of multiplying this matrix by the given \a - matrix. -*/ - -QMatrix &QMatrix::operator *=(const QMatrix &m) -{ - qreal tm11 = _m11*m._m11 + _m12*m._m21; - qreal tm12 = _m11*m._m12 + _m12*m._m22; - qreal tm21 = _m21*m._m11 + _m22*m._m21; - qreal tm22 = _m21*m._m12 + _m22*m._m22; - - qreal tdx = _dx*m._m11 + _dy*m._m21 + m._dx; - qreal tdy = _dx*m._m12 + _dy*m._m22 + m._dy; - - _m11 = tm11; _m12 = tm12; - _m21 = tm21; _m22 = tm22; - _dx = tdx; _dy = tdy; - return *this; -} - -/*! - \fn QMatrix QMatrix::operator *(const QMatrix &matrix) const - - Returns the result of multiplying this matrix by the given \a - matrix. - - Note that matrix multiplication is not commutative, i.e. a*b != - b*a. -*/ - -QMatrix QMatrix::operator *(const QMatrix &m) const -{ - qreal tm11 = _m11*m._m11 + _m12*m._m21; - qreal tm12 = _m11*m._m12 + _m12*m._m22; - qreal tm21 = _m21*m._m11 + _m22*m._m21; - qreal tm22 = _m21*m._m12 + _m22*m._m22; - - qreal tdx = _dx*m._m11 + _dy*m._m21 + m._dx; - qreal tdy = _dx*m._m12 + _dy*m._m22 + m._dy; - return QMatrix(tm11, tm12, tm21, tm22, tdx, tdy, true); -} - -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -/*! - Assigns the given \a matrix's values to this matrix. -*/ -QMatrix &QMatrix::operator=(const QMatrix &matrix) noexcept -{ - _m11 = matrix._m11; - _m12 = matrix._m12; - _m21 = matrix._m21; - _m22 = matrix._m22; - _dx = matrix._dx; - _dy = matrix._dy; - return *this; -} -#endif - -/*! - \since 4.2 - - Returns the matrix as a QVariant. -*/ -QMatrix::operator QVariant() const -{ - return QVariant(QMetaType::QMatrix, this); -} - -Q_GUI_EXPORT QPainterPath operator *(const QPainterPath &p, const QMatrix &m) -{ - return m.map(p); -} - - -/***************************************************************************** - QMatrix stream functions - *****************************************************************************/ -#ifndef QT_NO_DATASTREAM -/*! - \fn QDataStream &operator<<(QDataStream &stream, const QMatrix &matrix) - \relates QMatrix - - Writes the given \a matrix to the given \a stream and returns a - reference to the stream. - - \sa {Serializing Qt Data Types} -*/ - -QDataStream &operator<<(QDataStream &s, const QMatrix &m) -{ - if (s.version() == 1) { - s << (float)m.m11() << (float)m.m12() << (float)m.m21() - << (float)m.m22() << (float)m.dx() << (float)m.dy(); - } else { - s << double(m.m11()) - << double(m.m12()) - << double(m.m21()) - << double(m.m22()) - << double(m.dx()) - << double(m.dy()); - } - return s; -} - -/*! - \fn QDataStream &operator>>(QDataStream &stream, QMatrix &matrix) - \relates QMatrix - - Reads the given \a matrix from the given \a stream and returns a - reference to the stream. - - \sa {Serializing Qt Data Types} -*/ - -QDataStream &operator>>(QDataStream &s, QMatrix &m) -{ - if (s.version() == 1) { - float m11, m12, m21, m22, dx, dy; - s >> m11; s >> m12; s >> m21; s >> m22; - s >> dx; s >> dy; - m.setMatrix(m11, m12, m21, m22, dx, dy); - } - else { - double m11, m12, m21, m22, dx, dy; - s >> m11; - s >> m12; - s >> m21; - s >> m22; - s >> dx; - s >> dy; - m.setMatrix(m11, m12, m21, m22, dx, dy); - } - return s; -} -#endif // QT_NO_DATASTREAM - -#ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug dbg, const QMatrix &m) -{ - QDebugStateSaver saver(dbg); - dbg.nospace() << "QMatrix(" - << "11=" << m.m11() - << " 12=" << m.m12() - << " 21=" << m.m21() - << " 22=" << m.m22() - << " dx=" << m.dx() - << " dy=" << m.dy() - << ')'; - return dbg; -} -#endif - -/*! - \fn bool qFuzzyCompare(const QMatrix& m1, const QMatrix& m2) - - \relates QMatrix - \since 4.6 - - \brief The qFuzzyCompare function is for comparing two matrices - using a fuzziness factor. - - Returns \c true if \a m1 and \a m2 are equal, allowing for a small - fuzziness factor for floating-point comparisons; false otherwise. -*/ - -QT_END_NAMESPACE diff --git a/src/gui/painting/qmatrix.h b/src/gui/painting/qmatrix.h deleted file mode 100644 index a167260ade..0000000000 --- a/src/gui/painting/qmatrix.h +++ /dev/null @@ -1,194 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** 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-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QMATRIX_H -#define QMATRIX_H - -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - - -class QPainterPath; -class QVariant; - -class Q_GUI_EXPORT QMatrix // 2D transform matrix -{ -public: - inline explicit QMatrix(Qt::Initialization) {} - QMatrix(); - QMatrix(qreal m11, qreal m12, qreal m21, qreal m22, - qreal dx, qreal dy); - -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - // ### Qt 6: remove; the compiler-generated ones are fine! - QMatrix &operator=(QMatrix &&other) noexcept // = default - { memcpy(static_cast(this), static_cast(&other), sizeof(QMatrix)); return *this; } - QMatrix &operator=(const QMatrix &) noexcept; // = default - QMatrix(QMatrix &&other) noexcept // = default - { memcpy(static_cast(this), static_cast(&other), sizeof(QMatrix)); } - QMatrix(const QMatrix &other) noexcept; // = default -#endif - - void setMatrix(qreal m11, qreal m12, qreal m21, qreal m22, - qreal dx, qreal dy); - - qreal m11() const { return _m11; } - qreal m12() const { return _m12; } - qreal m21() const { return _m21; } - qreal m22() const { return _m22; } - qreal dx() const { return _dx; } - qreal dy() const { return _dy; } - - void map(int x, int y, int *tx, int *ty) const; - void map(qreal x, qreal y, qreal *tx, qreal *ty) const; - QRect mapRect(const QRect &) const; - QRectF mapRect(const QRectF &) const; - - QPoint map(const QPoint &p) const; - QPointF map(const QPointF&p) const; - QLine map(const QLine &l) const; - QLineF map(const QLineF &l) const; - QPolygonF map(const QPolygonF &a) const; - QPolygon map(const QPolygon &a) const; - QRegion map(const QRegion &r) const; - QPainterPath map(const QPainterPath &p) const; - QPolygon mapToPolygon(const QRect &r) const; - - void reset(); - inline bool isIdentity() const; - - QMatrix &translate(qreal dx, qreal dy); - QMatrix &scale(qreal sx, qreal sy); - QMatrix &shear(qreal sh, qreal sv); - QMatrix &rotate(qreal a); - - bool isInvertible() const { return !qFuzzyIsNull(_m11*_m22 - _m12*_m21); } - qreal determinant() const { return _m11*_m22 - _m12*_m21; } - - Q_REQUIRED_RESULT QMatrix inverted(bool *invertible = nullptr) const; - - bool operator==(const QMatrix &) const; - bool operator!=(const QMatrix &) const; - - QMatrix &operator*=(const QMatrix &); - QMatrix operator*(const QMatrix &o) const; - - operator QVariant() const; - -private: - inline QMatrix(bool) - : _m11(1.) - , _m12(0.) - , _m21(0.) - , _m22(1.) - , _dx(0.) - , _dy(0.) {} - inline QMatrix(qreal am11, qreal am12, qreal am21, qreal am22, qreal adx, qreal ady, bool) - : _m11(am11) - , _m12(am12) - , _m21(am21) - , _m22(am22) - , _dx(adx) - , _dy(ady) {} - friend class QTransform; - qreal _m11, _m12; - qreal _m21, _m22; - qreal _dx, _dy; -}; -Q_DECLARE_TYPEINFO(QMatrix, Q_MOVABLE_TYPE); - -Q_GUI_EXPORT Q_DECL_CONST_FUNCTION uint qHash(const QMatrix &key, uint seed = 0) noexcept; - -// mathematical semantics -inline QPoint operator*(const QPoint &p, const QMatrix &m) -{ return m.map(p); } -inline QPointF operator*(const QPointF &p, const QMatrix &m) -{ return m.map(p); } -inline QLineF operator*(const QLineF &l, const QMatrix &m) -{ return m.map(l); } -inline QLine operator*(const QLine &l, const QMatrix &m) -{ return m.map(l); } -inline QPolygon operator *(const QPolygon &a, const QMatrix &m) -{ return m.map(a); } -inline QPolygonF operator *(const QPolygonF &a, const QMatrix &m) -{ return m.map(a); } -inline QRegion operator *(const QRegion &r, const QMatrix &m) -{ return m.map(r); } -Q_GUI_EXPORT QPainterPath operator *(const QPainterPath &p, const QMatrix &m); - -inline bool QMatrix::isIdentity() const -{ - return qFuzzyIsNull(_m11 - 1) && qFuzzyIsNull(_m22 - 1) && qFuzzyIsNull(_m12) - && qFuzzyIsNull(_m21) && qFuzzyIsNull(_dx) && qFuzzyIsNull(_dy); -} - -inline bool qFuzzyCompare(const QMatrix& m1, const QMatrix& m2) -{ - return qFuzzyCompare(m1.m11(), m2.m11()) - && qFuzzyCompare(m1.m12(), m2.m12()) - && qFuzzyCompare(m1.m21(), m2.m21()) - && qFuzzyCompare(m1.m22(), m2.m22()) - && qFuzzyCompare(m1.dx(), m2.dx()) - && qFuzzyCompare(m1.dy(), m2.dy()); -} - - -/***************************************************************************** - QMatrix stream functions - *****************************************************************************/ - -#ifndef QT_NO_DATASTREAM -Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QMatrix &); -Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QMatrix &); -#endif - -#ifndef QT_NO_DEBUG_STREAM -Q_GUI_EXPORT QDebug operator<<(QDebug, const QMatrix &); -#endif - -QT_END_NAMESPACE - -#endif // QMATRIX_H diff --git a/src/gui/painting/qpaintengine.cpp b/src/gui/painting/qpaintengine.cpp index 315bf0daf2..1785fcd12d 100644 --- a/src/gui/painting/qpaintengine.cpp +++ b/src/gui/painting/qpaintengine.cpp @@ -508,7 +508,7 @@ void QPaintEngine::drawEllipse(const QRectF &rect) if (hasFeature(PainterPaths)) { drawPath(path); } else { - QPolygonF polygon = path.toFillPolygon(QTransform()); + QPolygonF polygon = path.toFillPolygon(); drawPolygon(polygon.data(), polygon.size(), ConvexMode); } } diff --git a/src/gui/painting/qpaintengine.h b/src/gui/painting/qpaintengine.h index e90020dbbf..73727e463d 100644 --- a/src/gui/painting/qpaintengine.h +++ b/src/gui/painting/qpaintengine.h @@ -273,9 +273,6 @@ public: QBrush backgroundBrush() const; Qt::BGMode backgroundMode() const; QFont font() const; -#if QT_DEPRECATED_SINCE(5, 15) - QT_DEPRECATED_X("Use transform()") QMatrix matrix() const; -#endif // QT_DEPRECATED_SINCE(5, 15) QTransform transform() const; Qt::ClipOperation clipOperation() const; diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 6867b34b46..49f4d7be2e 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -2560,19 +2560,19 @@ QRegion QPainter::clipRegion() const case QPainterClipInfo::PathClip: { QTransform matrix = (info.matrix * d->invMatrix); if (lastWasNothing) { - region = QRegion((info.path * matrix).toFillPolygon(QTransform()).toPolygon(), + region = QRegion((info.path * matrix).toFillPolygon().toPolygon(), info.path.fillRule()); lastWasNothing = false; continue; } if (info.operation == Qt::IntersectClip) { - region &= QRegion((info.path * matrix).toFillPolygon(QTransform()).toPolygon(), + region &= QRegion((info.path * matrix).toFillPolygon().toPolygon(), info.path.fillRule()); } else if (info.operation == Qt::NoClip) { lastWasNothing = true; region = QRegion(); } else { - region = QRegion((info.path * matrix).toFillPolygon(QTransform()).toPolygon(), + region = QRegion((info.path * matrix).toFillPolygon().toPolygon(), info.path.fillRule()); } break; @@ -2896,175 +2896,6 @@ void QPainter::setClipRegion(const QRegion &r, Qt::ClipOperation op) d->updateState(d->state); } -#if QT_DEPRECATED_SINCE(5, 13) -/*! - \since 4.2 - \obsolete - - Sets the transformation matrix to \a matrix and enables transformations. - - \note It is advisable to use setWorldTransform() instead of this function to - preserve the properties of perspective transformations. - - If \a combine is true, then \a matrix is combined with the current - transformation matrix; otherwise \a matrix replaces the current - transformation matrix. - - If \a matrix is the identity matrix and \a combine is false, this - function calls setWorldMatrixEnabled(false). (The identity matrix is the - matrix where QMatrix::m11() and QMatrix::m22() are 1.0 and the - rest are 0.0.) - - The following functions can transform the coordinate system without using - a QMatrix: - \list - \li translate() - \li scale() - \li shear() - \li rotate() - \endlist - - They operate on the painter's worldMatrix() and are implemented like this: - - \snippet code/src_gui_painting_qpainter.cpp 4 - - Note that when using setWorldMatrix() function you should always have - \a combine be true when you are drawing into a QPicture. Otherwise - it may not be possible to replay the picture with additional - transformations; using the translate(), scale(), etc. convenience - functions is safe. - - For more information about the coordinate system, transformations - and window-viewport conversion, see \l {Coordinate System}. - - \sa setWorldTransform(), QTransform -*/ - -void QPainter::setWorldMatrix(const QMatrix &matrix, bool combine) -{ - setWorldTransform(QTransform(matrix), combine); -} - -/*! - \since 4.2 - \obsolete - - Returns the world transformation matrix. - - It is advisable to use worldTransform() because worldMatrix() does not - preserve the properties of perspective transformations. - - \sa {QPainter#Coordinate Transformations}{Coordinate Transformations}, - {Coordinate System} -*/ - -QMatrix QPainter::worldMatrix() const -{ - Q_D(const QPainter); - if (!d->engine) { - qWarning("QPainter::worldMatrix: Painter not active"); - return d->fakeState()->transform.toAffine(); - } - return d->state->worldMatrix.toAffine(); -} - -/*! - \obsolete - - Use setWorldTransform() instead. - - \sa setWorldTransform() -*/ - -void QPainter::setMatrix(const QMatrix &matrix, bool combine) -{ - setWorldTransform(QTransform(matrix), combine); -} - -/*! - \obsolete - - Use worldTransform() instead. - - \sa worldTransform() -*/ - -QMatrix QPainter::matrix() const -{ -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - return worldMatrix(); -QT_WARNING_POP -} - - -/*! - \since 4.2 - \obsolete - - Returns the transformation matrix combining the current - window/viewport and world transformation. - - It is advisable to use combinedTransform() instead of this - function to preserve the properties of perspective transformations. - - \sa setWorldTransform(), setWindow(), setViewport() -*/ -QMatrix QPainter::combinedMatrix() const -{ - return combinedTransform().toAffine(); -} - - -/*! - \obsolete - - Returns the matrix that transforms from logical coordinates to - device coordinates of the platform dependent paint device. - - \note It is advisable to use deviceTransform() instead of this - function to preserve the properties of perspective transformations. - - This function is \e only needed when using platform painting - commands on the platform dependent handle (Qt::HANDLE), and the - platform does not do transformations nativly. - - The QPaintEngine::PaintEngineFeature enum can be queried to - determine whether the platform performs the transformations or - not. - - \sa worldMatrix(), QPaintEngine::hasFeature(), -*/ -QMatrix QPainter::deviceMatrix() const -{ - Q_D(const QPainter); - if (!d->engine) { - qWarning("QPainter::deviceMatrix: Painter not active"); - return d->fakeState()->transform.toAffine(); - } - return d->state->matrix.toAffine(); -} - -/*! - \obsolete - - Resets any transformations that were made using translate(), scale(), - shear(), rotate(), setWorldMatrix(), setViewport() and - setWindow(). - - It is advisable to use resetTransform() instead of this function - to preserve the properties of perspective transformations. - - \sa {QPainter#Coordinate Transformations}{Coordinate - Transformations} -*/ - -void QPainter::resetMatrix() -{ - resetTransform(); -} -#endif - /*! \since 4.2 @@ -3114,34 +2945,6 @@ bool QPainter::worldMatrixEnabled() const return d->state->WxF; } -#if QT_DEPRECATED_SINCE(5, 13) -/*! - \obsolete - - Use setWorldMatrixEnabled() instead. - - \sa setWorldMatrixEnabled() -*/ - -void QPainter::setMatrixEnabled(bool enable) -{ - setWorldMatrixEnabled(enable); -} - -/*! - \obsolete - - Use worldMatrixEnabled() instead - - \sa worldMatrixEnabled() -*/ - -bool QPainter::matrixEnabled() const -{ - return worldMatrixEnabled(); -} -#endif - /*! Scales the coordinate system by (\a{sx}, \a{sy}). @@ -8075,33 +7878,6 @@ QFont QPaintEngineState::font() const return static_cast(this)->font; } -#if QT_DEPRECATED_SINCE(5, 13) -/*! - \since 4.2 - \obsolete - - Use transform() instead. - - Returns the matrix in the current paint engine - state. - - \note It is advisable to use transform() instead of this function to - preserve the properties of perspective transformations. - - This variable should only be used when the state() returns a - combination which includes the QPaintEngine::DirtyTransform flag. - - \sa state(), QPaintEngine::updateState() -*/ - -QMatrix QPaintEngineState::matrix() const -{ - const QPainterState *st = static_cast(this); - - return st->matrix.toAffine(); -} -#endif - /*! \since 4.3 diff --git a/src/gui/painting/qpainter.h b/src/gui/painting/qpainter.h index 205cd1dd2b..52de8b6839 100644 --- a/src/gui/painting/qpainter.h +++ b/src/gui/painting/qpainter.h @@ -53,7 +53,6 @@ #include #include #include -#include #include #include #include @@ -236,35 +235,11 @@ public: void restore(); // XForm functions -#if QT_DEPRECATED_SINCE(5, 13) - QT_DEPRECATED_X("Use setTransform() instead") - void setMatrix(const QMatrix &matrix, bool combine = false); - QT_DEPRECATED_X("Use transform() instead") - QMatrix matrix() const; - QT_DEPRECATED_X("Use deviceTransform() instead") - QMatrix deviceMatrix() const; - QT_DEPRECATED_X("Use resetTransform() instead") - void resetMatrix(); -#endif - void setTransform(const QTransform &transform, bool combine = false); const QTransform &transform() const; const QTransform &deviceTransform() const; void resetTransform(); -#if QT_DEPRECATED_SINCE(5, 13) - QT_DEPRECATED_X("Use setWorldTransform() instead") - void setWorldMatrix(const QMatrix &matrix, bool combine = false); - QT_DEPRECATED_X("Use worldTransform() instead") - QMatrix worldMatrix() const; - QT_DEPRECATED_X("Use combinedTransform() instead") - QMatrix combinedMatrix() const; - QT_DEPRECATED_X("Use setWorldMatrixEnabled() instead") - void setMatrixEnabled(bool enabled); - QT_DEPRECATED_X("Use worldMatrixEnabled() instead") - bool matrixEnabled() const; -#endif - void setWorldTransform(const QTransform &matrix, bool combine = false); const QTransform &worldTransform() const; diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp index ab60afd9cd..11623c78f0 100644 --- a/src/gui/painting/qpainterpath.cpp +++ b/src/gui/painting/qpainterpath.cpp @@ -44,7 +44,6 @@ #include #include #include -#include #include #include #include @@ -1603,6 +1602,25 @@ QPainterPath QPainterPath::toReversed() const return rev; } +/*! + \overload + + Converts the path into a list of polygons without any transformation, + and returns the list. + + This function creates one polygon for each subpath regardless of + intersecting subpaths (i.e. overlapping bounding rectangles). To + make sure that such overlapping subpaths are filled correctly, use + the toFillPolygons() function instead. + + \sa toFillPolygons(), toFillPolygon(), {QPainterPath#QPainterPath + Conversion}{QPainterPath Conversion} +*/ +QList QPainterPath::toSubpathPolygons() const +{ + return toSubpathPolygons(QTransform()); +} + /*! Converts the path into a list of polygons using the QTransform \a matrix, and returns the list. @@ -1660,18 +1678,34 @@ QList QPainterPath::toSubpathPolygons(const QTransform &matrix) const return flatCurves; } -#if QT_DEPRECATED_SINCE(5, 15) /*! - \overload - \obsolete + \overload - Use toSubpathPolygons(const QTransform &matrix) instead. - */ -QList QPainterPath::toSubpathPolygons(const QMatrix &matrix) const + Converts the path into a list of polygons without any transformation, + and returns the list. + + The function differs from the toFillPolygon() function in that it + creates several polygons. It is provided because it is usually + faster to draw several small polygons than to draw one large + polygon, even though the total number of points drawn is the same. + + The toFillPolygons() function differs from the toSubpathPolygons() + function in that it create only polygon for subpaths that have + overlapping bounding rectangles. + + Like the toFillPolygon() function, this function uses a rewinding + technique to make sure that overlapping subpaths can be filled + using the correct fill rule. Note that rewinding inserts addition + lines in the polygons so the outline of the fill polygon does not + match the outline of the path. + + \sa toSubpathPolygons(), toFillPolygon(), + {QPainterPath#QPainterPath Conversion}{QPainterPath Conversion} +*/ +QList QPainterPath::toFillPolygons() const { - return toSubpathPolygons(QTransform(matrix)); + return toFillPolygons(QTransform()); } -#endif // QT_DEPRECATED_SINCE(5, 15) /*! Converts the path into a list of polygons using the @@ -1792,19 +1826,6 @@ QList QPainterPath::toFillPolygons(const QTransform &matrix) const return polys; } -#if QT_DEPRECATED_SINCE(5, 15) -/*! - \overload - \obsolete - - Use toFillPolygons(const QTransform &matrix) instead. - */ -QList QPainterPath::toFillPolygons(const QMatrix &matrix) const -{ - return toFillPolygons(QTransform(matrix)); -} -#endif // QT_DEPRECATED_SINCE(5, 15) - //same as qt_polygon_isect_line in qpolygon.cpp static void qt_painterpath_isect_line(const QPointF &p1, const QPointF &p2, @@ -2881,6 +2902,28 @@ void QPainterPathStroker::setDashOffset(qreal offset) d_func()->dashOffset = offset; } +/*! + \overload + + Converts the path into a polygon without any transformation, + and returns the polygon. + + The polygon is created by first converting all subpaths to + polygons, then using a rewinding technique to make sure that + overlapping subpaths can be filled using the correct fill rule. + + Note that rewinding inserts addition lines in the polygon so + the outline of the fill polygon does not match the outline of + the path. + + \sa toSubpathPolygons(), toFillPolygons(), + {QPainterPath#QPainterPath Conversion}{QPainterPath Conversion} +*/ +QPolygonF QPainterPath::toFillPolygon() const +{ + return toFillPolygon(QTransform()); +} + /*! Converts the path into a polygon using the QTransform \a matrix, and returns the polygon. @@ -2898,7 +2941,6 @@ void QPainterPathStroker::setDashOffset(qreal offset) */ QPolygonF QPainterPath::toFillPolygon(const QTransform &matrix) const { - const QList flats = toSubpathPolygons(matrix); QPolygonF polygon; if (flats.isEmpty()) @@ -2914,19 +2956,6 @@ QPolygonF QPainterPath::toFillPolygon(const QTransform &matrix) const return polygon; } -#if QT_DEPRECATED_SINCE(5, 15) -/*! - \overload - \obsolete - - Use toFillPolygon(const QTransform &matrix) instead. -*/ -QPolygonF QPainterPath::toFillPolygon(const QMatrix &matrix) const -{ - return toFillPolygon(QTransform(matrix)); -} -#endif // QT_DEPRECATED_SINCE(5, 15) - //derivative of the equation static inline qreal slopeAt(qreal t, qreal a, qreal b, qreal c, qreal d) { diff --git a/src/gui/painting/qpainterpath.h b/src/gui/painting/qpainterpath.h index 26b92dc6fa..078b665222 100644 --- a/src/gui/painting/qpainterpath.h +++ b/src/gui/painting/qpainterpath.h @@ -41,7 +41,6 @@ #define QPAINTERPATH_H #include -#include #include #include #include @@ -59,6 +58,7 @@ class QPainterPathStrokerPrivate; class QPen; class QPolygonF; class QRegion; +class QTransform; class QVectorPath; class Q_GUI_EXPORT QPainterPath @@ -176,16 +176,11 @@ public: Q_REQUIRED_RESULT QPainterPath toReversed() const; -#if QT_DEPRECATED_SINCE(5, 15) - QT_DEPRECATED_X("Use toSubpathPolygons(const QTransform &)") - QList toSubpathPolygons(const QMatrix &matrix = QMatrix()) const; - QT_DEPRECATED_X("Use toFillPolygons(const QTransform &") - QList toFillPolygons(const QMatrix &matrix = QMatrix()) const; - QT_DEPRECATED_X("Use toFillPolygon(const QTransform &)") - QPolygonF toFillPolygon(const QMatrix &matrix = QMatrix()) const; -#endif // QT_DEPRECATED_SINCE(5, 15) + QList toSubpathPolygons() const; QList toSubpathPolygons(const QTransform &matrix) const; + QList toFillPolygons() const; QList toFillPolygons(const QTransform &matrix) const; + QPolygonF toFillPolygon() const; QPolygonF toFillPolygon(const QTransform &matrix) const; int elementCount() const; @@ -238,7 +233,6 @@ private: friend class QPainterPathData; friend class QPainterPathStroker; friend class QPainterPathStrokerPrivate; - friend class QMatrix; friend class QTransform; friend class QVectorPath; friend Q_GUI_EXPORT const QVectorPath &qtVectorPathForPath(const QPainterPath &); diff --git a/src/gui/painting/qpainterpath_p.h b/src/gui/painting/qpainterpath_p.h index a420e0b3d9..d52243b0df 100644 --- a/src/gui/painting/qpainterpath_p.h +++ b/src/gui/painting/qpainterpath_p.h @@ -74,7 +74,6 @@ public: friend class QPainterPathData; friend class QPainterPathStroker; friend class QPainterPathStrokerPrivate; - friend class QMatrix; friend class QTransform; friend class QVectorPath; friend struct QPainterPathPrivateDeleter; diff --git a/src/gui/painting/qpolygon.cpp b/src/gui/painting/qpolygon.cpp index 4fe819cae0..e9a8793bd0 100644 --- a/src/gui/painting/qpolygon.cpp +++ b/src/gui/painting/qpolygon.cpp @@ -899,7 +899,7 @@ QPolygon QPolygon::united(const QPolygon &r) const QPainterPath subject; subject.addPolygon(*this); QPainterPath clip; clip.addPolygon(r); - return subject.united(clip).toFillPolygon(QTransform()).toPolygon(); + return subject.united(clip).toFillPolygon().toPolygon(); } /*! @@ -918,7 +918,7 @@ QPolygon QPolygon::intersected(const QPolygon &r) const QPainterPath subject; subject.addPolygon(*this); QPainterPath clip; clip.addPolygon(r); - return subject.intersected(clip).toFillPolygon(QTransform()).toPolygon(); + return subject.intersected(clip).toFillPolygon().toPolygon(); } /*! @@ -936,7 +936,7 @@ QPolygon QPolygon::subtracted(const QPolygon &r) const QPainterPath subject; subject.addPolygon(*this); QPainterPath clip; clip.addPolygon(r); - return subject.subtracted(clip).toFillPolygon(QTransform()).toPolygon(); + return subject.subtracted(clip).toFillPolygon().toPolygon(); } /*! @@ -975,7 +975,7 @@ QPolygonF QPolygonF::united(const QPolygonF &r) const QPainterPath subject; subject.addPolygon(*this); QPainterPath clip; clip.addPolygon(r); - return subject.united(clip).toFillPolygon(QTransform()); + return subject.united(clip).toFillPolygon(); } /*! @@ -994,7 +994,7 @@ QPolygonF QPolygonF::intersected(const QPolygonF &r) const QPainterPath subject; subject.addPolygon(*this); QPainterPath clip; clip.addPolygon(r); - return subject.intersected(clip).toFillPolygon(QTransform()); + return subject.intersected(clip).toFillPolygon(); } /*! @@ -1011,7 +1011,7 @@ QPolygonF QPolygonF::subtracted(const QPolygonF &r) const { QPainterPath subject; subject.addPolygon(*this); QPainterPath clip; clip.addPolygon(r); - return subject.subtracted(clip).toFillPolygon(QTransform()); + return subject.subtracted(clip).toFillPolygon(); } /*! diff --git a/src/gui/painting/qpolygon.h b/src/gui/painting/qpolygon.h index 93fab55aa1..584965af3b 100644 --- a/src/gui/painting/qpolygon.h +++ b/src/gui/painting/qpolygon.h @@ -47,8 +47,6 @@ QT_BEGIN_NAMESPACE - -class QMatrix; class QTransform; class QRect; class QVariant; diff --git a/src/gui/painting/qregion.cpp b/src/gui/painting/qregion.cpp index bac042c784..6409ab9528 100644 --- a/src/gui/painting/qregion.cpp +++ b/src/gui/painting/qregion.cpp @@ -3917,7 +3917,7 @@ QRegion::QRegion(const QRect &r, RegionType t) } else if (t == Ellipse) { QPainterPath path; path.addEllipse(r.x(), r.y(), r.width(), r.height()); - QPolygon a = path.toSubpathPolygons(QTransform()).at(0).toPolygon(); + QPolygon a = path.toSubpathPolygons().at(0).toPolygon(); d->qt_rgn = PolygonRegion(a.constData(), a.size(), EvenOddRule); } } diff --git a/src/gui/painting/qtransform.cpp b/src/gui/painting/qtransform.cpp index 7bc10df68e..4adc2b075e 100644 --- a/src/gui/painting/qtransform.cpp +++ b/src/gui/painting/qtransform.cpp @@ -41,7 +41,6 @@ #include "qdatastream.h" #include "qdebug.h" #include "qhashfunctions.h" -#include "qmatrix.h" #include "qregion.h" #include "qpainterpath.h" #include "qpainterpath_p.h" @@ -109,14 +108,6 @@ static void nanWarning(const char *func) or project the coordinate system, and is typically used when rendering graphics. - QTransform differs from QMatrix in that it is a true 3x3 matrix, - allowing perspective transformations. QTransform's toAffine() - method allows casting QTransform to QMatrix. If a perspective - transformation has been specified on the matrix, then the - conversion will cause loss of data. - - QTransform is the recommended transformation class in Qt. - A QTransform object can be built using the setMatrix(), scale(), rotate(), translate() and shear() functions. Alternatively, it can be built by applying \l {QTransform#Basic Matrix @@ -308,26 +299,6 @@ QTransform::QTransform(qreal h11, qreal h12, qreal h21, { } -#if QT_DEPRECATED_SINCE(5, 15) -/*! - \fn QTransform::QTransform(const QMatrix &matrix) - \obsolete - - Constructs a matrix that is a copy of the given \a matrix. - Note that the \c m13, \c m23, and \c m33 elements are set to 0, 0, - and 1 respectively. - */ -QTransform::QTransform(const QMatrix &mtx) - : m_matrix{ {mtx._m11, mtx._m12, 0}, {mtx._m21, mtx._m22, 0}, {mtx._dx, mtx._dy, 1} } - , m_type(TxNone) - , m_dirty(TxShear) -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - , d(nullptr) -#endif -{ -} -#endif // QT_DEPRECATED_SINCE(5, 15) - /*! Returns the adjoint of this matrix. */ @@ -1557,7 +1528,7 @@ QRegion QTransform::map(const QRegion &r) const } QPainterPath p = map(qt_regionToPath(r)); - return p.toFillPolygon(QTransform()).toPolygon(); + return p.toFillPolygon().toPolygon(); } struct QHomogeneousCoordinate @@ -2095,22 +2066,6 @@ void QTransform::map(int x, int y, int *tx, int *ty) const *ty = qRound(fy); } -#if QT_DEPRECATED_SINCE(5, 15) -/*! - \obsolete - Returns the QTransform as an affine matrix. - - \warning If a perspective transformation has been specified, - then the conversion will cause loss of data. -*/ -QMatrix QTransform::toAffine() const -{ - return QMatrix(m_matrix[0][0], m_matrix[0][1], - m_matrix[1][0], m_matrix[1][1], - m_matrix[2][0], m_matrix[2][1]); -} -#endif // QT_DEPRECATED_SINCE(5, 15) - /*! Returns the transformation type of this matrix. @@ -2402,4 +2357,50 @@ bool qt_scaleForTransform(const QTransform &transform, qreal *scale) } } +QDataStream & operator>>(QDataStream &s, QTransform::Affine &m) +{ + if (s.version() == 1) { + float m11, m12, m21, m22, dx, dy; + s >> m11; s >> m12; s >> m21; s >> m22; s >> dx; s >> dy; + + m.m_matrix[0][0] = m11; + m.m_matrix[0][1] = m12; + m.m_matrix[1][0] = m21; + m.m_matrix[1][1] = m22; + m.m_matrix[2][0] = dx; + m.m_matrix[2][1] = dy; + } else { + s >> m.m_matrix[0][0]; + s >> m.m_matrix[0][1]; + s >> m.m_matrix[1][0]; + s >> m.m_matrix[1][1]; + s >> m.m_matrix[2][0]; + s >> m.m_matrix[2][1]; + } + m.m_matrix[0][2] = 0; + m.m_matrix[1][2] = 0; + m.m_matrix[2][2] = 1; + return s; +} + +QDataStream &operator<<(QDataStream &s, const QTransform::Affine &m) +{ + if (s.version() == 1) { + s << (float)m.m_matrix[0][0] + << (float)m.m_matrix[0][1] + << (float)m.m_matrix[1][0] + << (float)m.m_matrix[1][1] + << (float)m.m_matrix[2][0] + << (float)m.m_matrix[2][1]; + } else { + s << m.m_matrix[0][0] + << m.m_matrix[0][1] + << m.m_matrix[1][0] + << m.m_matrix[1][1] + << m.m_matrix[2][0] + << m.m_matrix[2][1]; + } + return s; +} + QT_END_NAMESPACE diff --git a/src/gui/painting/qtransform.h b/src/gui/painting/qtransform.h index ac84599f2e..351f2b2e4e 100644 --- a/src/gui/painting/qtransform.h +++ b/src/gui/painting/qtransform.h @@ -40,7 +40,6 @@ #define QTRANSFORM_H #include -#include #include #include #include @@ -73,9 +72,6 @@ public: qreal h31, qreal h32, qreal h33 = 1.0); QTransform(qreal h11, qreal h12, qreal h21, qreal h22, qreal dx, qreal dy); -#if QT_DEPRECATED_SINCE(5, 15) - explicit QTransform(const QMatrix &mtx); -#endif // QT_DEPRECATED_SINCE(5, 15) #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove; the compiler-generated ones are fine! @@ -160,10 +156,6 @@ public: void map(int x, int y, int *tx, int *ty) const; void map(qreal x, qreal y, qreal *tx, qreal *ty) const; -#if QT_DEPRECATED_SINCE(5, 15) - QMatrix toAffine() const; -#endif // QT_DEPRECATED_SINCE(5, 15) - QTransform &operator*=(qreal div); QTransform &operator/=(qreal div); QTransform &operator+=(qreal div); @@ -172,6 +164,16 @@ public: static QTransform fromTranslate(qreal dx, qreal dy); static QTransform fromScale(qreal dx, qreal dy); +private: + struct Affine { + qreal (& m_matrix)[3][3]; + }; + +public: + auto asAffineMatrix() { return Affine { m_matrix }; } + friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &s, Affine &m); + friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &s, const Affine &m); + private: inline QTransform(qreal h11, qreal h12, qreal h13, qreal h21, qreal h22, qreal h23, diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp index db5c53a48a..af4443fa00 100644 --- a/src/widgets/graphicsview/qgraphicsitem.cpp +++ b/src/widgets/graphicsview/qgraphicsitem.cpp @@ -530,9 +530,6 @@ setEnabled() in itemChange() as this notification is delivered. The return value is ignored. - \value ItemMatrixChange The item's affine transformation matrix is - changing. This value is obsolete; you can use ItemTransformChange instead. - \value ItemPositionChange The item's position changes. This notification is sent if the ItemSendsGeometryChanges flag is enabled, and when the item's local position changes, relative to its parent (i.e., as a result @@ -1506,7 +1503,7 @@ void QGraphicsItemPrivate::initStyleOption(QStyleOptionGraphicsItem *option, con return; // Initialize QStyleOptionGraphicsItem specific values (matrix, exposedRect). - option->matrix = worldTransform.toAffine(); //### discards perspective + option->matrix = worldTransform; //### discards perspective if (!allItems) { // Determine the item's exposed area @@ -3997,24 +3994,6 @@ void QGraphicsItem::ensureVisible(const QRectF &rect, int xmargin, int ymargin) ensureVisible(QRectF(\a x, \a y, \a w, \a h), \a xmargin, \a ymargin). */ -#if QT_DEPRECATED_SINCE(5, 13) -/*! - \obsolete - - Returns the item's affine transformation matrix. This is a subset or the - item's full transformation matrix, and might not represent the item's full - transformation. - - Use transform() instead. - - \sa setTransform(), sceneTransform() -*/ -QMatrix QGraphicsItem::matrix() const -{ - return transform().toAffine(); -} -#endif - /*! \since 4.3 @@ -4323,22 +4302,6 @@ void QGraphicsItem::setTransformOriginPoint(const QPointF &origin) \sa setTransformOriginPoint(), {Transformations} */ - -#if QT_DEPRECATED_SINCE(5, 13) -/*! - \obsolete - - Use sceneTransform() instead. - - \sa transform(), setTransform(), scenePos(), {The Graphics View Coordinate System} -*/ -QMatrix QGraphicsItem::sceneMatrix() const -{ - d_ptr->ensureSceneTransform(); - return d_ptr->sceneTransform.toAffine(); -} -#endif - /*! \since 4.3 @@ -4549,50 +4512,6 @@ QTransform QGraphicsItem::itemTransform(const QGraphicsItem *other, bool *ok) co return x; } -#if QT_DEPRECATED_SINCE(5, 13) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -/*! - \obsolete - - Sets the item's affine transformation matrix. This is a subset or the - item's full transformation matrix, and might not represent the item's full - transformation. - - Use setTransform() instead. - - \sa transform(), {The Graphics View Coordinate System} -*/ -void QGraphicsItem::setMatrix(const QMatrix &matrix, bool combine) -{ - if (!d_ptr->transformData) - d_ptr->transformData = new QGraphicsItemPrivate::TransformData; - - QTransform newTransform(combine ? QTransform(matrix) * d_ptr->transformData->transform : QTransform(matrix)); - if (d_ptr->transformData->transform == newTransform) - return; - - // Update and set the new transformation. - if (!(d_ptr->flags & ItemSendsGeometryChanges)) { - d_ptr->setTransformHelper(newTransform); - return; - } - - // Notify the item that the transformation matrix is changing. - const QVariant newMatrixVariant = QVariant::fromValue(newTransform.toAffine()); - newTransform = QTransform(qvariant_cast(itemChange(ItemMatrixChange, newMatrixVariant))); - if (d_ptr->transformData->transform == newTransform) - return; - - // Update and set the new transformation. - d_ptr->setTransformHelper(newTransform); - - // Send post-notification. - itemChange(ItemTransformHasChanged, QVariant::fromValue(newTransform)); -} -QT_WARNING_POP -#endif - /*! \since 4.3 @@ -4646,18 +4565,6 @@ void QGraphicsItem::setTransform(const QTransform &matrix, bool combine) d_ptr->sendScenePosChange(); } -#if QT_DEPRECATED_SINCE(5, 13) -/*! - \obsolete - - Use resetTransform() instead. -*/ -void QGraphicsItem::resetMatrix() -{ - resetTransform(); -} -#endif - /*! \since 4.3 @@ -11526,14 +11433,6 @@ QDebug operator<<(QDebug debug, QGraphicsItem::GraphicsItemChange change) case QGraphicsItem::ItemFlagsHaveChanged: str = "ItemFlagsHaveChanged"; break; -#if QT_DEPRECATED_SINCE(5, 14) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - case QGraphicsItem::ItemMatrixChange: - str = "ItemMatrixChange"; - break; -QT_WARNING_POP -#endif case QGraphicsItem::ItemParentChange: str = "ItemParentChange"; break; diff --git a/src/widgets/graphicsview/qgraphicsitem.h b/src/widgets/graphicsview/qgraphicsitem.h index d66a4917e5..c78d31bbd4 100644 --- a/src/widgets/graphicsview/qgraphicsitem.h +++ b/src/widgets/graphicsview/qgraphicsitem.h @@ -71,7 +71,6 @@ class QGraphicsTransform; class QGraphicsWidget; class QInputMethodEvent; class QKeyEvent; -class QMatrix; class QMenu; class QPainter; class QPen; @@ -110,9 +109,6 @@ public: enum GraphicsItemChange { ItemPositionChange, -#if QT_DEPRECATED_SINCE(5, 14) - ItemMatrixChange Q_DECL_ENUMERATOR_DEPRECATED_X("Use ItemTransformChange instead"), -#endif ItemVisibleChange = 2, ItemEnabledChange, ItemSelectedChange, @@ -285,16 +281,6 @@ public: inline void ensureVisible(qreal x, qreal y, qreal w, qreal h, int xmargin = 50, int ymargin = 50); // Local transformation -#if QT_DEPRECATED_SINCE(5, 13) - QT_DEPRECATED_X("Use transform() instead") - QMatrix matrix() const; - QT_DEPRECATED_X("Use sceneTransform() instead") - QMatrix sceneMatrix() const; - QT_DEPRECATED_X("Use setTransform() instead") - void setMatrix(const QMatrix &matrix, bool combine = false); - QT_DEPRECATED_X("Use resetTransform() instead") - void resetMatrix(); -#endif QTransform transform() const; QTransform sceneTransform() const; QTransform deviceTransform(const QTransform &viewportTransform) const; diff --git a/src/widgets/graphicsview/qgraphicsitemanimation.cpp b/src/widgets/graphicsview/qgraphicsitemanimation.cpp index 1c5dbf265c..45b4871e24 100644 --- a/src/widgets/graphicsview/qgraphicsitemanimation.cpp +++ b/src/widgets/graphicsview/qgraphicsitemanimation.cpp @@ -87,7 +87,6 @@ #include #include #include -#include #include @@ -294,19 +293,6 @@ QList > QGraphicsItemAnimation::posList() const return list; } -#if QT_DEPRECATED_SINCE(5, 14) -/*! - Returns the matrix used to transform the item at the specified \a step value. - - \obsolete Use transformAt() instead -*/ -QMatrix QGraphicsItemAnimation::matrixAt(qreal step) const -{ - check_step_valid(step, "matrixAt"); - return transformAt(step).toAffine(); -} -#endif - /*! Returns the transform used for the item at the specified \a step value. diff --git a/src/widgets/graphicsview/qgraphicsitemanimation.h b/src/widgets/graphicsview/qgraphicsitemanimation.h index 3051fb2e2b..af54dfff93 100644 --- a/src/widgets/graphicsview/qgraphicsitemanimation.h +++ b/src/widgets/graphicsview/qgraphicsitemanimation.h @@ -48,7 +48,6 @@ QT_REQUIRE_CONFIG(graphicsview); QT_BEGIN_NAMESPACE class QGraphicsItem; -class QMatrix; class QPointF; class QTimeLine; class QTransform; @@ -72,10 +71,6 @@ public: QList > posList() const; void setPosAt(qreal step, const QPointF &pos); -#if QT_DEPRECATED_SINCE(5, 14) - QT_DEPRECATED_X("Use transformAt() instead") - QMatrix matrixAt(qreal step) const; -#endif QTransform transformAt(qreal step) const; qreal rotationAt(qreal step) const; diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp index a75f1ab24b..f806ecebad 100644 --- a/src/widgets/graphicsview/qgraphicsview.cpp +++ b/src/widgets/graphicsview/qgraphicsview.cpp @@ -292,7 +292,6 @@ static const int QGRAPHICSVIEW_PREALLOC_STYLE_OPTIONS = 503; // largest prime < #include #include #include -#include #include #include #include @@ -1824,75 +1823,6 @@ void QGraphicsView::setSceneRect(const QRectF &rect) d->recalculateContentSize(); } -#if QT_DEPRECATED_SINCE(5, 15) - -/*! - \obsolete - - Use transform() instead. - - Returns the current transformation matrix for the view. If no current - transformation is set, the identity matrix is returned. - - \sa setMatrix(), transform(), rotate(), scale(), shear(), translate() -*/ -QMatrix QGraphicsView::matrix() const -{ - Q_D(const QGraphicsView); - return d->matrix.toAffine(); -} - -/*! - \obsolete - - Use setTransform() instead. - - Sets the view's current transformation matrix to \a matrix. - - If \a combine is true, then \a matrix is combined with the current matrix; - otherwise, \a matrix \e replaces the current matrix. \a combine is false - by default. - - The transformation matrix tranforms the scene into view coordinates. Using - the default transformation, provided by the identity matrix, one pixel in - the view represents one unit in the scene (e.g., a 10x10 rectangular item - is drawn using 10x10 pixels in the view). If a 2x2 scaling matrix is - applied, the scene will be drawn in 1:2 (e.g., a 10x10 rectangular item is - then drawn using 20x20 pixels in the view). - - Example: - - \snippet code/src_gui_graphicsview_qgraphicsview.cpp 3 - - To simplify interation with items using a transformed view, QGraphicsView - provides mapTo... and mapFrom... functions that can translate between - scene and view coordinates. For example, you can call mapToScene() to map - a view coordinate to a floating point scene coordinate, or mapFromScene() - to map from floating point scene coordinates to view coordinates. - - \sa matrix(), setTransform(), rotate(), scale(), shear(), translate() -*/ -void QGraphicsView::setMatrix(const QMatrix &matrix, bool combine) -{ - setTransform(QTransform(matrix), combine); -} - -/*! - \obsolete - - Use resetTransform() instead. - - Resets the view transformation matrix to the identity matrix. - - \sa resetTransform() -*/ -void QGraphicsView::resetMatrix() -{ - resetTransform(); -} - -#endif // QT_DEPRECATED_SINCE(5, 15) - /*! Rotates the current view transformation \a angle degrees clockwise. diff --git a/src/widgets/graphicsview/qgraphicsview.h b/src/widgets/graphicsview/qgraphicsview.h index e98ec52d8f..4c0b70bdd7 100644 --- a/src/widgets/graphicsview/qgraphicsview.h +++ b/src/widgets/graphicsview/qgraphicsview.h @@ -165,11 +165,6 @@ public: void setSceneRect(const QRectF &rect); inline void setSceneRect(qreal x, qreal y, qreal w, qreal h); -#if QT_DEPRECATED_SINCE(5, 15) - QT_DEPRECATED_X("Use transform()") QMatrix matrix() const; - QT_DEPRECATED_X("Use setTransform()") void setMatrix(const QMatrix &matrix, bool combine = false); - QT_DEPRECATED_X("Use resetTransform()") void resetMatrix(); -#endif // QT_DEPRECATED_SINCE(5, 15) QTransform transform() const; QTransform viewportTransform() const; bool isTransformed() const; diff --git a/src/widgets/styles/qstyleoption.cpp b/src/widgets/styles/qstyleoption.cpp index bf365585d4..356092074c 100644 --- a/src/widgets/styles/qstyleoption.cpp +++ b/src/widgets/styles/qstyleoption.cpp @@ -3763,7 +3763,7 @@ qreal QStyleOptionGraphicsItem::levelOfDetailFromTransform(const QTransform &wor \brief the complete transformation matrix for the item \obsolete - The QMatrix provided through this member does include information about + The QTransform provided through this member does include information about any perspective transformations applied to the view or item. To get the correct transformation matrix, use QPainter::transform() on the painter passed into the QGraphicsItem::paint() implementation. @@ -3774,7 +3774,7 @@ qreal QStyleOptionGraphicsItem::levelOfDetailFromTransform(const QTransform &wor item drawing. To find the dimensions of an item in screen coordinates (i.e., pixels), - you can use the mapping functions of QMatrix, such as QMatrix::map(). + you can use the mapping functions of QTransform, such as QTransform::map(). This member is only initialized for items that have the QGraphicsItem::ItemUsesExtendedStyleOption flag set. diff --git a/src/widgets/styles/qstyleoption.h b/src/widgets/styles/qstyleoption.h index a8ce3b465e..a93f0c7ca6 100644 --- a/src/widgets/styles/qstyleoption.h +++ b/src/widgets/styles/qstyleoption.h @@ -47,7 +47,7 @@ #include #endif #include -#include +#include #if QT_CONFIG(slider) #include #endif @@ -693,7 +693,7 @@ public: enum StyleOptionVersion { Version = 1 }; QRectF exposedRect; - QMatrix matrix; + QTransform matrix; qreal levelOfDetail; QStyleOptionGraphicsItem(); diff --git a/tests/auto/corelib/kernel/qmetatype/typeFlags.bin b/tests/auto/corelib/kernel/qmetatype/typeFlags.bin index 7009be98a2..0aa282efc9 100644 Binary files a/tests/auto/corelib/kernel/qmetatype/typeFlags.bin and b/tests/auto/corelib/kernel/qmetatype/typeFlags.bin differ diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp index 22464daf67..1b3bc8a627 100644 --- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp +++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp @@ -1769,7 +1769,6 @@ void tst_QVariant::typeName_data() QTest::newRow("39") << int(QVariant::RectF) << QByteArray("QRectF"); QTest::newRow("40") << int(QVariant::PointF) << QByteArray("QPointF"); QTest::newRow("41") << int(QVariant::RegExp) << QByteArray("QRegExp"); - QTest::newRow("43") << int(QVariant::Matrix) << QByteArray("QMatrix"); QTest::newRow("44") << int(QVariant::Transform) << QByteArray("QTransform"); QTest::newRow("45") << int(QVariant::Hash) << QByteArray("QVariantHash"); QTest::newRow("46") << int(QVariant::Matrix4x4) << QByteArray("QMatrix4x4"); diff --git a/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp b/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp index d777d69d3c..75bfadb200 100644 --- a/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp +++ b/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp @@ -3297,7 +3297,7 @@ void tst_QDataStream::streamRealDataTypes() stream.setVersion(QDataStream::Qt_4_2); stream << qreal(0) << qreal(1.0) << qreal(1.1) << qreal(3.14) << qreal(-3.14) << qreal(-1); stream << QPointF(3, 5) << QRectF(-1, -2, 3, 4) << (QPolygonF() << QPointF(0, 0) << QPointF(1, 2)); - stream << QMatrix().rotate(90).scale(2, 2); + stream << QTransform().rotate(90).scale(2, 2).asAffineMatrix(); stream << path; stream << picture; stream << QTextLength(QTextLength::VariableLength, 1.5); @@ -3311,7 +3311,7 @@ void tst_QDataStream::streamRealDataTypes() QPointF point; QRectF rect; QPolygonF polygon; - QMatrix matrix; + QTransform transform; QPainterPath p; QPicture pict; QTextLength textLength; @@ -3361,8 +3361,9 @@ void tst_QDataStream::streamRealDataTypes() QCOMPARE(rect, QRectF(-1, -2, 3, 4)); stream >> polygon; QCOMPARE((QVector &)polygon, (QPolygonF() << QPointF(0, 0) << QPointF(1, 2))); + auto matrix = transform.asAffineMatrix(); stream >> matrix; - QCOMPARE(matrix, QMatrix().rotate(90).scale(2, 2)); + QCOMPARE(transform, QTransform().rotate(90).scale(2, 2)); stream >> p; QCOMPARE(p, path); if (i == 1) { @@ -3384,10 +3385,7 @@ void tst_QDataStream::streamRealDataTypes() QCOMPARE(col, color); stream >> rGrad; QCOMPARE(rGrad.style(), radialBrush.style()); -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - QCOMPARE(rGrad.matrix(), radialBrush.matrix()); -QT_WARNING_POP + QCOMPARE(rGrad.transform(), radialBrush.transform()); QCOMPARE(rGrad.gradient()->type(), radialBrush.gradient()->type()); QCOMPARE(rGrad.gradient()->stops(), radialBrush.gradient()->stops()); QCOMPARE(rGrad.gradient()->spread(), radialBrush.gradient()->spread()); @@ -3396,10 +3394,7 @@ QT_WARNING_POP QCOMPARE(((QRadialGradient *)rGrad.gradient())->radius(), ((QRadialGradient *)radialBrush.gradient())->radius()); stream >> cGrad; QCOMPARE(cGrad.style(), conicalBrush.style()); -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - QCOMPARE(cGrad.matrix(), conicalBrush.matrix()); -QT_WARNING_POP + QCOMPARE(cGrad.transform(), conicalBrush.transform()); QCOMPARE(cGrad.gradient()->type(), conicalBrush.gradient()->type()); QCOMPARE(cGrad.gradient()->stops(), conicalBrush.gradient()->stops()); QCOMPARE(cGrad.gradient()->spread(), conicalBrush.gradient()->spread()); diff --git a/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp b/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp index d60d6643b2..f0c5bf79a7 100644 --- a/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp +++ b/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp @@ -67,7 +67,6 @@ private slots: F(QPen, QPen) \ F(QTextLength, QTextLength) \ F(QTextFormat, QTextFormat) \ - F(QMatrix, QMatrix) \ F(QTransform, QTransform) \ F(QMatrix4x4, QMatrix4x4) \ F(QVector2D, QVector2D) \ @@ -197,14 +196,6 @@ template<> struct TestValueFactory { template<> struct TestValueFactory { static QTextFormat *create() { return new QTextFormat(QTextFormat::FrameFormat); } }; -#if QT_DEPRECATED_SINCE(5, 15) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -template<> struct TestValueFactory { - static QMatrix *create() { return new QMatrix(10, 20, 30, 40, 50, 60); } -}; -QT_WARNING_POP -#endif template<> struct TestValueFactory { static QTransform *create() { return new QTransform(10, 20, 30, 40, 50, 60); } }; diff --git a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp index 8b301c145a..12998add71 100644 --- a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp +++ b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp @@ -36,7 +36,6 @@ #include #include #include -#include #include #include #include @@ -87,8 +86,6 @@ private slots: void toBrush_data(); void toBrush(); - void matrix(); - void transform(); void matrix4x4(); @@ -402,24 +399,6 @@ void tst_QGuiVariant::toString() QCOMPARE( str, result ); } -#if QT_DEPRECATED_SINCE(5, 15) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -void tst_QGuiVariant::matrix() -{ - QVariant variant; - QMatrix matrix = qvariant_cast(variant); - QVERIFY(matrix.isIdentity()); - variant.setValue(QMatrix().rotate(90)); - QCOMPARE(QMatrix().rotate(90), qvariant_cast(variant)); - - void *mmatrix = QMetaType::create(QVariant::Matrix, 0); - QVERIFY(mmatrix); - QMetaType::destroy(QVariant::Matrix, mmatrix); -} -QT_WARNING_POP -#endif - void tst_QGuiVariant::matrix4x4() { QVariant variant; @@ -711,7 +690,6 @@ void tst_QGuiVariant::implicitConstruction() F(Pen) \ F(TextLength) \ F(TextFormat) \ - F(Matrix) \ F(Transform) \ F(Matrix4x4) \ F(Vector2D) \ diff --git a/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp b/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp index 3c4f2f2e75..26e22e5883 100644 --- a/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp +++ b/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp @@ -144,7 +144,6 @@ private slots: void columnsAndRows(); - void convertQMatrix(); void convertQTransform(); void fill(); @@ -3061,58 +3060,6 @@ void tst_QMatrixNxN::columnsAndRows() QVERIFY(m1.row(3) == QVector4D(4, 8, 12, 16)); } -#if QT_DEPRECATED_SINCE(5, 15) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -// Test converting QMatrix objects into QMatrix4x4 and then -// checking that transformations in the original perform the -// equivalent transformations in the new matrix. -void tst_QMatrixNxN::convertQMatrix() -{ - QMatrix m1; - m1.translate(-3.5, 2.0); - QPointF p1 = m1.map(QPointF(100.0, 150.0)); - QCOMPARE(p1.x(), 100.0 - 3.5); - QCOMPARE(p1.y(), 150.0 + 2.0); - - QMatrix4x4 m2(m1); - QPointF p2 = m2 * QPointF(100.0, 150.0); - QCOMPARE((double)p2.x(), 100.0 - 3.5); - QCOMPARE((double)p2.y(), 150.0 + 2.0); - QCOMPARE(m1, m2.toAffine()); - - QMatrix m3; - m3.scale(1.5, -2.0); - QPointF p3 = m3.map(QPointF(100.0, 150.0)); - QCOMPARE(p3.x(), 1.5 * 100.0); - QCOMPARE(p3.y(), -2.0 * 150.0); - - QMatrix4x4 m4(m3); - QPointF p4 = m4 * QPointF(100.0, 150.0); - QCOMPARE((double)p4.x(), 1.5 * 100.0); - QCOMPARE((double)p4.y(), -2.0 * 150.0); - QCOMPARE(m3, m4.toAffine()); - - QMatrix m5; - m5.rotate(45.0); - QPointF p5 = m5.map(QPointF(100.0, 150.0)); - - QMatrix4x4 m6(m5); - QPointF p6 = m6 * QPointF(100.0, 150.0); - QVERIFY(qFuzzyCompare(float(p5.x()), float(p6.x()))); - QVERIFY(qFuzzyCompare(float(p5.y()), float(p6.y()))); - - QMatrix m7 = m6.toAffine(); - QVERIFY(qFuzzyCompare(float(m5.m11()), float(m7.m11()))); - QVERIFY(qFuzzyCompare(float(m5.m12()), float(m7.m12()))); - QVERIFY(qFuzzyCompare(float(m5.m21()), float(m7.m21()))); - QVERIFY(qFuzzyCompare(float(m5.m22()), float(m7.m22()))); - QVERIFY(qFuzzyCompare(float(m5.dx()), float(m7.dx()))); - QVERIFY(qFuzzyCompare(float(m5.dy()), float(m7.dy()))); -} -QT_WARNING_POP -#endif - // Test converting QTransform objects into QMatrix4x4 and then // checking that transformations in the original perform the // equivalent transformations in the new matrix. diff --git a/tests/auto/gui/painting/CMakeLists.txt b/tests/auto/gui/painting/CMakeLists.txt index e13679e282..7cb4c55cee 100644 --- a/tests/auto/gui/painting/CMakeLists.txt +++ b/tests/auto/gui/painting/CMakeLists.txt @@ -16,5 +16,4 @@ endif() add_subdirectory("qpen") add_subdirectory("qpaintengine") # add_subdirectory("qtransform") -# add_subdirectory("qwmatrix") # add_subdirectory("qpolygon") diff --git a/tests/auto/gui/painting/painting.pro b/tests/auto/gui/painting/painting.pro index 26e84c1b15..3fdb0db760 100644 --- a/tests/auto/gui/painting/painting.pro +++ b/tests/auto/gui/painting/painting.pro @@ -14,7 +14,6 @@ SUBDIRS=\ qpen \ qpaintengine \ qtransform \ - qwmatrix \ qpolygon \ !qtConfig(private_tests): SUBDIRS -= \ diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp index 9eb62ceab2..7418f447e6 100644 --- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp +++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp @@ -140,7 +140,7 @@ private slots: void setWindow(); - void combinedMatrix(); + void combinedTransform(); void renderHints(); void disableEnableClipping(); @@ -1692,7 +1692,7 @@ void tst_QPainter::setWindow() QVERIFY(195 < painted.height() && painted.height() < 205); // correct value is around 200 } -void tst_QPainter::combinedMatrix() +void tst_QPainter::combinedTransform() { QPixmap pm(64, 64); @@ -1703,15 +1703,7 @@ void tst_QPainter::combinedMatrix() p.translate(0.5, 0.5); QTransform ct = p.combinedTransform(); -#if QT_DEPRECATED_SINCE(5, 13) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - QMatrix cm = p.combinedMatrix(); - QCOMPARE(cm, ct.toAffine()); -QT_WARNING_POP -#endif - - QPointF pt = QPointF(0, 0) * ct.toAffine(); + QPointF pt = QPointF(0, 0) * ct; QCOMPARE(pt.x(), 48.0); QCOMPARE(pt.y(), 16.0); @@ -4067,7 +4059,7 @@ void tst_QPainter::drawPolygon() path.moveTo(2, 34); path.lineTo(34, 2); - QPolygonF poly = stroker.createStroke(path).toFillPolygon(QTransform()); + QPolygonF poly = stroker.createStroke(path).toFillPolygon(); img.fill(0xffffffff); QPainter p(&img); @@ -4135,24 +4127,12 @@ void tst_QPainter::inactivePainter() p.setClipRegion(region); p.setClipping(true); -#if QT_DEPRECATED_SINCE(5, 13) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - p.combinedMatrix(); -QT_WARNING_POP -#endif p.combinedTransform(); p.compositionMode(); p.setCompositionMode(QPainter::CompositionMode_Plus); p.device(); -#if QT_DEPRECATED_SINCE(5, 13) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - p.deviceMatrix(); -QT_WARNING_POP -#endif p.deviceTransform(); p.font(); @@ -4176,12 +4156,6 @@ QT_WARNING_POP p.setRenderHint(QPainter::Antialiasing, true); p.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, false); -#if QT_DEPRECATED_SINCE(5, 13) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - p.resetMatrix(); -QT_WARNING_POP -#endif p.resetTransform(); p.rotate(1); p.scale(2, 2); @@ -4197,13 +4171,9 @@ QT_WARNING_POP p.window(); p.setWindow(QRect(10, 10, 620, 460)); -#if QT_DEPRECATED_SINCE(5, 13) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - p.worldMatrix(); - p.setWorldMatrix(QMatrix().translate(43, 21), true); -QT_WARNING_POP -#endif + p.worldTransform(); + p.setWorldTransform(QTransform().translate(43, 21), true); + p.setWorldMatrixEnabled(true); p.transform(); diff --git a/tests/auto/gui/painting/qwmatrix/qwmatrix.pro b/tests/auto/gui/painting/qwmatrix/qwmatrix.pro deleted file mode 100644 index de6454025c..0000000000 --- a/tests/auto/gui/painting/qwmatrix/qwmatrix.pro +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG += testcase -TARGET = tst_qwmatrix -SOURCES += tst_qwmatrix.cpp -QT += testlib - -unix:!darwin:!haiku:!integrity: LIBS += -lm diff --git a/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp b/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp deleted file mode 100644 index 281639c27a..0000000000 --- a/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp +++ /dev/null @@ -1,334 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 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 -#include -#include -#include - -#if QT_DEPRECATED_SINCE(5, 15) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - -class tst_QWMatrix : public QObject -{ - Q_OBJECT - -private slots: - void mapRect_data(); - void mapToPolygon_data(); - void mapRect(); - void operator_star_qwmatrix(); - void assignments(); - void mapToPolygon(); - void translate(); - void scale(); - void mapPolygon(); - -private: - void mapping_data(); -}; - -void tst_QWMatrix::mapRect_data() -{ - mapping_data(); -} - -void tst_QWMatrix::mapToPolygon_data() -{ - mapping_data(); -} - -void tst_QWMatrix::mapping_data() -{ - //create the testtable instance and define the elements - QTest::addColumn("matrix"); - QTest::addColumn("src"); - QTest::addColumn("res"); - - //next we fill it with data - - // identity - QTest::newRow( "identity" ) << QMatrix( 1, 0, 0, 1, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 10, 20, 30, 40 ) ); - // scaling - QTest::newRow( "scale 0" ) << QMatrix( 2, 0, 0, 2, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 20, 40, 60, 80 ) ); - QTest::newRow( "scale 1" ) << QMatrix( 10, 0, 0, 10, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 100, 200, 300, 400 ) ); - // mirroring - QTest::newRow( "mirror 0" ) << QMatrix( -1, 0, 0, 1, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -40, 20, 30, 40 ) ); - QTest::newRow( "mirror 1" ) << QMatrix( 1, 0, 0, -1, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 10, -60, 30, 40 ) ); - QTest::newRow( "mirror 2" ) << QMatrix( -1, 0, 0, -1, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -40, -60, 30, 40 ) ); - QTest::newRow( "mirror 3" ) << QMatrix( -2, 0, 0, -2, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -80, -120, 60, 80 ) ); - QTest::newRow( "mirror 4" ) << QMatrix( -10, 0, 0, -10, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -400, -600, 300, 400 ) ); - QTest::newRow( "mirror 5" ) << QMatrix( -1, 0, 0, 1, 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -30, 0, 30, 40 ) ); - QTest::newRow( "mirror 6" ) << QMatrix( 1, 0, 0, -1, 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( 0, -40, 30, 40 ) ); - QTest::newRow( "mirror 7" ) << QMatrix( -1, 0, 0, -1, 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -30, -40, 30, 40 ) ); - QTest::newRow( "mirror 8" ) << QMatrix( -2, 0, 0, -2, 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -60, -80, 60, 80 ) ); - QTest::newRow( "mirror 9" ) << QMatrix( -10, 0, 0, -10, 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -300, -400, 300, 400 ) ); - - const auto rotate = [](qreal degrees) { - const qreal rad = qDegreesToRadians(degrees); - return QMatrix(std::cos(rad), -std::sin(rad), - std::sin(rad), std::cos(rad), 0, 0); - }; - - // rotations - QTest::newRow( "rot 0 a" ) << rotate(0.) - << QRect( 0, 0, 30, 40 ) - << QPolygon ( QRect( 0, 0, 30, 40 ) ); - QTest::newRow( "rot 0 b" ) << rotate(0.00001f) - << QRect( 0, 0, 30, 40 ) - << QPolygon ( QRect( 0, 0, 30, 40 ) ); - QTest::newRow( "rot 0 c" ) << rotate(0.) - << QRect( 10, 20, 30, 40 ) - << QPolygon ( QRect( 10, 20, 30, 40 ) ); - QTest::newRow( "rot 0 d" ) << rotate(0.00001f) - << QRect( 10, 20, 30, 40 ) - << QPolygon ( QRect( 10, 20, 30, 40 ) ); - -#if 0 - const auto rotScale = [](qreal degrees, qreal scale) { - const qreal rad = qDegreesToRadians(degrees); - return QMatrix(scale * std::cos(rad), -scale * std::sin(rad), - scale * std::sin(rad), scale * std::cos(rad), 0, 0); - }; - // rotations with scaling - QTest::newRow( "rotscale 90 a" ) << rotScale(90., 10) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( 0, -299, 400, 300 ) ); - QTest::newRow( "rotscale 90 b" ) << rotScale(90.00001, 10) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( 0, -299, 400, 300 ) ); - QTest::newRow( "rotscale 90 c" ) << rotScale(90., 10) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 200, -399, 400, 300 ) ); - QTest::newRow( "rotscale 90 d" ) << rotScale(90.00001, 10) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 200, -399, 400, 300 ) ); - - QTest::newRow( "rotscale 180 a" ) << rotScale(180., 10) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -299, -399, 300, 400 ) ); - QTest::newRow( "rotscale 180 b" ) << rotScale(180.000001, 10) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -299, -399, 300, 400 ) ); - QTest::newRow( "rotscale 180 c" ) << rotScale(180., 10) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -399, -599, 300, 400 ) ); - QTest::newRow( "rotscale 180 d" ) << rotScale(180.000001, 10) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -399, -599, 300, 400 ) ); - - QTest::newRow( "rotscale 270 a" ) << rotScale(270., 10) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -399, 00, 400, 300 ) ); - QTest::newRow( "rotscale 270 b" ) << rotScale(270.0000001, 10) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -399, 00, 400, 300 ) ); - QTest::newRow( "rotscale 270 c" ) << rotScale(270., 10) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -599, 100, 400, 300 ) ); - QTest::newRow( "rotscale 270 d" ) << rotScale(270.000001, 10) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -599, 100, 400, 300 ) ); - - // rotations that are not multiples of 90 degrees. mapRect returns the bounding rect here. - QTest::newRow( "rot 45 a" ) << rotate(45) - << QRect( 0, 0, 10, 10 ) - << QPolygon( QRect( 0, -7, 14, 14 ) ); - QTest::newRow( "rot 45 b" ) << rotate(45) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 21, -14, 49, 49 ) ); - QTest::newRow( "rot 45 c" ) << rotScale(45, 10) - << QRect( 0, 0, 10, 10 ) - << QPolygon( QRect( 0, -70, 141, 141 ) ); - QTest::newRow( "rot 45 d" ) << rotScale(45, 10) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 212, -141, 495, 495 ) ); - - QTest::newRow( "rot -45 a" ) << rotate(-45) - << QRect( 0, 0, 10, 10 ) - << QPolygon( QRect( -7, 0, 14, 14 ) ); - QTest::newRow( "rot -45 b" ) << rotate(-45) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -35, 21, 49, 49 ) ); - QTest::newRow( "rot -45 c" ) << rotScale(-45, 10) - << QRect( 0, 0, 10, 10 ) - << QPolygon( QRect( -70, 0, 141, 141 ) ); - QTest::newRow( "rot -45 d" ) << rotScale(-45, 10) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -353, 212, 495, 495 ) ); -#endif -} - -void tst_QWMatrix::mapRect() -{ - QFETCH( QMatrix, matrix ); - QFETCH( QRect, src ); -// qDebug( "got src: %d/%d (%d/%d), matrix=[ %f %f %f %f %f %f ]", -// src.x(), src.y(), src.width(), src.height(), -// matrix.m11(), matrix.m12(), matrix.m21(), matrix.m22(), matrix.dx(), matrix.dy() ); - QTEST( QPolygon( matrix.mapRect(src) ), "res" ); -} - -void tst_QWMatrix::operator_star_qwmatrix() -{ - QMatrix m1( 2, 3, 4, 5, 6, 7 ); - QMatrix m2( 3, 4, 5, 6, 7, 8 ); - - QMatrix result1x2( 21, 26, 37, 46, 60, 74 ); - QMatrix result2x1( 22, 29, 34, 45, 52, 68); - - QMatrix product12 = m1*m2; - QMatrix product21 = m2*m1; - - QVERIFY( product12==result1x2 ); - QVERIFY( product21==result2x1 ); -} - - -void tst_QWMatrix::assignments() -{ - QMatrix m; - m.scale(2, 3); - m.rotate(45); - m.shear(4, 5); - - QMatrix c1(m); - - QCOMPARE(m.m11(), c1.m11()); - QCOMPARE(m.m12(), c1.m12()); - QCOMPARE(m.m21(), c1.m21()); - QCOMPARE(m.m22(), c1.m22()); - QCOMPARE(m.dx(), c1.dx()); - QCOMPARE(m.dy(), c1.dy()); - - QMatrix c2 = m; - QCOMPARE(m.m11(), c2.m11()); - QCOMPARE(m.m12(), c2.m12()); - QCOMPARE(m.m21(), c2.m21()); - QCOMPARE(m.m22(), c2.m22()); - QCOMPARE(m.dx(), c2.dx()); - QCOMPARE(m.dy(), c2.dy()); -} - - -void tst_QWMatrix::mapToPolygon() -{ - QFETCH( QMatrix, matrix ); - QFETCH( QRect, src ); - QFETCH( QPolygon, res ); - - QCOMPARE( matrix.mapToPolygon( src ), res ); -} - - -void tst_QWMatrix::translate() -{ - QMatrix m( 1, 2, 3, 4, 5, 6 ); - QMatrix res2( m ); - QMatrix res( 1, 2, 3, 4, 75, 106 ); - m.translate( 10, 20 ); - QVERIFY( m == res ); - m.translate( -10, -20 ); - QVERIFY( m == res2 ); -} - -void tst_QWMatrix::scale() -{ - QMatrix m( 1, 2, 3, 4, 5, 6 ); - QMatrix res2( m ); - QMatrix res( 10, 20, 60, 80, 5, 6 ); - m.scale( 10, 20 ); - QVERIFY( m == res ); - m.scale( 1./10., 1./20. ); - QVERIFY( m == res2 ); -} - -void tst_QWMatrix::mapPolygon() -{ - QPolygon poly; - poly << QPoint(0, 0) << QPoint(1, 1) << QPoint(100, 1) << QPoint(1, 100) << QPoint(-1, -1) << QPoint(-1000, 1000); - - { - QMatrix m; - m.rotate(90); - - // rotating 90 degrees four times should result in original poly - QPolygon mapped = m.map(m.map(m.map(m.map(poly)))); - QCOMPARE(mapped, poly); - - QMatrix m2; - m2.scale(10, 10); - QMatrix m3; - m3.scale(0.1, 0.1); - - mapped = m3.map(m2.map(poly)); - QCOMPARE(mapped, poly); - } - - { - QMatrix m(1, 2, 3, 4, 5, 6); - - QPolygon mapped = m.map(poly); - for (int i = 0; i < mapped.size(); ++i) - QCOMPARE(mapped.at(i), m.map(poly.at(i))); - } -} - -QT_WARNING_POP -#endif - -QTEST_APPLESS_MAIN(tst_QWMatrix) -#include "tst_qwmatrix.moc" diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp index 4206ce1f87..dc6a8fc564 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp @@ -4496,19 +4496,6 @@ protected: break; case QGraphicsItem::ItemPositionHasChanged: break; -#if QT_DEPRECATED_SINCE(5, 14) - case QGraphicsItem::ItemMatrixChange: { -#if QT_DEPRECATED_SINCE(5, 13) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - QVariant variant; - variant.setValue(matrix()); - oldValues << variant; -QT_WARNING_POP -#endif - } - break; -#endif case QGraphicsItem::ItemTransformChange: { QVariant variant; variant.setValue(transform()); @@ -4626,32 +4613,7 @@ void tst_QGraphicsItem::itemChange() QCOMPARE(tester.oldValues.constLast(), QVariant(true)); QCOMPARE(tester.isEnabled(), true); } -#if QT_DEPRECATED_SINCE(5, 13) { -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED // QDesktopWidget::screen() - // ItemMatrixChange / ItemTransformHasChanged - tester.itemChangeReturnValue.setValue(QMatrix().rotate(90)); - tester.setMatrix(QMatrix().translate(50, 0), true); - ++changeCount; // notification sent too - QCOMPARE(tester.changes.size(), ++changeCount); - QCOMPARE(int(tester.changes.at(tester.changes.size() - 2)), int(QGraphicsItem::ItemMatrixChange)); - QCOMPARE(int(tester.changes.last()), int(QGraphicsItem::ItemTransformHasChanged)); - QCOMPARE(qvariant_cast(tester.values.at(tester.values.size() - 2)), - QMatrix().translate(50, 0)); - QCOMPARE(tester.values.constLast(), QVariant(QTransform(QMatrix().rotate(90)))); - QVariant variant; - variant.setValue(QMatrix()); - QCOMPARE(tester.oldValues.constLast(), variant); - QCOMPARE(tester.matrix(), QMatrix().rotate(90)); -QT_WARNING_POP - } -#endif - { - tester.resetTransform(); - ++changeCount; - ++changeCount; // notification sent too - // ItemTransformChange / ItemTransformHasChanged tester.itemChangeReturnValue.setValue(QTransform().rotate(90)); tester.setTransform(QTransform::fromTranslate(50, 0), true); @@ -8016,21 +7978,10 @@ public: //Doesn't use the extended style option so the exposed rect is the boundingRect if (!(flags() & QGraphicsItem::ItemUsesExtendedStyleOption)) { QCOMPARE(option->exposedRect, boundingRect()); -#if QT_DEPRECATED_SINCE(5, 13) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - QCOMPARE(option->matrix, QMatrix()); -QT_WARNING_POP -#endif } else { QVERIFY(option->exposedRect != QRect()); QVERIFY(option->exposedRect != boundingRect()); -#if QT_DEPRECATED_SINCE(5, 13) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - QCOMPARE(option->matrix, sceneTransform().toAffine()); -QT_WARNING_POP -#endif + QCOMPARE(option->matrix, sceneTransform()); } } QGraphicsRectItem::paint(painter, option, widget); diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp index 98833776cc..769836ff62 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp @@ -2125,8 +2125,8 @@ void tst_QGraphicsView::mapFromScenePath() QPainterPath path2; path2.addPolygon(polygon2); - QPolygonF pathPoly = view.mapFromScene(path).toFillPolygon(QTransform()); - QPolygonF path2Poly = path2.toFillPolygon(QTransform()); + QPolygonF pathPoly = view.mapFromScene(path).toFillPolygon(); + QPolygonF path2Poly = path2.toFillPolygon(); for (int i = 0; i < pathPoly.size(); ++i) { QVERIFY(qAbs(pathPoly[i].x() - path2Poly[i].x()) < 3); diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview_2.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview_2.cpp index 9550655868..bd470dbcfc 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview_2.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview_2.cpp @@ -39,7 +39,6 @@ Q_DECLARE_METATYPE(ExpectedValueDescription) Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QList) -Q_DECLARE_METATYPE(QMatrix) Q_DECLARE_METATYPE(QPainterPath) Q_DECLARE_METATYPE(Qt::ScrollBarPolicy) Q_DECLARE_METATYPE(ScrollBarCount)