Merge "Merge remote-tracking branch 'origin/5.15' into dev"

This commit is contained in:
Simon Hausmann 2020-01-28 18:27:28 +01:00
commit 4cbadf6998
119 changed files with 9756 additions and 340 deletions

View File

@ -67,7 +67,7 @@ Window::Window(QWidget *parent)
connect(m_ui.easingCurvePicker, &QListWidget::currentRowChanged,
this, &Window::curveChanged);
connect(m_ui.buttonGroup, QOverload<int>::of(&QButtonGroup::buttonClicked),
connect(m_ui.buttonGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
this, &Window::pathChanged);
connect(m_ui.periodSpinBox, QOverload<double>::of(&QDoubleSpinBox::valueChanged),
this, &Window::periodChanged);
@ -180,9 +180,10 @@ void Window::curveChanged(int row)
m_ui.overshootSpinBox->setEnabled(curveType >= QEasingCurve::InBack && curveType <= QEasingCurve::OutInBack);
}
void Window::pathChanged(int index)
void Window::pathChanged(QAbstractButton *button)
{
m_anim->setPathType((Animation::PathType)index);
const int index = m_ui.buttonGroup->id(button);
m_anim->setPathType(Animation::PathType(index));
}
void Window::periodChanged(double value)

View File

@ -69,7 +69,7 @@ public:
Window(QWidget *parent = nullptr);
private slots:
void curveChanged(int row);
void pathChanged(int index);
void pathChanged(QAbstractButton *button);
void periodChanged(double);
void amplitudeChanged(double);
void overshootChanged(double);

View File

@ -220,11 +220,11 @@ void View::setupMatrix()
{
qreal scale = qPow(qreal(2), (zoomSlider->value() - 250) / qreal(50));
QMatrix matrix;
QTransform matrix;
matrix.scale(scale, scale);
matrix.rotate(rotateSlider->value());
graphicsView->setMatrix(matrix);
graphicsView->setTransform(matrix);
setResetButtonEnabled();
}

View File

@ -113,13 +113,14 @@ void MainWindow::backgroundButtonGroupClicked(QAbstractButton *button)
//! [1]
//! [2]
void MainWindow::buttonGroupClicked(int id)
void MainWindow::buttonGroupClicked(QAbstractButton *button)
{
const QList<QAbstractButton *> buttons = buttonGroup->buttons();
for (QAbstractButton *button : buttons) {
if (buttonGroup->button(id) != button)
for (QAbstractButton *myButton : buttons) {
if (myButton != button)
button->setChecked(false);
}
const int id = buttonGroup->id(button);
if (id == InsertTextButton) {
scene->setMode(DiagramScene::InsertText);
} else {
@ -154,7 +155,7 @@ void MainWindow::deleteItem()
//! [3]
//! [4]
void MainWindow::pointerGroupClicked(int)
void MainWindow::pointerGroupClicked()
{
scene->setMode(DiagramScene::Mode(pointerTypeGroup->checkedId()));
}
@ -231,8 +232,8 @@ void MainWindow::fontSizeChanged(const QString &)
void MainWindow::sceneScaleChanged(const QString &scale)
{
double newScale = scale.left(scale.indexOf(tr("%"))).toDouble() / 100.0;
QMatrix oldMatrix = view->matrix();
view->resetMatrix();
QTransform oldMatrix = view->transform();
view->resetTransform();
view->translate(oldMatrix.dx(), oldMatrix.dy());
view->scale(newScale, newScale);
}
@ -334,7 +335,7 @@ void MainWindow::createToolBox()
{
buttonGroup = new QButtonGroup(this);
buttonGroup->setExclusive(false);
connect(buttonGroup, QOverload<int>::of(&QButtonGroup::buttonClicked),
connect(buttonGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
this, &MainWindow::buttonGroupClicked);
QGridLayout *layout = new QGridLayout;
layout->addWidget(createCellWidget(tr("Conditional"), DiagramItem::Conditional), 0, 0);
@ -528,7 +529,7 @@ void MainWindow::createToolbars()
pointerTypeGroup = new QButtonGroup(this);
pointerTypeGroup->addButton(pointerButton, int(DiagramScene::MoveItem));
pointerTypeGroup->addButton(linePointerButton, int(DiagramScene::InsertLine));
connect(pointerTypeGroup, QOverload<int>::of(&QButtonGroup::buttonClicked),
connect(pointerTypeGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
this, &MainWindow::pointerGroupClicked);
sceneScaleCombo = new QComboBox;

View File

@ -82,9 +82,9 @@ public:
private slots:
void backgroundButtonGroupClicked(QAbstractButton *button);
void buttonGroupClicked(int id);
void buttonGroupClicked(QAbstractButton *button);
void deleteItem();
void pointerGroupClicked(int id);
void pointerGroupClicked();
void bringToFront();
void sendToBack();
void itemInserted(DiagramItem *item);

View File

@ -223,7 +223,7 @@ void XFormView::setRotation(qreal r)
m_rotation = r;
QPointF center(pts->points().at(0));
QMatrix m;
QTransform m;
m.translate(center.x(), center.y());
m.rotate(m_rotation - old_rot);
m.translate(-center.x(), -center.y());
@ -236,7 +236,7 @@ void XFormView::timerEvent(QTimerEvent *e)
{
if (e->timerId() == timer.timerId()) {
QPointF center(pts->points().at(0));
QMatrix m;
QTransform m;
m.translate(center.x(), center.y());
m.rotate(0.2);
m.translate(-center.x(), -center.y());

View File

@ -374,7 +374,7 @@ void PathDeformRenderer::setText(const QString &text)
}
for (int i=0; i<m_paths.size(); ++i)
m_paths[i] = m_paths[i] * QMatrix(1, 0, 0, 1, -m_pathBounds.x(), -m_pathBounds.y());
m_paths[i] = m_paths[i] * QTransform(1, 0, 0, 1, -m_pathBounds.x(), -m_pathBounds.y());
update();
}

View File

@ -511,10 +511,10 @@ void PathStrokeRenderer::initializePoints()
m_points.clear();
m_vectors.clear();
QMatrix m;
QTransform m;
qreal rot = 360.0 / count;
QPointF center(width() / 2, height() / 2);
QMatrix vm;
QTransform vm;
vm.shear(2, -1);
vm.scale(3, 3);

View File

@ -212,21 +212,17 @@ contains(CONFIG, plugin) {
CMAKE_PLUGIN_TYPE_ESCAPED = $$replace(PLUGIN_TYPE, [-/], _)
win32 {
CMAKE_PRL_FILE_LOCATION_RELEASE = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}.prl
CMAKE_PRL_FILE_LOCATION_DEBUG = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}d.prl
isEmpty(CMAKE_STATIC_TYPE) {
CMAKE_PLUGIN_LOCATION_RELEASE = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}.dll
CMAKE_PLUGIN_LOCATION_DEBUG = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}d.dll
CMAKE_PRL_FILE_LOCATION_RELEASE = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}.prl
CMAKE_PRL_FILE_LOCATION_DEBUG = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}d.prl
} else:mingw {
CMAKE_PLUGIN_LOCATION_RELEASE = $$PLUGIN_TYPE/lib$${CMAKE_QT_STEM}.a
CMAKE_PLUGIN_LOCATION_DEBUG = $$PLUGIN_TYPE/lib$${CMAKE_QT_STEM}d.a
CMAKE_PRL_FILE_LOCATION_RELEASE = $$PLUGIN_TYPE/lib$${CMAKE_QT_STEM}.prl
CMAKE_PRL_FILE_LOCATION_DEBUG = $$PLUGIN_TYPE/lib$${CMAKE_QT_STEM}d.prl
} else { # MSVC static
CMAKE_PLUGIN_LOCATION_RELEASE = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}.lib
CMAKE_PLUGIN_LOCATION_DEBUG = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}d.lib
CMAKE_PRL_FILE_LOCATION_RELEASE = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}.prl
CMAKE_PRL_FILE_LOCATION_DEBUG = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}d.prl
}
} else {
mac {
@ -320,36 +316,25 @@ mac {
CMAKE_LIB_FILE_LOCATION_DEBUG = $${CMAKE_QT_STEM}d.dll
CMAKE_LIB_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.dll
!isEmpty(CMAKE_STATIC_TYPE) {
CMAKE_STATIC_WINDOWS_BUILD = "true"
CMAKE_PRL_FILE_LOCATION_DEBUG = $${CMAKE_QT_STEM}d.prl
CMAKE_PRL_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.prl
}
mingw {
CMAKE_WINMAIN_FILE_LOCATION_DEBUG = libqtmain$${QT_LIBINFIX}d.a
CMAKE_WINMAIN_FILE_LOCATION_RELEASE = libqtmain$${QT_LIBINFIX}.a
!isEmpty(CMAKE_STATIC_TYPE) {
CMAKE_STATIC_WINDOWS_BUILD = "true"
CMAKE_IMPLIB_FILE_LOCATION_DEBUG = lib$${CMAKE_QT_STEM}d.a
CMAKE_IMPLIB_FILE_LOCATION_RELEASE = lib$${CMAKE_QT_STEM}.a
CMAKE_PRL_FILE_LOCATION_DEBUG = lib$${CMAKE_QT_STEM}d.prl
CMAKE_PRL_FILE_LOCATION_RELEASE = lib$${CMAKE_QT_STEM}.prl
} else {
CMAKE_IMPLIB_FILE_LOCATION_DEBUG = lib$${CMAKE_QT_STEM}d.a
CMAKE_IMPLIB_FILE_LOCATION_RELEASE = lib$${CMAKE_QT_STEM}.a
}
CMAKE_IMPLIB_FILE_LOCATION_DEBUG = lib$${CMAKE_QT_STEM}d.a
CMAKE_IMPLIB_FILE_LOCATION_RELEASE = lib$${CMAKE_QT_STEM}.a
} else {
CMAKE_WINMAIN_FILE_LOCATION_DEBUG = qtmain$${QT_LIBINFIX}d.lib
CMAKE_WINMAIN_FILE_LOCATION_RELEASE = qtmain$${QT_LIBINFIX}.lib
!isEmpty(CMAKE_STATIC_TYPE) {
CMAKE_STATIC_WINDOWS_BUILD = "true"
CMAKE_IMPLIB_FILE_LOCATION_DEBUG = $${CMAKE_QT_STEM}d.lib
CMAKE_IMPLIB_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.lib
CMAKE_PRL_FILE_LOCATION_DEBUG = $${CMAKE_QT_STEM}d.prl
CMAKE_PRL_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.prl
} else {
CMAKE_IMPLIB_FILE_LOCATION_DEBUG = $${CMAKE_QT_STEM}d.lib
CMAKE_IMPLIB_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.lib
}
CMAKE_IMPLIB_FILE_LOCATION_DEBUG = $${CMAKE_QT_STEM}d.lib
CMAKE_IMPLIB_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.lib
}
} else {
!isEmpty(CMAKE_STATIC_TYPE) {

View File

@ -64,11 +64,13 @@ debug {
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_DEBUG
QMAKE_LFLAGS += $$QMAKE_LFLAGS_DEBUG
QMAKE_LIBFLAGS += $$QMAKE_LIBFLAGS_DEBUG
DEFINES += $$DEFINES_DEBUG
} else {
QMAKE_CFLAGS += $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_RELEASE
QMAKE_LFLAGS += $$QMAKE_LFLAGS_RELEASE
QMAKE_LIBFLAGS += $$QMAKE_LIBFLAGS_RELEASE
DEFINES += $$DEFINES_RELEASE
}
stack_protector_strong {

View File

@ -26,10 +26,4 @@ CONFIG = \
unset(today)
}
CONFIG(debug, debug|release) {
DEFINES += $$DEFINES_DEBUG
} else {
DEFINES += $$DEFINES_RELEASE
}
load(toolchain)

View File

@ -23,7 +23,6 @@ qtConfig(c11): CONFIG += c11
qtConfig(stack-protector-strong): CONFIG += stack_protector_strong
contains(TEMPLATE, .*lib) {
# module and plugins
if(!host_build|!cross_compile):qtConfig(reduce_exports): CONFIG += hide_symbols
unix:qtConfig(reduce_relocations): CONFIG += bsymbolic_functions
qtConfig(separate_debug_info): CONFIG += separate_debug_info
@ -58,6 +57,9 @@ contains(TEMPLATE, .*lib) {
QMAKE_PRL_INSTALL_REPLACE += qtlibdir_replace
}
}
contains(TEMPLATE, .*lib)|darwin {
if(!host_build|!cross_compile):qtConfig(reduce_exports): CONFIG += hide_symbols
}
# The remainder of this file must not apply to host tools/libraries,
# as the host compiler's version and capabilities are not checked.

View File

@ -36,6 +36,7 @@ EMCC_COMMON_LFLAGS += \
-s USE_WEBGL2=1 \
-s NO_EXIT_RUNTIME=0 \
-s ERROR_ON_UNDEFINED_SYMBOLS=1 \
-s EXTRA_EXPORTED_RUNTIME_METHODS=[\"UTF16ToString\",\"stringToUTF16\"] \
--bind
# The -s arguments can also be used with release builds,

View File

@ -1168,7 +1168,7 @@
\section1 DEFINES_DEBUG
Specifies preprocessor defines for the debug configuration. The values of
this variable get added to \l{DEFINES} before the project is loaded. This
this variable get added to \l{DEFINES} after the project is loaded. This
variable is typically set in \l{#QMAKESPEC}{qmake.conf} and rarely needs
to be modified.
@ -1178,10 +1178,13 @@
\section1 DEFINES_RELEASE
Specifies preprocessor defines for the release configuration. The values of
this variable get added to \l{DEFINES} before the project is loaded. This
this variable get added to \l{DEFINES} after the project is loaded. This
variable is typically set in \l{#QMAKESPEC}{qmake.conf} and rarely needs
to be modified.
\note For MSVC mkspecs, this variable contains the value \c NDEBUG by
default.
This variable was introduced in Qt 5.13.2.
\target DEF_FILE

View File

@ -534,8 +534,25 @@ static QString getRelocatablePrefix()
#if defined(QT_STATIC)
prefixPath = prefixFromAppDirHelper();
#elif defined(Q_OS_DARWIN) && QT_CONFIG(framework)
CFBundleRef qtCoreBundle = CFBundleGetBundleWithIdentifier(
CFSTR("org.qt-project.QtCore"));
auto qtCoreBundle = CFBundleGetBundleWithIdentifier(CFSTR("org.qt-project.QtCore"));
if (!qtCoreBundle) {
// When running Qt apps over Samba shares, CoreFoundation will fail to find
// the Resources directory inside the bundle, This directory is a symlink,
// and CF relies on readdir() and dtent.dt_type to detect symlinks, which
// does not work reliably for Samba shares. We work around it by manually
// looking for the QtCore bundle.
auto allBundles = CFBundleGetAllBundles();
auto bundleCount = CFArrayGetCount(allBundles);
for (int i = 0; i < bundleCount; ++i) {
auto bundle = CFBundleRef(CFArrayGetValueAtIndex(allBundles, i));
auto url = QCFType<CFURLRef>(CFBundleCopyBundleURL(bundle));
auto path = QCFType<CFStringRef>(CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle));
if (CFStringHasSuffix(path, CFSTR("/QtCore.framework"))) {
qtCoreBundle = bundle;
break;
}
}
}
Q_ASSERT(qtCoreBundle);
QCFType<CFURLRef> qtCorePath = CFBundleCopyBundleURL(qtCoreBundle);

View File

@ -1023,7 +1023,7 @@
\value WA_MacNoClickThrough This value is obsolete and has no effect.
\value WA_MacOpaqueSizeGrip Indicates that the native Carbon size grip
\value WA_MacOpaqueSizeGrip Indicates that the native size grip
should be opaque instead of transparent (the default). This attribute
is only applicable to \macos and is set by the widget's author.

View File

@ -50,6 +50,7 @@
#endif
#include <qstack.h>
#include <qbuffer.h>
#include <qscopeguard.h>
#ifndef QT_BOOTSTRAPPED
#include <qcoreapplication.h>
#else
@ -68,6 +69,8 @@ public: \
{ return QString::fromLatin1(sourceText); } \
private:
#endif
#include <private/qmemory_p.h>
QT_BEGIN_NAMESPACE
#include "qxmlstream_p.h"
@ -847,7 +850,7 @@ void QXmlStreamReaderPrivate::init()
#endif
attributeStack.clear();
attributeStack.reserve(16);
entityParser = nullptr;
entityParser.reset();
hasCheckedStartDocument = false;
normalizeLiterals = false;
hasSeenTag = false;
@ -880,7 +883,7 @@ void QXmlStreamReaderPrivate::parseEntity(const QString &value)
if (!entityParser)
entityParser = new QXmlStreamReaderPrivate(q);
entityParser = qt_make_unique<QXmlStreamReaderPrivate>(q);
else
entityParser->init();
entityParser->inParseEntity = true;
@ -910,7 +913,6 @@ QXmlStreamReaderPrivate::~QXmlStreamReaderPrivate()
#endif
free(sym_stack);
free(state_stack);
delete entityParser;
}
@ -1582,6 +1584,7 @@ QStringRef QXmlStreamReaderPrivate::namespaceForPrefix(const QStringRef &prefix)
*/
void QXmlStreamReaderPrivate::resolveTag()
{
const auto attributeStackCleaner = qScopeGuard([this](){ attributeStack.clear(); });
int n = attributeStack.size();
if (namespaceProcessing) {
@ -1649,7 +1652,10 @@ void QXmlStreamReaderPrivate::resolveTag()
if (attributes[j].name() == attribute.name()
&& attributes[j].namespaceUri() == attribute.namespaceUri()
&& (namespaceProcessing || attributes[j].qualifiedName() == attribute.qualifiedName()))
{
raiseWellFormedError(QXmlStream::tr("Attribute '%1' redefined.").arg(attribute.qualifiedName()));
return;
}
}
}
@ -1680,8 +1686,6 @@ void QXmlStreamReaderPrivate::resolveTag()
attribute.m_isDefault = true;
attributes.append(attribute);
}
attributeStack.clear();
}
void QXmlStreamReaderPrivate::resolvePublicNamespaces()

View File

@ -981,7 +981,7 @@ public:
QString resolveUndeclaredEntity(const QString &name);
void parseEntity(const QString &value);
QXmlStreamReaderPrivate *entityParser;
std::unique_ptr<QXmlStreamReaderPrivate> entityParser;
bool scanAfterLangleBang();
bool scanPublicOrSystem();

View File

@ -734,23 +734,23 @@ static void updateSystemPrivate()
globalLocaleData.m_script_id = res.toInt();
res = sys_locale->query(QSystemLocale::DecimalPoint, QVariant());
if (!res.isNull())
if (!res.isNull() && !res.toString().isEmpty())
globalLocaleData.m_decimal = res.toString().at(0).unicode();
res = sys_locale->query(QSystemLocale::GroupSeparator, QVariant());
if (!res.isNull())
if (!res.isNull() && !res.toString().isEmpty())
globalLocaleData.m_group = res.toString().at(0).unicode();
res = sys_locale->query(QSystemLocale::ZeroDigit, QVariant());
if (!res.isNull())
if (!res.isNull() && !res.toString().isEmpty())
globalLocaleData.m_zero = res.toString().at(0).unicode();
res = sys_locale->query(QSystemLocale::NegativeSign, QVariant());
if (!res.isNull())
if (!res.isNull() && !res.toString().isEmpty())
globalLocaleData.m_minus = res.toString().at(0).unicode();
res = sys_locale->query(QSystemLocale::PositiveSign, QVariant());
if (!res.isNull())
if (!res.isNull() && !res.toString().isEmpty())
globalLocaleData.m_plus = res.toString().at(0).unicode();
}
#endif // !QT_NO_SYSTEMLOCALE
@ -4463,6 +4463,8 @@ QStringList QLocale::uiLanguages() const
for (const auto entry : qAsConst(uiLanguages))
locales.append(QLocale(entry));
}
if (locales.isEmpty())
locales.append(systemLocale()->fallbackUiLocale());
} else
#endif
{

View File

@ -48,7 +48,7 @@ SOURCES += \
NO_PCH_SOURCES += text/qstring_compat.cpp
false: SOURCES += $$NO_PCH_SOURCES # Hack for QtCreator
!nacl:macos: {
!nacl:darwin: {
SOURCES += text/qlocale_mac.mm
}
else:unix {

View File

@ -93,9 +93,9 @@ painter2->begin(myWidget); // impossible - only one painter at a time
//! [4]
void QPainter::rotate(qreal angle)
{
QMatrix matrix;
QTransform matrix;
matrix.rotate(angle);
setWorldMatrix(matrix, true);
setWorldTransform(matrix, true);
}
//! [4]

View File

@ -1269,6 +1269,55 @@
\row \li \c word-spacing
\li <width>px
\li Specifies an alternate spacing between each word.
\row \li \c line-height
\li <number>[% | px | pt | cm]
\li Specifies the height of a line. It can be one of the
following:
\list
\li fixed line height in pixels, points, or centimeters.
\li a percentage of the current font size.
\endlist
\endtable
\section1 Qt-specific CSS properties
Besides the standard CSS properties listed earlier, the following
Qt-specific properties can also be used to style a text block:
\table
\header \li Property
\li Values
\li Description
\row
\li \c -qt-block-indent
\li \c <number>
\li Indents the text block by the specified no. spaces.
\row
\li \c -qt-list-indent
\li \c <number>
\li Indents the list items by the specified no. of spaces.
\row
\li \c -qt-list-number-prefix
\li \c <string>
\li Prefixes the given string to list number in an HTML ordered list.
\row
\li \c -qt-list-number-suffix
\li <string>
\li Suffixes the given string to list number in an HTML ordered list.
\row
\li \c -qt-paragraph-type
\li \c empty
\li Hides the text block.
\row
\li \c -qt-table-type
\li \c{root | frame}
\li \c root renders the text blocks inline without borders and
indentation, whereas \c frame renders them on a new line
with a frame around.
\row
\li \c -qt-user-state
\li \c <number>
\li Adds it as user data for the text block.
\endtable
\section1 Supported CSS Selectors

View File

@ -2847,7 +2847,13 @@ QImage QImage::scaledToHeight(int h, Qt::TransformationMode mode) const
}
#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
@ -2869,6 +2875,10 @@ QMatrix QImage::trueMatrix(const QMatrix &matrix, int w, int h)
}
/*!
\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.
@ -2893,6 +2903,8 @@ QImage QImage::transformed(const QMatrix &matrix, Qt::TransformationMode mode) c
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

View File

@ -241,8 +241,12 @@ 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 &

View File

@ -438,7 +438,7 @@ QImage QPixmap::toImage() const
}
/*!
\fn QMatrix QPixmap::trueMatrix(const QTransform &matrix, int width, int height)
\fn QTransform QPixmap::trueMatrix(const QTransform &matrix, int width, int height)
Returns the actual matrix used for transforming a pixmap with the
given \a width, \a height and \a matrix.
@ -458,8 +458,12 @@ 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
@ -469,6 +473,7 @@ QMatrix QPixmap::trueMatrix(const QMatrix &m, int w, int h)
{
return trueMatrix(QTransform(m), w, h).toAffine();
}
#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
@ -1233,8 +1238,12 @@ 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.
@ -1243,6 +1252,7 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode)
{
return transformed(QTransform(matrix), mode);
}
#endif // QT_DEPRECATED_SINCE(5, 15)

View File

@ -129,8 +129,12 @@ 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);

View File

@ -916,6 +916,9 @@ bool QPNGImageWriter::writeImage(const QImage& image, int compression_in, const
}
png_set_error_fn(png_ptr, nullptr, nullptr, qt_png_warning);
#ifdef PNG_BENIGN_ERRORS_SUPPORTED
png_set_benign_errors(png_ptr, 1);
#endif
info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) {

View File

@ -1150,8 +1150,8 @@ QKeyEvent::~QKeyEvent()
Note: The native scan code may be 0, even if the key event contains
extended information.
Note: On Mac OS/X, this function is not useful, because there is no
way to get the scan code from Carbon or Cocoa. The function always
Note: On \macos, this function is not useful, because there is no
way to get the scan code from the system APIs. The function always
returns 1 (or 0 in the case explained above).
*/

View File

@ -49,7 +49,6 @@
# include "qkeysequence.h"
#endif
#include "qtransform.h"
#include "qmatrix.h"
#include "qpalette.h"
#include "qpen.h"
#include "qpixmap.h"

View File

@ -187,7 +187,10 @@ 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.
@ -218,6 +221,7 @@ QMatrix4x4::QMatrix4x4(const QMatrix& matrix)
m[3][3] = 1.0f;
flagBits = Translation | Scale | Rotation2D;
}
#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
Constructs a 4x4 matrix from the conventional Qt 2D
@ -1659,7 +1663,12 @@ 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.
@ -1672,6 +1681,7 @@ QMatrix QMatrix4x4::toAffine() const
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

View File

@ -72,7 +72,9 @@ 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);
@ -156,7 +158,9 @@ public:
void copyDataTo(float *values) const;
QMatrix toAffine() 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;

View File

@ -893,8 +893,12 @@ bool QBrush::isOpaque() const
}
#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
@ -906,6 +910,7 @@ void QBrush::setMatrix(const QMatrix &matrix)
{
setTransform(QTransform(matrix));
}
#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
\since 4.3
@ -923,14 +928,19 @@ void QBrush::setTransform(const QTransform &matrix)
}
#if QT_DEPRECATED_SINCE(5, 15)
/*!
\fn void QBrush::matrix() const
\since 4.2
\obsolete
Use transform() instead.
Returns the current transformation matrix for the brush.
\sa setMatrix()
*/
#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
\fn bool QBrush::operator!=(const QBrush &brush) const

View File

@ -89,8 +89,10 @@ public:
inline Qt::BrushStyle style() const;
void setStyle(Qt::BrushStyle);
inline const QMatrix &matrix() const;
void setMatrix(const QMatrix &mat);
#if QT_DEPRECATED_SINCE(5, 15)
QT_DEPRECATED_X("Use transform()") inline const 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 &);
@ -157,7 +159,10 @@ 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 const 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; }

View File

@ -45,6 +45,7 @@
#include "qregion.h"
#include "qpainterpath.h"
#include "qpainterpath_p.h"
#include "qtransform.h"
#include "qvariant.h"
#include <qmath.h>
@ -680,7 +681,7 @@ QRegion QMatrix::map(const QRegion &r) const
}
QPainterPath p = map(qt_regionToPath(r));
return p.toFillPolygon().toPolygon();
return p.toFillPolygon(QTransform()).toPolygon();
}
/*!

View File

@ -508,7 +508,7 @@ void QPaintEngine::drawEllipse(const QRectF &rect)
if (hasFeature(PainterPaths)) {
drawPath(path);
} else {
QPolygonF polygon = path.toFillPolygon();
QPolygonF polygon = path.toFillPolygon(QTransform());
drawPolygon(polygon.data(), polygon.size(), ConvexMode);
}
}

View File

@ -273,7 +273,9 @@ public:
QBrush backgroundBrush() const;
Qt::BGMode backgroundMode() const;
QFont font() const;
QMatrix matrix() 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;

View File

@ -2555,19 +2555,19 @@ QRegion QPainter::clipRegion() const
case QPainterClipInfo::PathClip: {
QTransform matrix = (info.matrix * d->invMatrix);
if (lastWasNothing) {
region = QRegion((info.path * matrix).toFillPolygon().toPolygon(),
region = QRegion((info.path * matrix).toFillPolygon(QTransform()).toPolygon(),
info.path.fillRule());
lastWasNothing = false;
continue;
}
if (info.operation == Qt::IntersectClip) {
region &= QRegion((info.path * matrix).toFillPolygon().toPolygon(),
region &= QRegion((info.path * matrix).toFillPolygon(QTransform()).toPolygon(),
info.path.fillRule());
} else if (info.operation == Qt::NoClip) {
lastWasNothing = true;
region = QRegion();
} else {
region = QRegion((info.path * matrix).toFillPolygon().toPolygon(),
region = QRegion((info.path * matrix).toFillPolygon(QTransform()).toPolygon(),
info.path.fillRule());
}
break;
@ -8089,6 +8089,8 @@ QFont QPaintEngineState::font() const
\since 4.2
\obsolete
Use transform() instead.
Returns the matrix in the current paint engine
state.

View File

@ -72,7 +72,6 @@ class QPen;
class QPolygon;
class QTextItem;
class QTextEngine;
class QMatrix;
class QTransform;
class QStaticText;
class QGlyphRun;

View File

@ -59,7 +59,6 @@
#include "QtGui/qfont.h"
#include "QtGui/qpen.h"
#include "QtGui/qregion.h"
#include "QtGui/qmatrix.h"
#include "QtGui/qpainter.h"
#include "QtGui/qpainterpath.h"
#include "QtGui/qpaintengine.h"

View File

@ -1660,13 +1660,18 @@ QList<QPolygonF> QPainterPath::toSubpathPolygons(const QTransform &matrix) const
return flatCurves;
}
#if QT_DEPRECATED_SINCE(5, 15)
/*!
\overload
\obsolete
Use toSubpathPolygons(const QTransform &matrix) instead.
*/
QList<QPolygonF> QPainterPath::toSubpathPolygons(const QMatrix &matrix) const
{
return toSubpathPolygons(QTransform(matrix));
}
#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
Converts the path into a list of polygons using the
@ -1787,13 +1792,18 @@ QList<QPolygonF> QPainterPath::toFillPolygons(const QTransform &matrix) const
return polys;
}
#if QT_DEPRECATED_SINCE(5, 15)
/*!
\overload
\obsolete
Use toFillPolygons(const QTransform &matrix) instead.
*/
QList<QPolygonF> 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,
@ -2904,14 +2914,18 @@ 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)

View File

@ -175,9 +175,15 @@ public:
bool isEmpty() const;
Q_REQUIRED_RESULT QPainterPath toReversed() const;
#if QT_DEPRECATED_SINCE(5, 15)
QT_DEPRECATED_X("Use toSubpathPolygons(const QTransform &)")
QList<QPolygonF> toSubpathPolygons(const QMatrix &matrix = QMatrix()) const;
QT_DEPRECATED_X("Use toFillPolygons(const QTransform &")
QList<QPolygonF> 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<QPolygonF> toSubpathPolygons(const QTransform &matrix) const;
QList<QPolygonF> toFillPolygons(const QTransform &matrix) const;
QPolygonF toFillPolygon(const QTransform &matrix) const;

View File

@ -55,7 +55,6 @@
#ifndef QT_NO_PDF
#include "QtGui/qmatrix.h"
#include "QtCore/qstring.h"
#include "QtCore/qvector.h"
#include "private/qstroker_p.h"

View File

@ -40,9 +40,9 @@
#include "qpolygon.h"
#include "qrect.h"
#include "qdatastream.h"
#include "qmatrix.h"
#include "qdebug.h"
#include "qpainterpath.h"
#include "qtransform.h"
#include "qvariant.h"
#include "qpainterpath_p.h"
#include "qbezier_p.h"
@ -111,7 +111,7 @@ static void qt_polygon_isect_line(const QPointF &p1, const QPointF &p2, const QP
from a specified index (resizing the polygon if necessary).
QPolygon provides the boundingRect() and translate() functions for
geometry functions. Use the QMatrix::map() function for more
geometry functions. Use the QTransform::map() function for more
general transformations of QPolygons.
The QPolygon class is \l {Implicit Data Sharing}{implicitly
@ -495,7 +495,7 @@ QDebug operator<<(QDebug dbg, const QPolygon &a)
In addition to the functions provided by QVector, QPolygonF
provides the boundingRect() and translate() functions for geometry
operations. Use the QMatrix::map() function for more general
operations. Use the QTransform::map() function for more general
transformations of QPolygonFs.
QPolygonF also provides the isClosed() function to determine
@ -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().toPolygon();
return subject.united(clip).toFillPolygon(QTransform()).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().toPolygon();
return subject.intersected(clip).toFillPolygon(QTransform()).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().toPolygon();
return subject.subtracted(clip).toFillPolygon(QTransform()).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();
return subject.united(clip).toFillPolygon(QTransform());
}
/*!
@ -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();
return subject.intersected(clip).toFillPolygon(QTransform());
}
/*!
@ -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();
return subject.subtracted(clip).toFillPolygon(QTransform());
}
/*!

View File

@ -46,6 +46,7 @@
#include "qvarlengtharray.h"
#include "qimage.h"
#include "qbitmap.h"
#include "qtransform.h"
#include <private/qdebug_p.h>
@ -3916,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().at(0).toPolygon();
QPolygon a = path.toSubpathPolygons(QTransform()).at(0).toPolygon();
d->qt_rgn = PolygonRegion(a.constData(), a.size(), EvenOddRule);
}
}

View File

@ -311,8 +311,10 @@ 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,
@ -328,6 +330,7 @@ QTransform::QTransform(const QMatrix &mtx)
#endif
{
}
#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
Returns the adjoint of this matrix.
@ -2082,7 +2085,9 @@ 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,
@ -2092,6 +2097,7 @@ const QMatrix &QTransform::toAffine() const
{
return affine;
}
#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
Returns the transformation type of this matrix.

View File

@ -73,7 +73,9 @@ 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!
@ -158,7 +160,9 @@ 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)
const QMatrix &toAffine() const;
#endif // QT_DEPRECATED_SINCE(5, 15)
QTransform &operator*=(qreal div);
QTransform &operator/=(qreal div);

View File

@ -900,7 +900,7 @@ Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/)
uenv.venv = nullptr;
m_javaVM = nullptr;
if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK) {
if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_6) != JNI_OK) {
__android_log_print(ANDROID_LOG_FATAL, "Qt", "GetEnv failed");
return -1;
}
@ -922,5 +922,5 @@ Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/)
if (threadSetter.thread())
threadSetter.thread()->setObjectName("QtMainLoopThread");
__android_log_print(ANDROID_LOG_INFO, "Qt", "qt started");
return JNI_VERSION_1_4;
return JNI_VERSION_1_6;
}

View File

@ -29,6 +29,7 @@
#include "qwasmclipboard.h"
#include "qwasmwindow.h"
#include "qwasmstring.h"
#include <emscripten.h>
#include <emscripten/html5.h>
@ -40,22 +41,22 @@
using namespace emscripten;
// there has got to be a better way...
static QByteArray g_clipboardArray;
static QByteArray g_clipboardFormat;
static QString g_clipboardText;
static QString g_clipboardFormat;
static val getClipboardData()
{
return val(g_clipboardArray.constData());
return QWasmString::fromQString(g_clipboardText);
}
static val getClipboardFormat()
{
return val(g_clipboardFormat.constData());
return QWasmString::fromQString(g_clipboardFormat);
}
static void pasteClipboardData(emscripten::val format, emscripten::val dataPtr)
{
QString formatString = QString::fromStdString(format.as<std::string>());
QString formatString = QWasmString::toQString(format);
QByteArray dataArray = QByteArray::fromStdString(dataPtr.as<std::string>());
QMimeData *mMimeData = new QMimeData;
mMimeData->setData(formatString, dataArray);
@ -102,11 +103,10 @@ static void qClipboardPasteTo(val event)
bool hasClipboardApi = QWasmIntegration::get()->getWasmClipboard()->hasClipboardApi;
val clipdata = hasClipboardApi ?
val::global("Module").call<val>("qtGetClipboardData") :
event["clipboardData"].call<val>("getData", std::string("text"));
event["clipboardData"].call<val>("getData", val("text"));
const std::string data = clipdata.as<std::string>();
if (data.length() > 0) {
QString qstr = QString::fromStdString(data);
const QString qstr = QWasmString::toQString(clipdata);
if (qstr.length() > 0) {
QMimeData *mMimeData = new QMimeData;
mMimeData->setText(qstr);
QWasmClipboard::qWasmClipboardPaste(mMimeData);
@ -133,7 +133,7 @@ QWasmClipboard::QWasmClipboard()
QWasmClipboard::~QWasmClipboard()
{
g_clipboardArray.clear();
g_clipboardText.clear();
g_clipboardFormat.clear();
}
@ -148,11 +148,11 @@ QMimeData* QWasmClipboard::mimeData(QClipboard::Mode mode)
void QWasmClipboard::setMimeData(QMimeData* mimeData, QClipboard::Mode mode)
{
if (mimeData->hasText()) {
g_clipboardFormat = mimeData->formats().at(0).toUtf8();
g_clipboardArray = mimeData->text().toUtf8();
g_clipboardFormat = mimeData->formats().at(0);
g_clipboardText = mimeData->text();
} else if (mimeData->hasHtml()) {
g_clipboardFormat =mimeData->formats().at(0).toUtf8();
g_clipboardArray = mimeData->html().toUtf8();
g_clipboardFormat = mimeData->formats().at(0);
g_clipboardText = mimeData->html();
}
QPlatformClipboard::setMimeData(mimeData, mode);
@ -199,13 +199,13 @@ void QWasmClipboard::installEventHandlers(const QString &canvasId)
// Fallback path for browsers which do not support direct clipboard access
val document = val::global("document");
val canvas = document.call<val>("getElementById", val(canvasId.toUtf8().constData()));
val canvas = document.call<val>("getElementById", QWasmString::fromQString(canvasId));
canvas.call<void>("addEventListener", std::string("cut"),
canvas.call<void>("addEventListener", val("cut"),
val::module_property("qtClipboardCutTo"));
canvas.call<void>("addEventListener", std::string("copy"),
canvas.call<void>("addEventListener", val("copy"),
val::module_property("qtClipboardCopyTo"));
canvas.call<void>("addEventListener", std::string("paste"),
canvas.call<void>("addEventListener", val("paste"),
val::module_property("qtClipboardPasteTo"));
}
@ -226,6 +226,6 @@ void QWasmClipboard::writeTextToClipboard()
val txt = module.call<val>("qtGetClipboardData");
val format = module.call<val>("qtGetClipboardFormat");
val navigator = val::global("navigator");
navigator["clipboard"].call<void>("writeText", txt.as<std::string>());
navigator["clipboard"].call<void>("writeText", txt);
}
}

View File

@ -29,6 +29,7 @@
#include "qwasmcursor.h"
#include "qwasmscreen.h"
#include "qwasmstring.h"
#include <QtCore/qdebug.h>
#include <QtGui/qwindow.h>
@ -56,11 +57,11 @@ void QWasmCursor::changeCursor(QCursor *windowCursor, QWindow *window)
htmlCursorName = "auto";
// Set cursor on the canvas
QByteArray canvasId = QWasmScreen::get(screen)->canvasId().toUtf8();
val jsCanvasId = QWasmString::fromQString(QWasmScreen::get(screen)->canvasId());
val document = val::global("document");
val canvas = document.call<val>("getElementById", val(canvasId.constData()));
val canvas = document.call<val>("getElementById", jsCanvasId);
val canvasStyle = canvas["style"];
canvasStyle.set("cursor", emscripten::val(htmlCursorName.constData()));
canvasStyle.set("cursor", val(htmlCursorName.constData()));
}
QByteArray QWasmCursor::cursorShapeToHtml(Qt::CursorShape shape)

View File

@ -32,6 +32,7 @@
#include "qwasmcompositor.h"
#include "qwasmintegration.h"
#include "qwasmclipboard.h"
#include "qwasmstring.h"
#include <QtGui/qevent.h>
#include <qpa/qwindowsysteminterface.h>
@ -355,9 +356,10 @@ void QWasmEventTranslator::initEventHandlers()
if (emscripten::val::global("window")["safari"].isUndefined()) {
val document = val::global("document");
val canvas = document.call<val>("getElementById", val(canvasId));
val jsCanvasId = QWasmString::fromQString(screen()->canvasId());
val canvas = document.call<val>("getElementById", jsCanvasId);
canvas.call<void>("addEventListener",
std::string("wheel"),
val("wheel"),
val::module_property("qtMouseWheelEvent"));
}
}

View File

@ -36,6 +36,7 @@
#include "qwasmclipboard.h"
#include "qwasmservices.h"
#include "qwasmoffscreensurface.h"
#include "qwasmstring.h"
#include "qwasmwindow.h"
#ifndef QT_NO_OPENGL
@ -67,19 +68,19 @@ static void browserBeforeUnload(emscripten::val)
static void addCanvasElement(emscripten::val canvas)
{
QString canvasId = QString::fromStdString(canvas["id"].as<std::string>());
QString canvasId = QWasmString::toQString(canvas["id"]);
QWasmIntegration::get()->addScreen(canvasId);
}
static void removeCanvasElement(emscripten::val canvas)
{
QString canvasId = QString::fromStdString(canvas["id"].as<std::string>());
QString canvasId = QWasmString::toQString(canvas["id"]);
QWasmIntegration::get()->removeScreen(canvasId);
}
static void resizeCanvasElement(emscripten::val canvas)
{
QString canvasId = QString::fromStdString(canvas["id"].as<std::string>());
QString canvasId = QWasmString::toQString(canvas["id"]);
QWasmIntegration::get()->resizeScreen(canvasId);
}
@ -115,11 +116,11 @@ QWasmIntegration::QWasmIntegration()
int screenCount = qtCanvaseElements["length"].as<int>();
for (int i = 0; i < screenCount; ++i) {
emscripten::val canvas = qtCanvaseElements[i].as<emscripten::val>();
QString canvasId = QString::fromStdString(canvas["id"].as<std::string>());
QString canvasId = QWasmString::toQString(canvas["id"]);
addScreen(canvasId);
}
} else if (!canvas.isUndefined()){
QString canvasId = QString::fromStdString(canvas["id"].as<std::string>());
QString canvasId = QWasmString::toQString(canvas["id"]);
addScreen(canvasId);
}

View File

@ -32,6 +32,8 @@
#include "qwasmeventtranslator.h"
#include "qwasmcompositor.h"
#include "qwasmintegration.h"
#include "qwasmstring.h"
#include <emscripten/bind.h>
#include <emscripten/val.h>
@ -186,7 +188,7 @@ void QWasmScreen::updateQScreenAndCanvasRenderSize()
QSizeF canvasSize = cssSize * devicePixelRatio();
val document = val::global("document");
val canvas = document.call<val>("getElementById", val(canvasId.constData()));
val canvas = document.call<val>("getElementById", QWasmString::fromQString(m_canvasId));
canvas.set("width", canvasSize.width());
canvas.set("height", canvasSize.height());

View File

@ -28,6 +28,8 @@
****************************************************************************/
#include "qwasmservices.h"
#include "qwasmstring.h"
#include <QtCore/QUrl>
#include <QtCore/QDebug>
@ -37,8 +39,8 @@ QT_BEGIN_NAMESPACE
bool QWasmServices::openUrl(const QUrl &url)
{
QByteArray utf8Url = url.toString().toUtf8();
emscripten::val::global("window").call<void>("open", emscripten::val(utf8Url.constData()), emscripten::val("_blank"));
emscripten::val jsUrl = QWasmString::fromQString(url.toString());
emscripten::val::global("window").call<void>("open", jsUrl, emscripten::val("_blank"));
return true;
}

View File

@ -0,0 +1,61 @@
/****************************************************************************
**
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL$
** 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 or (at your option) 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.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-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include "qwasmstring.h"
QT_BEGIN_NAMESPACE
using namespace emscripten;
val QWasmString::fromQString(const QString &str)
{
static const val UTF16ToString(
val::global("Module")["UTF16ToString"]);
auto ptr = quintptr(str.utf16());
return UTF16ToString(val(ptr));
}
QString QWasmString::toQString(const val &v)
{
QString result;
if (!v.isString())
return result;
static const val stringToUTF16(
val::global("Module")["stringToUTF16"]);
static const val length("length");
result.resize(v[length].as<int>());
auto ptr = quintptr(result.utf16());
stringToUTF16(v, val(ptr));
return result;
}
QT_END_NAMESPACE

View File

@ -0,0 +1,45 @@
/****************************************************************************
**
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL$
** 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 or (at your option) 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.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-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#pragma once
#include <qstring.h>
#include <emscripten/val.h>
QT_BEGIN_NAMESPACE
class QWasmString
{
public:
static emscripten::val fromQString(const QString &str);
static QString toQString(const emscripten::val &v);
};
QT_END_NAMESPACE

View File

@ -23,7 +23,8 @@ SOURCES = \
qwasmtheme.cpp \
qwasmclipboard.cpp \
qwasmservices.cpp \
qwasmoffscreensurface.cpp
qwasmoffscreensurface.cpp \
qwasmstring.cpp
HEADERS = \
qwasmintegration.h \
@ -39,7 +40,8 @@ HEADERS = \
qwasmtheme.h \
qwasmclipboard.h \
qwasmservices.h \
qwasmoffscreensurface.h
qwasmoffscreensurface.h \
qwasmstring.h
wasmfonts.files = \
../../../3rdparty/wasm/Vera.ttf \

View File

@ -1025,7 +1025,7 @@ bool QWindowsXPStylePrivate::drawBackgroundThruNativeBuffer(XPThemeData &themeDa
imgCopy = cachedPixmap.toImage();
if (themeData.rotate) {
QMatrix rotMatrix;
QTransform rotMatrix;
rotMatrix.rotate(themeData.rotate);
imgCopy = imgCopy.transformed(rotMatrix);
}

View File

@ -55,7 +55,6 @@
#ifndef QT_NO_PRINTER
#include "QtCore/qmap.h"
#include "QtGui/qmatrix.h"
#include "QtCore/qstring.h"
#include "QtCore/qvector.h"
#include "QtGui/qpaintengine.h"

View File

@ -264,7 +264,7 @@ void QPrintPreviewWidgetPrivate::_q_fit(bool doFitting)
} else {
graphicsView->fitInView(target, Qt::KeepAspectRatio);
if (zoomMode == QPrintPreviewWidget::FitInView) {
int step = qRound(graphicsView->matrix().mapRect(target).height());
const int step = qRound(graphicsView->transform().mapRect(target).height());
graphicsView->verticalScrollBar()->setSingleStep(step);
graphicsView->verticalScrollBar()->setPageStep(step);
}

View File

@ -249,16 +249,15 @@ void QSqlQueryModel_snippets()
}
//! [21]
QSqlTableModel model;
model.setTable("employee");
model.select();
QSqlQueryModel model;
model.setQuery("SELECT name, salary FROM employee");
int salary = model.record(4).value("salary").toInt();
//! [21]
Q_UNUSED(salary);
{
//! [22]
int salary = model.data(model.index(4, 2)).toInt();
int salary = model.data(model.index(4, 1)).toInt();
//! [22]
Q_UNUSED(salary);
}
@ -308,7 +307,8 @@ void QSqlTableModel_snippets()
//! [25]
QSqlTableModel model;
model.setTable("employee");
QString name = model.record(4).value("name").toString();
model.select();
int salary = model.record(4).value("salary").toInt();
//! [25]
}
}

View File

@ -124,8 +124,8 @@ int QSqlQueryModelPrivate::columnInQuery(int modelColumn) const
\snippet sqldatabase/sqldatabase.cpp 21
The code snippet above extracts the \c salary field from record 4 in
the result set of the query \c{SELECT * from employee}. Assuming
that \c salary is column 2, we can rewrite the last line as follows:
the result set of the \c SELECT query. Since \c salary is the 2nd
column (or column index 1), we can rewrite the last line as follows:
\snippet sqldatabase/sqldatabase.cpp 22

View File

@ -222,7 +222,7 @@ bool QSqlTableModelPrivate::exec(const QString &stmt, bool prepStatement,
QSqlTableModel can also be used to access a database
programmatically, without binding it to a view:
\snippet sqldatabase/sqldatabase.cpp 21
\snippet sqldatabase/sqldatabase.cpp 25
The code snippet above extracts the \c salary field from record 4 in
the result set of the query \c{SELECT * from employee}.

View File

@ -380,10 +380,10 @@ void JavaStyle::drawControl(ControlElement control, const QStyleOption *option,
QRect rect = bar->rect;
if (bar->orientation == Qt::Vertical) {
rect = QRect(rect.left(), rect.top(), rect.height(), rect.width());
QMatrix m;
QTransform m;
m.translate(rect.height()-1, 0);
m.rotate(90.0);
painter->setMatrix(m);
painter->setTransform(m);
}
painter->setPen(bar->palette.color(QPalette::Mid));

View File

@ -2543,6 +2543,18 @@
See also \l{#height-prop}{height}.
\row
\li \b -qt-background-role
\li \l{#paletterole}{PaletteRole}
\li The \c{background-color} for the subcontrol or widget based on the
chosen role.
\row
\li \b -qt-style-features
\li \c list
\li The list of CSS properties that you want to apply Qt-specific styles on.
\note The \c list can only include properties that are not pixmap-based.
\endtable
\target list of icons

View File

@ -231,7 +231,6 @@
#include <QtWidgets/qgraphicslayout.h>
#include <QtWidgets/qgraphicsproxywidget.h>
#include <QtWidgets/qgraphicswidget.h>
#include <QtGui/qmatrix.h>
#include <QtGui/qpaintengine.h>
#include <QtGui/qpainter.h>
#include <QtGui/qpixmapcache.h>

View File

@ -47,7 +47,6 @@
#include <QtGui/qbrush.h>
#include <QtGui/qfont.h>
#include <QtGui/qtransform.h>
#include <QtGui/qmatrix.h>
#include <QtGui/qpen.h>
QT_REQUIRE_CONFIG(graphicsview);

View File

@ -1795,7 +1795,13 @@ 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.
@ -1808,6 +1814,10 @@ QMatrix QGraphicsView::matrix() const
}
/*!
\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;
@ -1839,6 +1849,10 @@ void QGraphicsView::setMatrix(const QMatrix &matrix, bool combine)
}
/*!
\obsolete
Use resetTransform() instead.
Resets the view transformation matrix to the identity matrix.
\sa resetTransform()
@ -1848,6 +1862,8 @@ void QGraphicsView::resetMatrix()
resetTransform();
}
#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
Rotates the current view transformation \a angle degrees clockwise.

View File

@ -165,9 +165,11 @@ public:
void setSceneRect(const QRectF &rect);
inline void setSceneRect(qreal x, qreal y, qreal w, qreal h);
QMatrix matrix() const;
void setMatrix(const QMatrix &matrix, bool combine = false);
void resetMatrix();
#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;

View File

@ -2124,7 +2124,8 @@ QWidget *QApplicationPrivate::focusNextPrevChild_helper(QWidget *toplevel, bool
&& !(!next && focusProxy && test->isAncestorOf(focusProxy))
&& test->isVisibleTo(toplevel) && test->isEnabled()
&& !(w->windowType() == Qt::SubWindow && !w->isAncestorOf(test))
&& (toplevel->windowType() != Qt::SubWindow || toplevel->isAncestorOf(test))) {
&& (toplevel->windowType() != Qt::SubWindow || toplevel->isAncestorOf(test))
&& f != focusProxy) {
w = test;
if (seenWindow)
focusWidgetAfterWindow = true;

View File

@ -1556,7 +1556,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
qint64 maximum = qint64(pb->maximum);
qint64 progress = qint64(pb->progress);
QMatrix m;
QTransform m;
if (vertical) {
rect = QRect(rect.y(), rect.x(), rect.height(), rect.width()); // flip width and height

View File

@ -1692,7 +1692,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai
const bool vertical = pb->orientation == Qt::Vertical;
const bool inverted = pb->invertedAppearance;
QMatrix m;
QTransform m;
if (vertical) {
rect = QRect(rect.y(), rect.x(), rect.height(), rect.width()); // flip width and height
m.rotate(90);

View File

@ -414,8 +414,13 @@ void QAbstractButtonPrivate::emitClicked()
emit q->clicked(checked);
#if QT_CONFIG(buttongroup)
if (guard && group) {
#if QT_DEPRECATED_SINCE(5, 15)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
emit group->buttonClicked(group->id(q));
if (guard && group)
QT_WARNING_POP
#endif
emit group->buttonClicked(q);
}
#endif
@ -428,8 +433,13 @@ void QAbstractButtonPrivate::emitPressed()
emit q->pressed();
#if QT_CONFIG(buttongroup)
if (guard && group) {
#if QT_DEPRECATED_SINCE(5, 15)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
emit group->buttonPressed(group->id(q));
if (guard && group)
QT_WARNING_POP
#endif
emit group->buttonPressed(q);
}
#endif
@ -442,8 +452,13 @@ void QAbstractButtonPrivate::emitReleased()
emit q->released();
#if QT_CONFIG(buttongroup)
if (guard && group) {
#if QT_DEPRECATED_SINCE(5, 15)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
emit group->buttonReleased(group->id(q));
if (guard && group)
QT_WARNING_POP
#endif
emit group->buttonReleased(q);
}
#endif
@ -456,8 +471,13 @@ void QAbstractButtonPrivate::emitToggled(bool checked)
emit q->toggled(checked);
#if QT_CONFIG(buttongroup)
if (guard && group) {
#if QT_DEPRECATED_SINCE(5, 15)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
emit group->buttonToggled(group->id(q), checked);
if (guard && group)
QT_WARNING_POP
#endif
emit group->buttonToggled(q, checked);
}
#endif

View File

@ -164,6 +164,7 @@ void QButtonGroup::setExclusive(bool exclusive)
/*!
\fn void QButtonGroup::buttonClicked(int id)
\obsolete
This signal is emitted when a button with the given \a id is
clicked.
@ -183,6 +184,7 @@ void QButtonGroup::setExclusive(bool exclusive)
/*!
\fn void QButtonGroup::buttonPressed(int id)
\since 4.2
\obsolete
This signal is emitted when a button with the given \a id is
pressed down.
@ -202,6 +204,7 @@ void QButtonGroup::setExclusive(bool exclusive)
/*!
\fn void QButtonGroup::buttonReleased(int id)
\since 4.2
\obsolete
This signal is emitted when a button with the given \a id is
released.
@ -222,6 +225,7 @@ void QButtonGroup::setExclusive(bool exclusive)
/*!
\fn void QButtonGroup::buttonToggled(int id, bool checked)
\since 5.2
\obsolete
This signal is emitted when a button with the given \a id is toggled.
\a checked is true if the button is checked, or false if the button is unchecked.

View File

@ -78,13 +78,19 @@ public:
Q_SIGNALS:
void buttonClicked(QAbstractButton *);
void buttonClicked(int);
void buttonPressed(QAbstractButton *);
void buttonPressed(int);
void buttonReleased(QAbstractButton *);
void buttonReleased(int);
void buttonToggled(QAbstractButton *, bool);
#if QT_DEPRECATED_SINCE(5, 15)
QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::buttonClicked(QAbstractButton *) instead")
void buttonClicked(int);
QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::buttonPressed(QAbstractButton *) instead")
void buttonPressed(int);
QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::buttonReleased(QAbstractButton *) instead")
void buttonReleased(int);
QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::buttonToggled(QAbstractButton *, bool) instead")
void buttonToggled(int, bool);
#endif
private:
Q_DISABLE_COPY(QButtonGroup)

View File

@ -293,8 +293,7 @@ void QComboBoxPrivate::_q_modelReset()
lineEdit->setText(QString());
updateLineEditGeometry();
}
if (currentIndex.row() != indexBeforeChange)
_q_emitCurrentIndexChanged(currentIndex);
trySetValidIndex();
modelChanged();
q->update();
}
@ -304,6 +303,25 @@ void QComboBoxPrivate::_q_modelDestroyed()
model = QAbstractItemModelPrivate::staticEmptyModel();
}
void QComboBoxPrivate::trySetValidIndex()
{
Q_Q(QComboBox);
bool currentReset = false;
const int rowCount = q->count();
for (int pos = 0; pos < rowCount; ++pos) {
const QModelIndex idx(model->index(pos, modelColumn, root));
if (idx.flags() & Qt::ItemIsEnabled) {
setCurrentIndex(idx);
currentReset = true;
break;
}
}
if (!currentReset)
setCurrentIndex(QModelIndex());
}
QRect QComboBoxPrivate::popupGeometry(int screen) const
{
return QStylePrivate::useFullScreenForPopup()
@ -2202,20 +2220,7 @@ void QComboBox::setModel(QAbstractItemModel *model)
setRootModelIndex(QModelIndex());
bool currentReset = false;
const int rowCount = count();
for (int pos=0; pos < rowCount; pos++) {
if (d->model->index(pos, d->modelColumn, d->root).flags() & Qt::ItemIsEnabled) {
setCurrentIndex(pos);
currentReset = true;
break;
}
}
if (!currentReset)
setCurrentIndex(-1);
d->trySetValidIndex();
d->modelChanged();
}

View File

@ -371,6 +371,7 @@ public:
void _q_rowsRemoved(const QModelIndex &parent, int start, int end);
void updateArrow(QStyle::StateFlag state);
bool updateHoverControl(const QPoint &pos);
void trySetValidIndex();
QRect popupGeometry(int screen = -1) const;
QStyle::SubControl newHoverControl(const QPoint &pos);
int computeWidthHint() const;

View File

@ -490,14 +490,14 @@ void QScrollArea::ensureWidgetVisible(QWidget *childWidget, int xmargin, int yma
if (focusRect.width() > visibleRect.width())
d->hbar->setValue(focusRect.center().x() - d->viewport->width() / 2);
else if (focusRect.right() > visibleRect.right())
d->hbar->setValue(focusRect.right() - d->viewport->width());
d->hbar->setValue(focusRect.right() - d->viewport->width() + 1);
else if (focusRect.left() < visibleRect.left())
d->hbar->setValue(focusRect.left());
if (focusRect.height() > visibleRect.height())
d->vbar->setValue(focusRect.center().y() - d->viewport->height() / 2);
else if (focusRect.bottom() > visibleRect.bottom())
d->vbar->setValue(focusRect.bottom() - d->viewport->height());
d->vbar->setValue(focusRect.bottom() - d->viewport->height() + 1);
else if (focusRect.top() < visibleRect.top())
d->vbar->setValue(focusRect.top());
}

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtWidgets module of the Qt Toolkit.
@ -1168,11 +1168,11 @@ QVariant QSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
} else {
num = locale.toInt(copy, &ok);
if (!ok && (max >= 1000 || min <= -1000)) {
const QChar sep = locale.groupSeparator();
const QChar doubleSep[2] = {sep, sep};
if (copy.contains(sep) && !copy.contains(QString(doubleSep, 2))) {
const QString sep(locale.groupSeparator());
const QString doubleSep = sep + sep;
if (copy.contains(sep) && !copy.contains(doubleSep)) {
QString copy2 = copy;
copy2.remove(locale.groupSeparator());
copy2.remove(sep);
num = locale.toInt(copy2, &ok);
}
}
@ -1314,6 +1314,10 @@ QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
const bool plus = max >= 0;
const bool minus = min <= 0;
const QString group(locale.groupSeparator());
const uint groupUcs = (group.size() > 1 && group.at(0).isHighSurrogate()
? QChar::surrogateToUcs4(group.at(0), group.at(1))
: group.at(0).unicode());
switch (len) {
case 0:
state = max != min ? QValidator::Intermediate : QValidator::Invalid;
@ -1360,14 +1364,15 @@ QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
}
}
} else {
const QChar last = copy.at(len - 1);
const QChar secondLast = copy.at(len - 2);
if ((last == locale.groupSeparator() || last.isSpace())
&& (secondLast == locale.groupSeparator() || secondLast.isSpace())) {
const QChar last = copy.back();
const bool groupEnd = copy.endsWith(group);
const QStringView head(copy.constData(), groupEnd ? len - group.size() : len - 1);
const QChar secondLast = head.back();
if ((groupEnd || last.isSpace()) && (head.endsWith(group) || secondLast.isSpace())) {
state = QValidator::Invalid;
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
goto end;
} else if (last.isSpace() && (!locale.groupSeparator().isSpace() || secondLast.isSpace())) {
} else if (last.isSpace() && (!QChar::isSpace(groupUcs) || secondLast.isSpace())) {
state = QValidator::Invalid;
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
goto end;
@ -1381,26 +1386,31 @@ QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
QSBDEBUG() << __FILE__ << __LINE__ << locale << copy << num << ok;
if (!ok) {
if (locale.groupSeparator().isPrint()) {
if (max < 1000 && min > -1000 && copy.contains(locale.groupSeparator())) {
if (QChar::isPrint(groupUcs)) {
if (max < 1000 && min > -1000 && copy.contains(group)) {
state = QValidator::Invalid;
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
goto end;
}
const int len = copy.size();
for (int i=0; i<len- 1; ++i) {
if (copy.at(i) == locale.groupSeparator() && copy.at(i + 1) == locale.groupSeparator()) {
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
state = QValidator::Invalid;
goto end;
for (int i = 0; i < len - 1;) {
if (QStringView(copy).mid(i).startsWith(group)) {
if (QStringView(copy).mid(i + group.size()).startsWith(group)) {
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
state = QValidator::Invalid;
goto end;
}
i += group.size();
} else {
i++;
}
}
QString copy2 = copy;
copy2.remove(locale.groupSeparator());
copy2.remove(group);
num = locale.toDouble(copy2, &ok);
QSBDEBUG() << locale.groupSeparator() << num << copy2 << ok;
QSBDEBUG() << group << num << copy2 << ok;
if (!ok) {
state = QValidator::Invalid;

View File

@ -992,12 +992,12 @@ void QWidgetTextControl::selectAll()
void QWidgetTextControl::processEvent(QEvent *e, const QPointF &coordinateOffset, QWidget *contextWidget)
{
QMatrix m;
m.translate(coordinateOffset.x(), coordinateOffset.y());
processEvent(e, m, contextWidget);
QTransform t;
t.translate(coordinateOffset.x(), coordinateOffset.y());
processEvent(e, t, contextWidget);
}
void QWidgetTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget *contextWidget)
void QWidgetTextControl::processEvent(QEvent *e, const QTransform &transform, QWidget *contextWidget)
{
Q_D(QWidgetTextControl);
if (d->interactionFlags == Qt::NoTextInteraction) {
@ -1038,22 +1038,22 @@ void QWidgetTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget
break;
case QEvent::MouseButtonPress: {
QMouseEvent *ev = static_cast<QMouseEvent *>(e);
d->mousePressEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(),
d->mousePressEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(),
ev->buttons(), ev->globalPos());
break; }
case QEvent::MouseMove: {
QMouseEvent *ev = static_cast<QMouseEvent *>(e);
d->mouseMoveEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(),
d->mouseMoveEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(),
ev->buttons(), ev->globalPos());
break; }
case QEvent::MouseButtonRelease: {
QMouseEvent *ev = static_cast<QMouseEvent *>(e);
d->mouseReleaseEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(),
d->mouseReleaseEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(),
ev->buttons(), ev->globalPos());
break; }
case QEvent::MouseButtonDblClick: {
QMouseEvent *ev = static_cast<QMouseEvent *>(e);
d->mouseDoubleClickEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(),
d->mouseDoubleClickEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(),
ev->buttons(), ev->globalPos());
break; }
case QEvent::InputMethod:
@ -1062,7 +1062,7 @@ void QWidgetTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget
#ifndef QT_NO_CONTEXTMENU
case QEvent::ContextMenu: {
QContextMenuEvent *ev = static_cast<QContextMenuEvent *>(e);
d->contextMenuEvent(ev->globalPos(), matrix.map(ev->pos()), contextWidget);
d->contextMenuEvent(ev->globalPos(), transform.map(ev->pos()), contextWidget);
break; }
#endif // QT_NO_CONTEXTMENU
case QEvent::FocusIn:
@ -1077,7 +1077,7 @@ void QWidgetTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget
#ifndef QT_NO_TOOLTIP
case QEvent::ToolTip: {
QHelpEvent *ev = static_cast<QHelpEvent *>(e);
d->showToolTip(ev->globalPos(), matrix.map(ev->pos()), contextWidget);
d->showToolTip(ev->globalPos(), transform.map(ev->pos()), contextWidget);
break;
}
#endif // QT_NO_TOOLTIP
@ -1094,13 +1094,13 @@ void QWidgetTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget
break;
case QEvent::DragMove: {
QDragMoveEvent *ev = static_cast<QDragMoveEvent *>(e);
if (d->dragMoveEvent(e, ev->mimeData(), matrix.map(ev->pos())))
if (d->dragMoveEvent(e, ev->mimeData(), transform.map(ev->pos())))
ev->acceptProposedAction();
break;
}
case QEvent::Drop: {
QDropEvent *ev = static_cast<QDropEvent *>(e);
if (d->dropEvent(ev->mimeData(), matrix.map(ev->pos()), ev->dropAction(), ev->source()))
if (d->dropEvent(ev->mimeData(), transform.map(ev->pos()), ev->dropAction(), ev->source()))
ev->acceptProposedAction();
break;
}
@ -1109,32 +1109,32 @@ void QWidgetTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget
#if QT_CONFIG(graphicsview)
case QEvent::GraphicsSceneMousePress: {
QGraphicsSceneMouseEvent *ev = static_cast<QGraphicsSceneMouseEvent *>(e);
d->mousePressEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(), ev->buttons(),
d->mousePressEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(), ev->buttons(),
ev->screenPos());
break; }
case QEvent::GraphicsSceneMouseMove: {
QGraphicsSceneMouseEvent *ev = static_cast<QGraphicsSceneMouseEvent *>(e);
d->mouseMoveEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(), ev->buttons(),
d->mouseMoveEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(), ev->buttons(),
ev->screenPos());
break; }
case QEvent::GraphicsSceneMouseRelease: {
QGraphicsSceneMouseEvent *ev = static_cast<QGraphicsSceneMouseEvent *>(e);
d->mouseReleaseEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(), ev->buttons(),
d->mouseReleaseEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(), ev->buttons(),
ev->screenPos());
break; }
case QEvent::GraphicsSceneMouseDoubleClick: {
QGraphicsSceneMouseEvent *ev = static_cast<QGraphicsSceneMouseEvent *>(e);
d->mouseDoubleClickEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(), ev->buttons(),
d->mouseDoubleClickEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(), ev->buttons(),
ev->screenPos());
break; }
case QEvent::GraphicsSceneContextMenu: {
QGraphicsSceneContextMenuEvent *ev = static_cast<QGraphicsSceneContextMenuEvent *>(e);
d->contextMenuEvent(ev->screenPos(), matrix.map(ev->pos()), contextWidget);
d->contextMenuEvent(ev->screenPos(), transform.map(ev->pos()), contextWidget);
break; }
case QEvent::GraphicsSceneHoverMove: {
QGraphicsSceneHoverEvent *ev = static_cast<QGraphicsSceneHoverEvent *>(e);
d->mouseMoveEvent(ev, Qt::NoButton, matrix.map(ev->pos()), ev->modifiers(),Qt::NoButton,
d->mouseMoveEvent(ev, Qt::NoButton, transform.map(ev->pos()), ev->modifiers(),Qt::NoButton,
ev->screenPos());
break; }
@ -1148,12 +1148,12 @@ void QWidgetTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget
break;
case QEvent::GraphicsSceneDragMove: {
QGraphicsSceneDragDropEvent *ev = static_cast<QGraphicsSceneDragDropEvent *>(e);
if (d->dragMoveEvent(e, ev->mimeData(), matrix.map(ev->pos())))
if (d->dragMoveEvent(e, ev->mimeData(), transform.map(ev->pos())))
ev->acceptProposedAction();
break; }
case QEvent::GraphicsSceneDrop: {
QGraphicsSceneDragDropEvent *ev = static_cast<QGraphicsSceneDragDropEvent *>(e);
if (d->dropEvent(ev->mimeData(), matrix.map(ev->pos()), ev->dropAction(), ev->source()))
if (d->dropEvent(ev->mimeData(), transform.map(ev->pos()), ev->dropAction(), ev->source()))
ev->accept();
break; }
#endif // QT_CONFIG(graphicsview)

View File

@ -252,7 +252,7 @@ public:
QPalette palette() const;
void setPalette(const QPalette &pal);
virtual void processEvent(QEvent *e, const QMatrix &matrix, QWidget *contextWidget = nullptr);
virtual void processEvent(QEvent *e, const QTransform &transform, QWidget *contextWidget = nullptr);
void processEvent(QEvent *e, const QPointF &coordinateOffset = QPointF(), QWidget *contextWidget = nullptr);
// control methods

View File

@ -1,2 +1,2 @@
[deleteChildrenWithRunningGroup]
osx-10.13
macos

View File

@ -1,5 +1,6 @@
[pauseAndPropertyAnimations]
osx
macos
[multipleSequentialGroups]
osx
macos
[noTimerUpdates]
macos

View File

@ -1,6 +1,6 @@
[finishWithUncontrolledAnimation]
windows-10 msvc-2015
osx-10.13
macos
[groupWithZeroDurationAnimations]
osx-10.13
macos

View File

@ -1,3 +1,3 @@
[elapsed]
osx-10.13
macos
windows-10

View File

@ -3298,7 +3298,10 @@ 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.gradient()->type(), radialBrush.gradient()->type());
QCOMPARE(rGrad.gradient()->stops(), radialBrush.gradient()->stops());
QCOMPARE(rGrad.gradient()->spread(), radialBrush.gradient()->spread());
@ -3307,7 +3310,10 @@ void tst_QDataStream::streamRealDataTypes()
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.gradient()->type(), conicalBrush.gradient()->type());
QCOMPARE(cGrad.gradient()->stops(), conicalBrush.gradient()->stops());
QCOMPARE(cGrad.gradient()->spread(), conicalBrush.gradient()->spread());

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2,9 +2,7 @@
osx
[tryAcquireWithTimeout:0.2s]
windows
osx-10.12
osx-10.13
macos
[tryAcquireWithTimeout:2s]
windows
osx-10.12
osx-10.13
macos

View File

@ -2,6 +2,5 @@
windows-10 msvc-2015
osx
[frameRate]
osx-10.12
osx-10.13
macos

View File

@ -32,7 +32,7 @@
#include <qimage.h>
#include <qimagereader.h>
#include <qlist.h>
#include <qmatrix.h>
#include <qtransform.h>
#include <qrandom.h>
#include <stdio.h>
@ -1204,7 +1204,7 @@ void tst_QImage::rotate()
// original.save("rotated90_original.png", "png");
// Initialize the matrix manually (do not use rotate) to avoid rounding errors
QMatrix matRotate90;
QTransform matRotate90;
matRotate90.rotate(degrees);
QImage dest = original;
// And rotate it 4 times, then the image should be identical to the original
@ -1218,7 +1218,7 @@ void tst_QImage::rotate()
// dest.save("rotated90_result.png","png");
QCOMPARE(original, dest);
// Test with QMatrix::rotate 90 also, since we trust that now
// Test with QTransform::rotate 90 also, since we trust that now
matRotate90.rotate(degrees);
dest = original;
// And rotate it 4 times, then the image should be identical to the original

View File

@ -32,7 +32,6 @@
#include <qbitmap.h>
#include <qimage.h>
#include <qimagereader.h>
#include <qmatrix.h>
#ifndef QT_NO_WIDGETS
#include <qdesktopwidget.h>
#include <qsplashscreen.h>

View File

@ -197,9 +197,14 @@ template<> struct TestValueFactory<QMetaType::QTextLength> {
template<> struct TestValueFactory<QMetaType::QTextFormat> {
static QTextFormat *create() { return new QTextFormat(QTextFormat::FrameFormat); }
};
#if QT_DEPRECATED_SINCE(5, 15)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
template<> struct TestValueFactory<QMetaType::QMatrix> {
static QMatrix *create() { return new QMatrix(10, 20, 30, 40, 50, 60); }
};
QT_WARNING_POP
#endif
template<> struct TestValueFactory<QMetaType::QTransform> {
static QTransform *create() { return new QTransform(10, 20, 30, 40, 50, 60); }
};

View File

@ -402,6 +402,9 @@ 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;
@ -414,6 +417,8 @@ void tst_QGuiVariant::matrix()
QVERIFY(mmatrix);
QMetaType::destroy(QVariant::Matrix, mmatrix);
}
QT_WARNING_POP
#endif
void tst_QGuiVariant::matrix4x4()
{

View File

@ -2,10 +2,10 @@
opensuse-leap
[positioning:default]
linux
osx-10.12 ci
macos ci
winrt
[positioning:fake]
osx-10.12 ci
macos ci
[modalWithChildWindow]
# QTBUG-66851
# QTBUG-69160

View File

@ -3061,6 +3061,9 @@ 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.
@ -3107,6 +3110,8 @@ void tst_QMatrixNxN::convertQMatrix()
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

View File

@ -1704,8 +1704,11 @@ void tst_QPainter::combinedMatrix()
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();
@ -2245,7 +2248,7 @@ void tst_QPainter::clippedPolygon()
{
QFETCH(QSize, imageSize);
QFETCH(QPainterPath, path);
QPolygonF polygon = path.toFillPolygon();
QPolygonF polygon = path.toFillPolygon(QTransform());
QFETCH(QRect, clipRect);
QPainterPath clipPath;
clipPath.addRect(clipRect);
@ -3066,7 +3069,7 @@ void tst_QPainter::fpe_steepSlopes_data()
const qreal dsin = 0.000014946676875461832484392500630665523431162000633776187896728515625;
const qreal dcos = 0.9999999998882984630910186751862056553363800048828125;
const QTransform transform = QTransform(QMatrix(dcos, dsin, -dsin, dcos, 64, 64));
const QTransform transform = QTransform(dcos, dsin, -dsin, dcos, 64, 64);
const QLineF line(2, 2, 2, 6);
QTest::newRow("task 207147 aa") << transform << line << true;
@ -4064,7 +4067,7 @@ void tst_QPainter::drawPolygon()
path.moveTo(2, 34);
path.lineTo(34, 2);
QPolygonF poly = stroker.createStroke(path).toFillPolygon();
QPolygonF poly = stroker.createStroke(path).toFillPolygon(QTransform());
img.fill(0xffffffff);
QPainter p(&img);
@ -4133,7 +4136,10 @@ void tst_QPainter::inactivePainter()
p.setClipping(true);
#if QT_DEPRECATED_SINCE(5, 13)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
p.combinedMatrix();
QT_WARNING_POP
#endif
p.combinedTransform();
@ -4142,7 +4148,10 @@ void tst_QPainter::inactivePainter()
p.device();
#if QT_DEPRECATED_SINCE(5, 13)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
p.deviceMatrix();
QT_WARNING_POP
#endif
p.deviceTransform();
@ -4168,7 +4177,10 @@ void tst_QPainter::inactivePainter()
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);
@ -4186,8 +4198,11 @@ void tst_QPainter::inactivePainter()
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.setWorldMatrixEnabled(true);

View File

@ -713,9 +713,5 @@ QPainterPath Paths::bezierQuadrant()
path.closeSubpath();
}
QMatrix m(2, 0,
0, 2,
0, 0);
return path;
}

View File

@ -152,9 +152,9 @@ void tst_QPathClipper::initTestCase()
for (int i = 0; i < paths.size(); ++i) {
QRectF bounds = paths[i].boundingRect();
QMatrix m(1, 0,
0, 1,
-bounds.center().x(), -bounds.center().y());
QTransform m(1, 0,
0, 1,
-bounds.center().x(), -bounds.center().y());
paths[i] = m.map(paths[i]);
}

View File

@ -331,17 +331,13 @@ void tst_QTransform::mapToPolygon()
void tst_QTransform::qhash()
{
QMatrix m1;
m1.shear(3.0, 2.0);
m1.rotate(44);
QTransform t1;
t1.shear(3.0, 2.0);
t1.rotate(44);
QMatrix m2 = m1;
QTransform t1(m1);
QTransform t2(m2);
QTransform t2 = t1;
// not really much to test here, so just the bare minimum:
QCOMPARE(qHash(m1), qHash(m2));
QCOMPARE(qHash(t1), qHash(t2));
}
@ -376,6 +372,9 @@ void tst_QTransform::scale()
QVERIFY( QTransform::fromScale( 1, 1 ) == QTransform());
}
#if QT_DEPRECATED_SINCE(5, 15)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
void tst_QTransform::matrix()
{
QMatrix mat1;
@ -414,7 +413,7 @@ void tst_QTransform::matrix()
QRect rect(43, 70, 200, 200);
QPoint pt(43, 66);
QCOMPARE(tranInv.map(pt), matInv.map(pt));
QCOMPARE(tranInv.mapRect(rect), matInv.mapRect(rect));
QCOMPARE(tranInv.map(pt), matInv.map(pt));
QPainterPath path;
@ -431,6 +430,8 @@ void tst_QTransform::testOffset()
const QMatrix &aff = trans.toAffine();
QCOMPARE((void*)(&aff), (void*)(&trans));
}
QT_WARNING_POP
#endif
void tst_QTransform::types()
{

View File

@ -32,6 +32,9 @@
#include <qmath.h>
#include <qpolygon.h>
#if QT_DEPRECATED_SINCE(5, 15)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
class tst_QWMatrix : public QObject
{
@ -324,5 +327,8 @@ void tst_QWMatrix::mapPolygon()
}
}
QT_WARNING_POP
#endif
QTEST_APPLESS_MAIN(tst_QWMatrix)
#include "tst_qwmatrix.moc"

Some files were not shown because too many files have changed in this diff Show More