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

Conflicts:
	src/gui/painting/qdrawhelper.cpp
	src/gui/painting/qdrawhelper_p.h
	src/gui/painting/qdrawhelper_sse2.cpp
	src/gui/painting/qdrawhelper_x86_p.h

Change-Id: I83256bb38ab3a705776e353bc0629315b6c59a0f
This commit is contained in:
Allan Sandfeld Jensen 2019-08-27 13:08:38 +02:00
commit afac8dac58
7 changed files with 46 additions and 35 deletions

View File

@ -36,7 +36,7 @@
QT_BEGIN_NAMESPACE
QString project_builtin_regx() //calculate the builtin regular expression..
static QString project_builtin_regx() //calculate the builtin regular expression..
{
QString ret;
QStringList builtin_exts;

View File

@ -1567,21 +1567,12 @@ bool VCLinkerTool::parseOption(const char* option)
const char* str = option+6;
if (*str == 'S')
ShowProgress = linkProgressAll;
#ifndef Q_OS_WIN
else if (strncasecmp(str, "pginstrument", 12))
else if (qstricmp(str, "pginstrument") == 0)
LinkTimeCodeGeneration = optLTCGInstrument;
else if (strncasecmp(str, "pgoptimize", 10))
else if (qstricmp(str, "pgoptimize") == 0)
LinkTimeCodeGeneration = optLTCGOptimize;
else if (strncasecmp(str, "pgupdate", 8 ))
else if (qstricmp(str, "pgupdate") == 0)
LinkTimeCodeGeneration = optLTCGUpdate;
#else
else if (_stricmp(str, "pginstrument"))
LinkTimeCodeGeneration = optLTCGInstrument;
else if (_stricmp(str, "pgoptimize"))
LinkTimeCodeGeneration = optLTCGOptimize;
else if (_stricmp(str, "pgupdate"))
LinkTimeCodeGeneration = optLTCGUpdate;
#endif
}
} else {
AdditionalOptions.append(option);

View File

@ -122,7 +122,6 @@ static QString detectProjectFile(const QString &path)
return ret;
}
QString project_builtin_regx();
bool usage(const char *a0)
{
fprintf(stdout, "Usage: %s [mode] [options] [files]\n"
@ -134,9 +133,9 @@ bool usage(const char *a0)
"\n"
"Mode:\n"
" -project Put qmake into project file generation mode%s\n"
" In this mode qmake interprets files as files to\n"
" be built,\n"
" defaults to %s\n"
" In this mode qmake interprets [files] as files to\n"
" be added to the .pro file. By default, all files with\n"
" known source extensions are added.\n"
" Note: The created .pro file probably will \n"
" need to be edited. For example add the QT variable to \n"
" specify what modules are required.\n"
@ -184,7 +183,7 @@ bool usage(const char *a0)
" -nomoc Don't generate moc targets [makefile mode only]\n"
" -nopwd Don't look for files in pwd [project mode only]\n"
,a0,
default_mode(a0) == Option::QMAKE_GENERATE_PROJECT ? " (default)" : "", project_builtin_regx().toLatin1().constData(),
default_mode(a0) == Option::QMAKE_GENERATE_PROJECT ? " (default)" : "",
default_mode(a0) == Option::QMAKE_GENERATE_MAKEFILE ? " (default)" : ""
);
return false;

View File

@ -1199,10 +1199,10 @@ static int qt_compare_strings(QLatin1String lhs, QStringView rhs, Qt::CaseSensit
static int qt_compare_strings(QLatin1String lhs, QLatin1String rhs, Qt::CaseSensitivity cs) Q_DECL_NOTHROW
{
if (cs == Qt::CaseInsensitive)
return qstrnicmp(lhs.data(), lhs.size(), rhs.data(), rhs.size());
if (lhs.isEmpty())
return lencmp(0, rhs.size());
if (cs == Qt::CaseInsensitive)
return qstrnicmp(lhs.data(), lhs.size(), rhs.data(), rhs.size());
const auto l = std::min(lhs.size(), rhs.size());
int r = qstrncmp(lhs.data(), rhs.data(), l);
return r ? r : lencmp(lhs.size(), rhs.size());

View File

@ -95,6 +95,11 @@ public:
QBackingStore::QBackingStore(QWindow *window)
: d_ptr(new QBackingStorePrivate(window))
{
if (window->handle()) {
// Create platform backingstore up front if we have a platform window,
// otherwise delay the creation until absolutely necessary.
handle();
}
}
/*!

View File

@ -75,6 +75,37 @@ QCFType<CGColorSpaceRef> QCocoaBackingStore::colorSpace() const
QNSWindowBackingStore::QNSWindowBackingStore(QWindow *window)
: QCocoaBackingStore(window)
{
// Choose an appropriate window depth based on the requested surface format.
// On deep color displays the default bit depth is 16-bit, so unless we need
// that level of precision we opt out of it (and the expensive RGB32 -> RGB64
// conversions that come with it if our backingstore depth does not match).
NSWindow *nsWindow = static_cast<QCocoaWindow *>(window->handle())->view().window;
auto colorSpaceName = NSColorSpaceFromDepth(nsWindow.depthLimit);
static const int kDefaultBitDepth = 8;
auto surfaceFormat = window->requestedFormat();
auto bitsPerSample = qMax(kDefaultBitDepth, qMax(surfaceFormat.redBufferSize(),
qMax(surfaceFormat.greenBufferSize(), surfaceFormat.blueBufferSize())));
// NSBestDepth does not seem to guarantee a window depth deep enough for the
// given bits per sample, even if documented as such. For example, requesting
// 10 bits per sample will not give us a 16-bit format, even if that's what's
// available. Work around this by manually bumping the bit depth.
bitsPerSample = !(bitsPerSample & (bitsPerSample - 1))
? bitsPerSample : qNextPowerOfTwo(bitsPerSample);
auto bestDepth = NSBestDepth(colorSpaceName, bitsPerSample, 0, NO, nullptr);
// Disable dynamic depth limit, otherwise our depth limit will be overwritten
// by AppKit if the window moves to a screen with a different depth. We call
// this before setting the depth limit, as the call will reset the depth to 0.
[nsWindow setDynamicDepthLimit:NO];
qCDebug(lcQpaBackingStore) << "Using" << NSBitsPerSampleFromDepth(bestDepth)
<< "bit window depth for" << nsWindow;
nsWindow.depthLimit = bestDepth;
}
QNSWindowBackingStore::~QNSWindowBackingStore()

View File

@ -1660,21 +1660,6 @@ QCocoaNSWindow *QCocoaWindow::createNSWindow(bool shouldBePanel)
applyContentBorderThickness(nsWindow);
// Prevent CoreGraphics RGB32 -> RGB64 backing store conversions on deep color
// displays by forcing 8-bit components, unless a deep color format has been
// requested. This conversion uses significant CPU time.
QSurface::SurfaceType surfaceType = QPlatformWindow::window()->surfaceType();
bool usesCoreGraphics = surfaceType == QSurface::RasterSurface || surfaceType == QSurface::RasterGLSurface;
QSurfaceFormat surfaceFormat = QPlatformWindow::window()->format();
bool usesDeepColor = surfaceFormat.redBufferSize() > 8 ||
surfaceFormat.greenBufferSize() > 8 ||
surfaceFormat.blueBufferSize() > 8;
bool usesLayer = view().layer;
if (usesCoreGraphics && !usesDeepColor && !usesLayer) {
[nsWindow setDynamicDepthLimit:NO];
[nsWindow setDepthLimit:NSWindowDepthTwentyfourBitRGB];
}
if (format().colorSpace() == QSurfaceFormat::sRGBColorSpace)
nsWindow.colorSpace = NSColorSpace.sRGBColorSpace;