Merge remote-tracking branch 'origin/5.12' into 5.13

Change-Id: I6ecf7074eda57ef4954fb3fdc7a6d1e8cd229340
This commit is contained in:
Qt Forward Merge Bot 2019-04-26 01:00:13 +02:00
commit 0dff40adf8
13 changed files with 183 additions and 26 deletions

View File

@ -62,28 +62,27 @@
*/
/*!
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:find_package
\externalpage https://cmake.org/cmake/help/latest/command/find_package.html
\title CMake find_package Documentation
*/
/*!
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:AUTOMOC
\externalpage https://cmake.org/cmake/help/latest/manual/cmake-qt.7.html#automoc
\title CMake AUTOMOC Documentation
*/
/*!
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:LOCATION
\externalpage https://cmake.org/cmake/help/latest/prop_tgt/LOCATION.html
\title CMake LOCATION Documentation
*/
/*!
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:POSITION_INDEPENDENT_CODE
\externalpage https://cmake.org/cmake/help/latest/prop_tgt/POSITION_INDEPENDENT_CODE.html
\title CMake POSITION_INDEPENDENT_CODE Documentation
*/
/*!
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:target_link_libraries
\externalpage https://cmake.org/cmake/help/latest/command/target_link_libraries.html
\title CMake target_link_libraries Documentation
*/

View File

@ -267,9 +267,13 @@ isEmpty($${target_prefix}.INCDIRS) {
for (line, output) {
contains(line, "^libraries: .*") {
line ~= s,^libraries: ,,
equals(QMAKE_HOST.os, Windows) {
# clang (7.x) on Windows uses the wrong path list separator ...
equals(QMAKE_HOST.os, Windows): line ~= s,:(?![/\\\\]),;,
line ~= s,:(?![/\\\\]),;,
paths = $$split(line, ;)
} else {
paths = $$split(line, $$QMAKE_DIRLIST_SEP)
}
for (path, paths): \
QMAKE_DEFAULT_LIBDIRS += $$clean_path($$replace(path, ^=, $$[SYSROOT]))
}

View File

@ -1105,6 +1105,8 @@
\header \li Option \li Description
\row \li app_bundle \li Puts the executable into a bundle (this is the default).
\row \li lib_bundle \li Puts the library into a library bundle.
\row \li plugin_bundle \li Puts the plugin into a plugin bundle. This value
is not supported by the Xcode project generator.
\endtable
The build process for bundles is also influenced by

View File

@ -203,9 +203,12 @@ static CborError preparse_value(CborValue *it)
it->extra = 0;
/* read up to 16 bits into it->extra */
if (bytesNeeded <= 2) {
if (bytesNeeded == 1) {
uint8_t extra;
read_bytes_unchecked(it, &extra, 1, bytesNeeded);
it->extra = extra;
} else if (bytesNeeded == 2) {
read_bytes_unchecked(it, &it->extra, 1, bytesNeeded);
if (bytesNeeded == 2)
it->extra = cbor_ntohs(it->extra);
} else {
cbor_static_assert(CborIteratorFlag_IntegerValueTooLarge == (Value32Bit & 3));

View File

@ -45,6 +45,7 @@
#include "qsharedpointer.h"
#include "qvector.h"
#include "qthread.h"
#include "qcoreapplication.h"
#include <QtCore/qrunnable.h>
#include <deque>
@ -474,6 +475,17 @@ void QtAndroidPrivate::runOnAndroidThread(const QtAndroidPrivate::Runnable &runn
env->CallStaticVoidMethod(g_jNativeClass, g_runPendingCppRunnablesMethodID);
}
static bool waitForSemaphore(int timeoutMs, QSharedPointer<QSemaphore> sem)
{
while (timeoutMs > 0) {
if (sem->tryAcquire(1, 10))
return true;
timeoutMs -= 10;
QCoreApplication::processEvents();
}
return false;
}
void QtAndroidPrivate::runOnAndroidThreadSync(const QtAndroidPrivate::Runnable &runnable, JNIEnv *env, int timeoutMs)
{
QSharedPointer<QSemaphore> sem(new QSemaphore);
@ -481,7 +493,7 @@ void QtAndroidPrivate::runOnAndroidThreadSync(const QtAndroidPrivate::Runnable &
runnable();
sem->release();
}, env);
sem->tryAcquire(1, timeoutMs);
waitForSemaphore(timeoutMs, sem);
}
void QtAndroidPrivate::requestPermissions(JNIEnv *env, const QStringList &permissions, const QtAndroidPrivate::PermissionsResultFunc &callbackFunc, bool directCall)
@ -524,7 +536,7 @@ QtAndroidPrivate::PermissionsHash QtAndroidPrivate::requestPermissionsSync(JNIEn
*res = result;
sem->release();
}, true);
if (sem->tryAcquire(1, timeoutMs))
if (waitForSemaphore(timeoutMs, sem))
return std::move(*res);
else // mustn't touch *res
return QHash<QString, QtAndroidPrivate::PermissionsResult>();

View File

@ -796,7 +796,7 @@ void QRasterPaintEngine::updatePen(const QPen &pen)
s->flags.fast_pen = pen_style > Qt::NoPen
&& s->penData.blend
&& ((cosmetic && penWidth <= 1)
|| (!cosmetic && s->flags.tx_noshear && penWidth * s->txscale <= 1));
|| (!cosmetic && (s->flags.tx_noshear || !s->flags.antialiased) && penWidth * s->txscale <= 1));
s->flags.non_complex_pen = qpen_capStyle(s->lastPen) <= Qt::SquareCap && s->flags.tx_noshear;

View File

@ -1151,6 +1151,8 @@ void QDashStroker::processCurrentSubpath()
QSubpathFlatIterator it(&m_elements, m_dashThreshold);
qfixed2d prev = it.next();
if (!prev.isFinite())
return;
bool clipping = !m_clip_rect.isEmpty();
qfixed2d move_to_pos = prev;
@ -1166,6 +1168,8 @@ void QDashStroker::processCurrentSubpath()
bool hasMoveTo = false;
while (it.hasNext()) {
QStrokerOps::Element e = it.next();
if (!qfixed2d(e).isFinite())
continue;
Q_ASSERT(e.isLineTo());
cline = QLineF(qt_fixed_to_real(prev.x),

View File

@ -104,6 +104,7 @@ struct qfixed2d
qfixed x;
qfixed y;
bool isFinite() { return qIsFinite(x) && qIsFinite(y); }
bool operator==(const qfixed2d &other) const { return qFuzzyCompare(x, other.x)
&& qFuzzyCompare(y, other.y); }
};

View File

@ -261,6 +261,10 @@ static RoleMapping map[] = {
//: Role of an accessible object
{ QAccessible::ComplementaryContent, ATSPI_ROLE_SECTION, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "complementary content") },
//: Role of an accessible object
{ QAccessible::Terminal, ATSPI_ROLE_TERMINAL, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "terminal") },
//: Role of an accessible object
{ QAccessible::Desktop, ATSPI_ROLE_DESKTOP_FRAME, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "desktop") },
//: Role of an accessible object
{ QAccessible::UserRole, ATSPI_ROLE_UNKNOWN, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "unknown") }
};
@ -268,6 +272,12 @@ void QSpiAccessibleBridge::initializeConstantMappings()
{
for (uint i = 0; i < sizeof(map) / sizeof(RoleMapping); ++i)
qSpiRoleMapping.insert(map[i].role, RoleNames(map[i].spiRole, QLatin1String(map[i].name), tr(map[i].name)));
// -1 because we have button duplicated, as PushButton and Button.
Q_ASSERT_X(qSpiRoleMapping.size() ==
QAccessible::staticMetaObject.enumerator(
QAccessible::staticMetaObject.indexOfEnumerator("Role")).keyCount() - 1,
"", "Handle all QAccessible::Role members in qSpiRoleMapping");
}
QT_END_NAMESPACE

View File

@ -523,6 +523,9 @@ QImage ICOReader::iconAt(int index)
if (!image.isNull()) {
readBMP(image);
if (!image.isNull()) {
if (icoAttrib.depth == 32) {
img = std::move(image).convertToFormat(QImage::Format_ARGB32_Premultiplied);
} else {
QImage mask(image.width(), image.height(), QImage::Format_Mono);
if (!mask.isNull()) {
mask.setColorCount(2);
@ -539,6 +542,7 @@ QImage ICOReader::iconAt(int index)
}
}
}
}
img.setText(QLatin1String(icoOrigDepthKey), QString::number(iconEntry.wBitCount));
}
}

View File

@ -447,6 +447,42 @@ static const int toolButtonArrowMargin = 2;
static const qreal focusRingWidth = 3.5;
// An application can force 'Aqua' theme while the system theme is one of
// the 'Dark' variants. Since in Qt we sometimes use NSControls and even
// NSCells directly without attaching them to any view hierarchy, we have
// to set NSAppearance.currentAppearance to 'Aqua' manually, to make sure
// the correct rendering path is triggered. Apple recommends us to un-set
// the current appearance back after we finished with drawing. This is what
// AppearanceSync is for.
class AppearanceSync {
public:
AppearanceSync()
{
#if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14)
if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave
&& !qt_mac_applicationIsInDarkMode()) {
auto requiredAppearanceName = NSApplication.sharedApplication.effectiveAppearance.name;
if (![NSAppearance.currentAppearance.name isEqualToString:requiredAppearanceName]) {
previous = NSAppearance.currentAppearance;
NSAppearance.currentAppearance = [NSAppearance appearanceNamed:requiredAppearanceName];
}
}
#endif // QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14)
}
~AppearanceSync()
{
if (previous)
NSAppearance.currentAppearance = previous;
}
private:
NSAppearance *previous = nil;
Q_DISABLE_COPY(AppearanceSync)
};
static bool setupScroller(NSScroller *scroller, const QStyleOptionSlider *sb)
{
const qreal length = sb->maximum - sb->minimum + sb->pageStep;
@ -2918,6 +2954,7 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai
const QWidget *w) const
{
Q_D(const QMacStyle);
const AppearanceSync appSync;
QMacCGContext cg(p);
QWindow *window = w && w->window() ? w->window()->windowHandle() : nullptr;
d->resolveCurrentNSView(window);
@ -3443,6 +3480,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
const QWidget *w) const
{
Q_D(const QMacStyle);
const AppearanceSync sync;
QMacCGContext cg(p);
QWindow *window = w && w->window() ? w->window()->windowHandle() : nullptr;
d->resolveCurrentNSView(window);
@ -5033,6 +5071,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex
const QWidget *widget) const
{
Q_D(const QMacStyle);
const AppearanceSync sync;
QMacCGContext cg(p);
QWindow *window = widget && widget->window() ? widget->window()->windowHandle() : nullptr;
d->resolveCurrentNSView(window);

View File

@ -900,7 +900,7 @@ bool readInputFile(Options *options)
options->extraPlugins = extraPlugins.toString().split(QLatin1Char(','));
}
if (!options->auxMode) {
{
const QJsonValue stdcppPath = jsonObject.value(QStringLiteral("stdcpp-path"));
if (stdcppPath.isUndefined()) {
fprintf(stderr, "No stdcpp-path defined in json file.\n");

View File

@ -0,0 +1,79 @@
# Version: 1
# CheckVsReference: 5%
drawRect 0 0 800 800
path_addRect p 0 0 75 75
path_addEllipse p 25 25 75 75
translate -500 -500
begin_block drawing
save
drawLine 0 0 100 100
translate 0 100
drawPath p
translate 0 110
drawRect 0 0 100 100
translate 0 110
drawPolyline [0 0 100 0 50 50]
drawPoint 40 40
drawPoint 41 40
drawPoint 42 40
drawPoint 43 40
drawPoint 44 40
drawPoint 45 40
drawPoint 46 40
drawPoint 47 40
drawPoint 48 40
drawPoint 49 40
drawPoint 50 40
restore
end_block
begin_block univsnonuni
save
save
scale 0.7 0.7
repeat_block drawing
restore
translate 100 0
save
scale 0.7 0.8
repeat_block drawing
restore
restore
end_block
resetMatrix
translate 20.5 20.5
begin_block row
save
repeat_block univsnonuni
translate 240 0
save
rotate 10
repeat_block univsnonuni
restore
translate 220 0
save
rotate_y 30
repeat_block univsnonuni
restore
restore
end_block
translate 0 320
setRenderHint AntiAliasing
repeat_block row