Merge remote-tracking branch 'origin/5.9' into dev

Conflicts:
	.qmake.conf
	mkspecs/common/msvc-desktop.conf
	mkspecs/win32-g++/qmake.conf
	mkspecs/win32-icc/qmake.conf
	src/platformsupport/fontdatabases/mac/coretext.pri
	src/plugins/platforms/cocoa/qcocoawindow.h
	src/plugins/platforms/cocoa/qcocoawindow.mm

Change-Id: I74a6f7705c9547ed8bbac7260eb4645543e32655
This commit is contained in:
Liang Qi 2017-05-29 10:06:10 +02:00
commit 6a772fd201
74 changed files with 12550 additions and 3755 deletions

View File

@ -256,6 +256,7 @@ Gui, printing, widget options:
-opengles3 ........... Enable OpenGL ES 3.x support instead of ES 2.x [auto]
-angle ............... Use bundled ANGLE to support OpenGL ES 2.0 [auto]
(Windows only)
-combined-angle-lib .. Merge LibEGL and LibGLESv2 into LibANGLE (Windows only)
-qpa <name> .......... Select default QPA backend (e.g., xcb, cocoa, windows)
-xcb-xlib............. Enable Xcb-Xlib support [auto]

View File

@ -500,7 +500,7 @@
},
"use_gold_linker": {
"label": "Using gold linker",
"condition": "!config.msvc && !config.integrity && tests.use_gold_linker",
"condition": "!config.win32 && !config.integrity && tests.use_gold_linker",
"output": [ "privateConfig", "useGoldLinker" ]
},
"optimize_debug": {

586
dist/changes-5.9.0 vendored Normal file
View File

@ -0,0 +1,586 @@
Qt 5.9 introduces many new features and improvements as well as bugfixes
over the 5.8.x series. For more details, refer to the online documentation
included in this distribution. The documentation is also available online:
http://doc.qt.io/qt-5/index.html
The Qt version 5.9 series is binary compatible with the 5.8.x series.
Applications compiled for 5.8 will continue to run with 5.9.
Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Qt Bug Tracker:
https://bugreports.qt.io/
Each of these identifiers can be entered in the bug tracker to obtain more
information about a particular change.
****************************************************************************
* Important Behavior Changes *
****************************************************************************
- [QTBUG-48658][QTBUG-56306] The linuxfb and bsdfb platform plugins now
follow the behavior of eglfs by making the first window fullscreen. This
provides consistency and avoids applications having to make their
windows match the screen size manually. The new behavior can be disabled
by setting the environment variable QT_QPA_FB_FORCE_FULLSCREEN=0.
- [QTBUG-59391] A QVariant containing a std::nullptr_t is now streamable
to/from QDataStream.
- Whitespace inside identifiers in logging rule files is not ignored
anymore. That is, "[my category]" and "[mycategory]" are now two different
categories.
- [QTBUG-59849] QSysInfo::productType() and QFileSelector behavior on
macOS was restored to match what Qt used to return in version 5.7.0 and
earlier. The behavior found in Qt 5.6.2, 5.7.1 and 5.8.0 is removed.
- [QTBUG-60771] Reverted a change that caused Qt 5.6 through 5.8 not to
connect to QSystemSemaphore and QSharedMemory created by running
applications using Qt earlier than 5.6. Unfortunately, this means that Qt
5.9 will not connect to 5.6-5.8.
- QTouchEvent
* Touch point ids are now unique even between different devices. As a
consequence of that, you cannot anymore assume that
QTouchEvent::TouchPoint::id has the same value as given by the native
platform nor the same value as given by synthesized touch points.
****************************************************************************
* General Notes *
****************************************************************************
Deprecation Notice
------------------
- QSysInfo::windowsVersion() and QSysInfo::macVersion() are deprecated and
are replaced by the newly introduced class QOperatingSystemVersion.
- [QTBUG-57288] Removed support for WinRT/Windows Phone 8.1.
- Support for CMake < 3.1 is deprecated and will be removed in Qt 5.10.
Future Compatibility Notice
---------------------------
- [QTBUG-59849] The identifiers that QSysInfo::productType() and
QFileSelector will use to identify macOS systems will change in Qt 6.0
to match the Apple naming guidelines which will be current then.
Potentially Source-Incompatible Changes
---------------------------------------
- The internal Q_COMPILER_UNICODE_STRINGS macro is now defined if the
compiler supports charNN_t, even if the standard library does not. To
check for availability of std::uNNstring, use the new
Q_STDLIB_UNICODE_STRINGS macro.
Third-Party Code
----------------
- Sqlite was updated to version 3.16.1.
- libpng was updated to version 1.6.28.
- Bundled HarfBuzz-NG copy updated to 1.4.1
- Gradle wrapper 3.4.1 was added as a third-party component (see
src/3rdparty/gradle). The code is licensed under Apache License 2.0, and is
used to create Android packages.
- PCRE 8.39 (src/3rdparty/pcre) was removed as a third-party component.
- PCRE 2 10.22 was added in src/3rdparty/pcre2 as a third-party
component. The code is licensed under the BSD 3-clause "New" or "Revised"
License, and is required by QRegularExpression (at least version 10.20).
****************************************************************************
* Library *
****************************************************************************
QtCore
------
- QProcessEnvironment is now available on iOS, tvOS, watchOS, and VxWorks.
- [QTBUG-57715] QCoreApplication::applicationVersion now defaults to an
appropriate platform-specific value. On Windows, it defaults to the
PRODUCTVERSION parameter of the VERSIONINFO resource for classic desktop
apps, and the version attribute of the application package manifest for
Univeral Windows Platform apps. On Apple Platforms (macOS, iOS, tvOS,
watchOS), it defaults to the CFBundleVersion property of the information
property list (Info.plist) file. On Android, it defaults to the
android:versionName attribute of the AndroidManifest.xml manifest
element. On other platforms, the default remains an empty string.
- Added QStaticByteArrayMatcher.
- Added new qfloat16 class.
- QStringLiteral is now guaranteed to be evaluated at compile-time. The
last platform (QNX) to use the QString::fromUtf8() fallback has been
ported to allocate the string data statically, too.
- Event loop:
* [QTBUG-33489][QTBUG-48717] QCoreApplication::flush() is now
deprecated. Use QCoreApplication::processEvents() and
QCoreApplication::sendPostedEvents() instead.
- QByteArray:
* Added toHex() overload to insert a separator character between the hex
bytes.
- QChar:
* Disambiguated comparisons with nullptr constants such as '\0', which
5.8.0 broke. As a consequence, QChar<->int comparisons are no longer
deprecated, as this was a failed attempt at fixing the ambiguity.
- QCryptographicHash:
* [QTBUG-59770] QCryptographicHash now properly calculates SHA3 message
digests. Before, when asked to calculate a SHA3 digest, it calculated
a Keccak digest instead.
- QDataStream:
* Added operator<< and operator>> overloads that take std::nullptr_t, to
facilitate generic code.
* Added operator<< and operator>> for streaming QFlags into and out of
QDataStreams.
- QDateTime:
* [QTBUG-52284][QTBUG-56397][QTBUG-56460][QTBUG-56345] Fixed a number of
bugs related to handling of timezone offsets close to or during daylight
savings changeovers, as well as timezones changing their standard
offset.
* [QTBUG-57298][QTBUG-57320] Fixed the handling of time zones in the
toString() overload taking Qt::TextDate.
- QDir:
* Fixed a bug that caused QDir::mkpath() to create the wrong directory
if the requested path contained a symbolic link and "../".
* Added isEmpty(), that can help determining if a directory listing would
be empty.
- QFileInfo:
* [QTBUG-48306] Made sure that all file lifecycle times are in local
time. This was probably true before, but is now explicit.
- QFileSelector:
* [QTBUG-51230] Removed the requirement for an unused default base file
in case you want to load only a variant.
- QFlags:
* Added operator<< and operator>> for streaming QFlags into and out of
QDataStreams.
- QHash / QMultiHash:
* [QTBUG-60395] Fixed a bug that caused operator== to fail in the presence
of duplicated keys.
- QLocale:
* Additional flags in QLocale::NumberOption allow generating strings
from doubles in accordance to EcmaScript's Number.toPrecision(n).
* Qt functions now always use the system time zone on Apple platforms,
the same that low-level C APIs like localtime() does. Previously,
converting dates and times to strings would use the "default" time
zone (which is almost always the same as the "system" time zone but
could be changed with the Apple API).
- QLockFile:
* [QTBUG-49640] Fixed a bug that caused QLockFile not to recognize a
stale lock file if the machine's hostname contained non-US-ASCII
characters, on Unix. A Windows fix is still pending.
* Fixed a deadlock occurring if a corrupted lock file's modification
time is in the future.
- QMetaObject:
* [QTBUG-60185] Fixed crash in QMetaObject::invokeMethod() and
QMetaMethod::invoke() with QueuedConnection and types whose metatype gets
automatically registered.
- QObject:
* QObject::dumpObjectInfo and QObject::dumpObjectTree are now fully
functional even in a non-debug build of Qt.
* QObject::dumpObjectInfo and QObject::dumpObjectTree now have const
overloads.
* Added a startTimer() overload taking std::chrono values.
* [QTBUG-58054] Fixed an incompatibility with using noexcept functions as
connect() targets in C++17 mode.
- QSettings:
* [QTBUG-34919] Added proper support for system-wide configuration file
lookup based on XDG spec (XDG_CONFIG_DIRS) on Unix based systems.
* [QTBUG-58531] Fixed data corruption when reading byte arrays on macOS.
- QSharedPointer:
* [QTBUG-49824] Fixed undefined behavior when creating an object with
QSharedPointer::create() and its constructor throws an exception.
- QStorageInfo:
* Added QStorageInfo::subvolume(), which returns the name of the
subvolume of a volume that was mounted, if one was detected. This is
currently implemented only for btrfs on Linux.
- QString:
* toLocal8Bit() now preserves nullness of the input QString (outputs
null QByteArray).
* QString::null is now deprecated. When used to construct a QString, use
QString() instead. When used to compare to a QString, replace with
QString::isNull().
- QStringRef:
* toLocal8Bit() and toLatin1() now preserve nullness of the input
QStringRef (output null QByteArrays).
- QThreadPool:
* The cancel() function suffers from several subtle issues and has been
replaced with a new tryTake() function.
- QUrl:
* The temporary compatibility in QUrl::resolved() that treated the base
URL as relative if its scheme matched the current URL's scheme has
been removed.
* [QTBUG-60364] Fixed a bug that caused certain domain names that look
like Internationalized Domain Names to become corrupt in decoded forms
of QUrl, notably toString() and toDisplayString().
- QVarLengthArray:
* Fixed a bug involving appending an item already in the container to
the container again.
* Added rvalue overloads of append() and push_back().
- QVariant:
* [QTBUG-56073] Fixed a bug that caused wrong results for comparisons of
QVariants containing either NaN or infinite numbers.
* Can now convert QUuid to and from QByteArray, not just QString.
* [QTBUG-58296] isNull() now returns true if the QVariant contains nullptr.
QtGui
-----
- OpenGL:
* [QTBUG-55496] QOpenGLShaderProgram now offers a built-in program binary
disk cache for systems with OpenGL ES 3.x or GL_ARB_get_program_binary.
This can lead to significant increases in performance when it comes to
application startup times for example. Usage is opt-in for direct C++
users of the class, however Qt's own main users of shaders, including Qt
Quick and QPainter's OpenGL engine, are migrated to use the new,
cache-enabled APIs. Opting out on application level is always possible
via Qt::AA_DisableShaderDiskCache.
- QIcon:
* [QTBUG-49820] Implemented support for Scale directory key according to
Icon Theme Spec. Icons created via QIcon::fromTheme() now have high
DPI support by specifying the Scale in the appropriate entry of the
relevant index.theme file.
- QImage:
* A new method reinterpretAsFormat() is has been added to change the
format of a QImage without converting the data.
- QMatrix4x4:
* operator*=() now calculates the correct result even if the RHS and LHS
are the same object.
- QPA:
* QPlatformScreen: Added an API to list available modes for a screen,
that is resolution and refresh rate.
* [QTBUG-58383] The function createForeignWindow() has been added to
QPlatormIntegration and is now responsible for creating foreign
windows. The function isForeignWindow() in QPlatformWindow has been
added, and platforms should implement this to return true for windows
created by createForeignWindow().
- QPainter:
* [QTBUG-28851] Fixed fills of negatively sized QRects.
- QRgba64:
* The default constructor on Clang and GCC builds now no longer
initializes with 0s, but leaves the value uninitialized. This is
consistent with MSVC behavior and pre-C++11 behavior of GCC and Clang.
- QScreen:
* Added manufacturer, model and serialNumber properties.
- QTextLine:
* Fixed a possible undefined behavior in the calculation of glyph right
bearing when a QTextLine layout is performed.
- QTouchEvent:
* TouchPoint::rect(), sceneRect() and screenRect() are deprecated; a
touchpoint is now modeled as an ellipse centered on a point, so please
use pos(), scenePos(), screenPos(), and ellipseDiameters() instead.
* QTouchEvent::TouchPoint::id values are now unique even between
different devices.
- QWindow:
* [QTBUG-58383] The "_q_foreignWinId" dynamic property is no longer set
nor read.
- Text:
* [QTBUG-56538] Added QTextDocument::toRawText() function.
* [QTBUG-48005] Fixed clipping errors and too small bounding rects for
some right-to-left text.
* [QTBUG-57241] Fixed crash for very tall glyphs
QtNetwork
---------
- The connect timeout from QAbstractSocket is now configurable through
QNetworkConfiguration.
- Added redirects policy to QNAM.
- Added HTTP Strict Transport Security to QNAM.
- Bearer management:
* [QTBUG-56228][QTBUG-52988] Fixed a bug that could cause a crash on
application exit, depending on the order of destruction of the
QCoreApplication object and the QtDBus manager thread.
- QHostAddress:
* QHostAddress is now implicitly shared.
* Added operator!=(SpecialAddress, QHostAddress).
- QSslSocket:
* Fixed connection to international domains (IDN) by normalizing to
ASCII equivalent before comparing the host name in the certificate.
* [QTBUG-56102] Allow QSslSocket (Secure Transport back-end) to use a temporary
keychain on macOS instead of a default one; this can be enabled via a special
environment variable QT_SSL_USE_TEMPORARY_KEYCHAIN (this feature is disabled
by default).
* [QTBUG-60233] QSslSocket (Secure Transport back-end) now respects CA
certificates set in QSslConfiguration (before was always implicitly using
the built-in anchor certificates in addition to a user provided configuration).
* [QTBUG-59480] Added a missing cipher (Secure Transport).
* [QTBUG-59930] Fixed spurious socket notifications in QCFSocketNotifer.
* [QTBUG-58214] Fixed spurious socket notifications on Windows.
QtTest
------
- QUuids are now printed on failure.
- Added QTest::addRow(), which is like newRow(), but can take printf-style
formatted strings.
QtWidgets
---------
- [QTBUG-26116] QWidget now has a tabletTracking property, analogous to
mouseTracking, which will enable TabletMove events while the stylus is
hovering, even if no button is pressed. This allows applications to show
feedback based on the other tablet event properties such as rotation and
tilt.
- Input:
* [QTBUG-42074][QTBUG-57003] Characters in the Unicode Private Use Area, as
well as zero-width joiners and zero-width non-joiners, are now accepted
as input in QLineEdit and QTextEdit.
- Qt::WA_WindowPropagation:
* [QTBUG-59106] Locale is now propagated consistently, along with font and
palette, within the widget hierarchy. Previously, setLocale() propagated
the new locale from parents to children (recursively) but new children
didn't inherit from their parents.
- QColorDialog:
* [QTBUG-58424] Fixed long standing bug that prevented custom colors in
QColorDialog to be stored in the settings.
- QDialog:
* [QTBUG-6018][QTBUG-12156][QTBUG-14430] Fixed a bug where accessing the
result of QDialog's result could yield an incorrect value in some
situation like using it as a delegate for item views.
- QErrorMessage:
* Critical (QtCriticalMsg) and informational (QtInfoMsg) messages are now
displayed properly. Previously, they appeared as if they were debug
(QtDebugMsg) ones.
- QFormLayout:
* [QTBUG-58693][QTBUG-15990] The functions takeRow() and removeRow(),
new in 5.8.0, now take and remove the correct row.
- QMacStyle:
* [QTBUG-57470] PE_IndicatorMenuCheckMark now looks for State_On instead of
the State_Selected to set its highlighted state. Its color is picked from
the style option palette.
- QPixmapStyle:
* Now handles progress bars with minimum != 0 correctly.
- QSizePolicy:
* Added transposed() method.
- QSystemTrayIcon:
* [QTBUG-49283] Support for custom icons in showMessage() was added.
- QTextEdit:
* [QTBUG-59196] Fixed initial char format of input method text as it is
in pre-edit mode.
****************************************************************************
* Platform-specific Changes *
****************************************************************************
Android
-------
- [QTBUG-44697] Removed old work-around which was causing OpenGL shader
compilation to fail on updated Android emulators.
- QTouchEvent::TouchPoints have correct ellipseDiameters() and rotation().
XCB/X11
-------
- [QTBUG-60389] Every QTouchEvent includes up-to-date keyboard modifiers.
- [QTBUG-59415] Every QTabletEvent includes up-to-date keyboard modifiers.
Linux
-----
- Added an option to switch from mailbox to FIFO mode in eglfs' EGLStream
backend. This is done by setting the environment variable
QT_QPA_EGLFS_STREAM_FIFO_LENGTH to a >= 1 value, the desired length of the
FIFO queue.
- [QTBUG-57411] Added support for cross-compilation for the MIPS CI20.
- Added support for cross-compilation targeting 64-bit Jetson TX1 systems.
- Added support for cross-compilation targeting Renesas R-Car H2 (Lager)
systems.
- The Raspberry Pi 3 device specs have been renamed from linux-rpi3-* to
linux-rasp-pi3-* in order to follow the pattern of the RPi 1 and 2 specs.
- [QTBUG-57980] Added support for specifying the primary screen in the
JSON config file in QT_QPA_EGLFS_KMS_CONFIG when running on DRM/KMS with
eglfs.
- The evdevtouch plugin now has the option to apply filtering and
prediction. Enabled by passing "filtered" as an argument. Prediction can
be specified by passing "prediction=X" as an argument, where X is in
milliseconds.
- linuxfb:
* [QTBUG-56306] Added experimental support for DRM dumb buffers. Enable
by setting the environment variable QT_QPA_FB_DRM to 1.
macOS
-----
- Extra mouse buttons are now correctly be mapped to correct Qt::MouseButton
values.
- Accessibility:
* [QTBUG-39008][QTBUG-54776][QTBUG-56043][QTBUG-57146] A common crash in
accessibility on macOS was fixed.
Solaris
-------
- [QTBUG-56293] Support for the Illumos distribution OpenIndiana (release
"Hipster") has been added. This is a community-supported partial port.
Windows
-------
- Support for Visual Studio 2017 has been added.
- Fixed frameMargins for WM_NCCALCSIZE when handled inside with
QAbstractNativeEventFilter.
- [QTBUG-55510][QTBUG-48242] Windows are now automatically resized when they
are moved on a screen to adapt to the new pixel ratio.
- [QTBUG-58446] Fixed a bug that caused applications to crash with
"Illegal instruction" faults when compiled with Visual Studio and run on
some older processors.
- [QTBUG-57023] Fixed a bug that caused QFile to create files with
truncated names if the file name was invalid. Now, QFile::open correctly
fails to create such files.
- PDF:
* [QTBUG-58954] Fixed a bug in PDF output when using high-dpi scaling
which was causing the display of warnings when opening the file in
Adobe Reader.
****************************************************************************
* Tools *
****************************************************************************
moc
---
- [QTBUG-59351] Fixed parsing errors in presence of C++14 digit separators.
- Added Support for C++17 nested namespaces
- Move-only types are now supported as return types of signals and slots.
configure & build system
------------------------
- [QTBUG-30083] Generalized command line overrides of installation
paths of external dependencies; see configure -help. Use configure
-list-libraries to find about known libraries.
- [QTBUG-42937][iOS] Added support for the configure -shared flag.
- [QTBUG-56225] Re-introduced creation of config.summary.
- [QTBUG-57908][QTBUG-59062] Fixed parsing of configure --xxx options.
- [QTBUG-57656][macOS] Fixed installation of header-only modules like
QtUiPlugin in framework builds of Qt.
- [QTBUG-58321] Switching to a different qmakespec for user projects will
now properly enable C++11 support if necessary.
- [QTBUG-58411] Added configure -list-features option. This is useful
for finding unnecessary features to disable with -no-feature-XXX.
- [QTBUG-58511] Fixed QMAKE_CXXFLAGS, etc. assignments on the configure
command line being ignored when building bootstrapped Qt tools while
not cross-building (in cross-builds, they are intentionally ignored).
- [QTBUG-60016] configure will now refuse to run if it finds variables
in its environment which are known to cause trouble.
- [QTBUG-60382] Fixed query of library paths from pkg-config.
- Added possibility to merge ANGLE's libEGL and libGLESv2 into QtANGLE;
configure option -combined-angle-lib.
- [Windows] The -no-rtti configure option was removed, as Qt fails
to build under that condition. To disable RTTI in user code, add
CONFIG+=rtti_off to your project file.
- [GCC] Debug builds of Qt are now optimized with -Og if available;
use -no-optimize-debug to disable. This is also applicable to user
projects; add CONFIG+=optimize_debug to your project file.
- Added possibility to optimize release builds for size instea of speed;
configure option -optimize-size.
qmake
-----
- [QTBUG-51598] Libs.private is now written to .pc files only when building
static libraries.
- [QTBUG-55279] Static plugins are now imported also into dynamic libraries,
not only executables. Various other improvements to static linking.
- [QTBUG-56965][Darwin] Fixed overriding QMAKE_*_DEPLOYMENT_TARGET from
within project files.
- [QTBUG-57343] Fixed execution of extra compilers' depend_commands in build
directories containing shell meta characters in their names,.
- [QTBUG-57276] Fixed QMAKE_PRE_LINK (always) and QMAKE_POST_LINK (in one
case) being ignored when building static libraries for Unix.
- [QTBUG-57435][VS] Fixed capitalization of <PlatformToolset> tags in the
generated vcxproj files.
- [QTBUG-57694][VS] Fixed bogus ToolsVersion attributes in the generated
vcxproj files.
- [QTBUG-57914][VS] Fixed handling of RC_FILE when generating single-
configuration vcxproj files.
- [QTBUG-59630][VS] Fixed uninitialized value of GenerateDebugInformation,
which was particularly bad if DebugFastLink was emitted for VS < 2015.
- [QTBUG-58710][MSVC/nmake] Fixed overlong lines in response files generated
for link.exe and lib.exe.
- [QTBUG-57502][Darwin] Added support for launch images in asset catalogs.
- [QTBUG-58126] Fixed the target compiler's default include and library paths
interfering with the build of host tools when cross-building.
- [QTBUG-58764] Fixed building of moc'able files with a Qt installation
in a path containing spaces.
- [QTBUG-58857] Added the ability to use CONFIG+=no_moc_predefs to suppress
the collection of the compiler's predefined macros for moc's use.
- [QTBUG-59004][Windows] '(n)make install' will now copy the timestamps of
the installed files, like it was already done on Unix.
- [QTBUG-59319] Fixed $$shadowed() function for the case where the source
tree lives in a symlinked or substituted path.
- [QTBUG-59779][Android][MinGW] Fixed CONFIG+=separate_debug_info.
- [QTBUG-38782][iOS] Added support for setting the Xcode development team
and provisioning profile.
- [QTBUG-58754][iOS] Fixed handling of bitcode.
- [Darwin] Binaries now automatically get @executable_path/Frameworks
added to RPATH, and libraries additionally @loader_path/Frameworks.
Suppress with CONFIG+=no_default_rpath.
- [Darwin][Xcode] QMAKE_BUNDLE_DATA now supports embedding Frameworks
and PlugIns.
- [macOS] Support for universal binaries has been re-introduced.
- Added the command line options -early and -late, plus -before (which is
the default) for symmetry with -after.
- The $$prompt() function will now exit qmake upon EOF on stdin.
- The touch() function now uses nanosecond precision if available.
- [MSVC] Qt now has a common mkspec for all Visual Studio versions, called
"win32-msvc". The old names which contained the version number are now
gone (but qmake scopes based on the old names continue to work).
In qmake project files, the version of the compiler can be obtained from
the MSC_VER and MSVC_VER variables (for example, for Visual Studio 2015,
those contain the values 1900 and 14.0, respectively). Those variables
are also available with the Intel compiler (win32-icc) and with Clang
(win32-clang-msvc).
- [Windows] The win32-clang-msvc qmakespec will now adjust the emulated
MSVC version to match that of the cl.exe found in PATH.
- [Windows] Fixed make 'install' targets to be idempotent.
- [Windows] '(n)make install' will not fail on file names containing the
plus sign any more.
- Numerous obsolete qmakespecs have been pruned.

View File

@ -46,7 +46,11 @@ manifestmeta.highlighted.names = "QtQuick/Qt Quick Demo - Same Game" \
"QtWinExtras/Quick Player" \
"QtMultimedia/QML Video Shader Effects Example" \
"QtCanvas3D/Interactive Mobile Phone Example" \
"QtLocation/Map Viewer (QML)"
"QtLocation/Map Viewer (QML)" \
"QtBluetooth/Bluetooth Low Energy Heart Rate Game" \
"QtCharts/Chart Themes Example" \
"QtDataVisualization/Bars Example" \
"QtDataVisualization/Surface Example"
manifestmeta.highlighted.attributes = isHighlighted:true

View File

@ -14,6 +14,7 @@ defines += Q_QDOC \
QT_DEPRECATED_* \
Q_NO_USING_KEYWORD \
__cplusplus \
Q_OS_.* \
Q_STDLIB_UNICODE_STRINGS \
Q_COMPILER_INITIALIZER_LISTS \
Q_COMPILER_UNICODE_STRINGS \

View File

@ -117,11 +117,13 @@ bool GSuggestCompletion::eventFilter(QObject *obj, QEvent *ev)
case Qt::Key_Return:
doneCompletion();
consumed = true;
break;
case Qt::Key_Escape:
editor->setFocus();
popup->hide();
consumed = true;
break;
case Qt::Key_Up:
case Qt::Key_Down:

View File

@ -98,8 +98,8 @@
The application allows you to manipulate the icon size with some
predefined sizes and a spin box. The predefined sizes are style
dependent, but most of the styles have the same values: Only the
Macintosh style differ by using 32 pixels, instead of 16 pixels,
dependent, but most of the styles have the same values. Only the
\macos style differs by using 32 pixels instead of 16 pixels
for toolbar buttons. You can navigate between the available styles
using the \uicontrol View menu.

13
mkspecs/common/angle.conf Normal file
View File

@ -0,0 +1,13 @@
# Renaming these files requires that the LIBRARY entry of their corresponding
# def files are also updated to reflect the name.
# The .def files are found in the angle directories:
#
# qtbase\src\3rdparty\angle\src\libEGL\libEGL[d?].def
# qtbase\src\3rdparty\angle\src\libEGL\libGLESv2[d?].def
#
# If a combined ANGLE library is used, the def files will automatically be
# combined into QtANGLE[d?].def by QtAngle.pro.
LIBEGL_NAME = libEGL
LIBGLESV2_NAME = libGLESv2
LIBQTANGLE_NAME = QtANGLE

View File

@ -108,5 +108,5 @@ VCPROJ_EXTENSION = .vcproj
VCSOLUTION_EXTENSION = .sln
VCPROJ_KEYWORD = Qt4VSv1.0
include(windows-gles.conf)
include(angle.conf)
include(windows-vulkan.conf)

View File

@ -1,7 +0,0 @@
# Output name of Qt's ANGLE GLES library. (Note that this is different from upstream ANGLE)
LIBQTANGLE_NAME = QtANGLE
# Set up .lib files used for linking
QMAKE_LIBS_OPENGL_ES2 = -l$${LIBQTANGLE_NAME} $$QMAKE_LIBS_OPENGL_ES2
QMAKE_LIBS_OPENGL_ES2_DEBUG = -l$${LIBQTANGLE_NAME}d $$QMAKE_LIBS_OPENGL_ES2_DEBUG

View File

@ -96,6 +96,6 @@ WINRT_ASSETS_PATH = $$PWD/assets
WINRT_MANIFEST.capabilities = defaults
WINRT_MANIFEST.capabilities_device = defaults
include(../windows-gles.conf)
include(../angle.conf)
load(qt_config)

View File

@ -14,13 +14,8 @@ contains(TEMPLATE, "vc.*") {
ACTIVEQT_IDC = $${QMAKE_IDC}
ACTIVEQT_IDL = $${QMAKE_IDL}
ACTIVEQT_TARGET = \"$(TargetPath)\"
win32-msvc {
ACTIVEQT_NEWLINE = $$escape_expand(\\t)
ACTIVEQT_OUTPUT = $(IntDir)/$${TARGET}
} else {
ACTIVEQT_NEWLINE = $$escape_expand(\\n\\t)
ACTIVEQT_OUTPUT = $(IntDir)$${TARGET}
}
ACTIVEQT_NEWLINE = $$escape_expand(\\n\\t)
ACTIVEQT_OUTPUT = $(IntDir)$${TARGET}
ACTIVEQT_TLBOUT = \"$(TargetDir)/$${TARGET}.tlb\"
GENERATED += $${OBJECTS_DIR}/$${TARGET}.idl $${ACTIVEQT_TLBOUT}
} else {

View File

@ -1,4 +1,14 @@
QT_FOR_CONFIG += gui
qtConfig(opengles2) {
# Depending on the configuration we use libQtANGLE or libEGL and libGLESv2
qtConfig(combined-angle-lib) {
QMAKE_LIBS_OPENGL_ES2 = -l$${LIBQTANGLE_NAME} $$QMAKE_LIBS_OPENGL_ES2
QMAKE_LIBS_OPENGL_ES2_DEBUG = -l$${LIBQTANGLE_NAME}d $$QMAKE_LIBS_OPENGL_ES2_DEBUG
} else {
QMAKE_LIBS_OPENGL_ES2 = -l$${LIBEGL_NAME} -l$${LIBGLESV2_NAME} $$QMAKE_LIBS_OPENGL_ES2
QMAKE_LIBS_OPENGL_ES2_DEBUG = -l$${LIBEGL_NAME}d -l$${LIBGLESV2_NAME}d $$QMAKE_LIBS_OPENGL_ES2_DEBUG
}
# For Desktop, use the ANGLE library location passed on from configure.
INCLUDEPATH += $$QMAKE_INCDIR_OPENGL_ES2
CONFIG(debug, debug|release) {

View File

@ -79,7 +79,7 @@ QMAKE_STRIPFLAGS_LIB += --strip-unneeded
QMAKE_OBJCOPY = $${CROSS_COMPILE}objcopy
QMAKE_NM = $${CROSS_COMPILE}nm -P
include(../common/windows-gles.conf)
include(../common/angle.conf)
include(../common/windows-vulkan.conf)
include(../common/gcc-base.conf)

View File

@ -59,7 +59,7 @@ QMAKE_LIB = xilib /NOLOGO
DSP_EXTENSION = .dsp
include(../common/windows-gles.conf)
include(../common/angle.conf)
include(../common/windows-vulkan.conf)
load(qt_config)

View File

@ -950,12 +950,8 @@ bool VCCLCompilerTool::parseOption(const char* option)
ForceConformanceInForLoopScope = ((*c) == '-' ? _False : _True);
else if(fourth == 'w')
TreatWChar_tAsBuiltInType = ((*c) == '-' ? _False : _True);
else if (config->CompilerVersion >= NET2013 && strncmp(option + 4, "strictStrings", 13) == 0)
AdditionalOptions += option;
else if (config->CompilerVersion >= NET2015 && strncmp(option + 4, "throwingNew", 11) == 0)
AdditionalOptions += option;
else
found = false;
AdditionalOptions += option;
} else {
found = false; break;
}
@ -1155,7 +1151,7 @@ bool VCCLCompilerTool::parseOption(const char* option)
case 'u':
if (!second)
UndefineAllPreprocessorDefinitions = _True;
else if (second == 't' && third == 'f' && fourth == '8')
else if (strcmp(option + 2, "tf-8") == 0)
AdditionalOptions += option;
else
found = false;

View File

@ -6,7 +6,7 @@
"Description": "SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.",
"Homepage": "http://www.sqlite.org/",
"Version": "3.16.1",
"Version": "3.16.2",
"License": "Public Domain",
"Copyright": "The authors disclaim copyright to the source code. However, a license can be obtained if needed."
}

View File

@ -1,6 +1,6 @@
/******************************************************************************
** This file is an amalgamation of many separate C source files from SQLite
** version 3.16.1. By combining all the individual C code files into this
** version 3.16.2. By combining all the individual C code files into this
** single large file, the entire code can be compiled as a single translation
** unit. This allows many compilers to do optimizations that would not be
** possible if the files were compiled separately. Performance improvements
@ -381,9 +381,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
#define SQLITE_VERSION "3.16.1"
#define SQLITE_VERSION_NUMBER 3016001
#define SQLITE_SOURCE_ID "2017-01-03 18:27:03 979f04392853b8053817a3eea2fc679947b437fd"
#define SQLITE_VERSION "3.16.2"
#define SQLITE_VERSION_NUMBER 3016002
#define SQLITE_SOURCE_ID "2017-01-06 16:32:41 a65a62893ca8319e89e48b8a38cf8a59c69a8209"
/*
** CAPI3REF: Run-Time Library Version Numbers
@ -4156,8 +4156,12 @@ SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt*);
** METHOD: sqlite3_stmt
**
** ^Return the number of columns in the result set returned by the
** [prepared statement]. ^This routine returns 0 if pStmt is an SQL
** statement that does not return data (for example an [UPDATE]).
** [prepared statement]. ^If this routine returns 0, that means the
** [prepared statement] returns no data (for example an [UPDATE]).
** ^However, just because this routine returns a positive number does not
** mean that one or more rows of data will be returned. ^A SELECT statement
** will always have a positive sqlite3_column_count() but depending on the
** WHERE clause constraints and the table content, it might return no rows.
**
** See also: [sqlite3_data_count()]
*/
@ -12861,8 +12865,10 @@ SQLITE_PRIVATE int sqlite3VdbeAddOp4Int(Vdbe*,int,int,int,int,int);
SQLITE_PRIVATE void sqlite3VdbeEndCoroutine(Vdbe*,int);
#if defined(SQLITE_DEBUG) && !defined(SQLITE_TEST_REALLOC_STRESS)
SQLITE_PRIVATE void sqlite3VdbeVerifyNoMallocRequired(Vdbe *p, int N);
SQLITE_PRIVATE void sqlite3VdbeVerifyNoResultRow(Vdbe *p);
#else
# define sqlite3VdbeVerifyNoMallocRequired(A,B)
# define sqlite3VdbeVerifyNoResultRow(A)
#endif
SQLITE_PRIVATE VdbeOp *sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp, int iLineno);
SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe*,int,char*);
@ -70277,6 +70283,7 @@ static SQLITE_NOINLINE const void *valueToText(sqlite3_value* pVal, u8 enc){
assert( (pVal->flags & MEM_RowSet)==0 );
assert( (pVal->flags & (MEM_Null))==0 );
if( pVal->flags & (MEM_Blob|MEM_Str) ){
if( ExpandBlob(pVal) ) return 0;
pVal->flags |= MEM_Str;
if( pVal->enc != (enc & ~SQLITE_UTF16_ALIGNED) ){
sqlite3VdbeChangeEncoding(pVal, enc & ~SQLITE_UTF16_ALIGNED);
@ -71625,6 +71632,22 @@ SQLITE_PRIVATE void sqlite3VdbeVerifyNoMallocRequired(Vdbe *p, int N){
}
#endif
/*
** Verify that the VM passed as the only argument does not contain
** an OP_ResultRow opcode. Fail an assert() if it does. This is used
** by code in pragma.c to ensure that the implementation of certain
** pragmas comports with the flags specified in the mkpragmatab.tcl
** script.
*/
#if defined(SQLITE_DEBUG) && !defined(SQLITE_TEST_REALLOC_STRESS)
SQLITE_PRIVATE void sqlite3VdbeVerifyNoResultRow(Vdbe *p){
int i;
for(i=0; i<p->nOp; i++){
assert( p->aOp[i].opcode!=OP_ResultRow );
}
}
#endif
/*
** This function returns a pointer to the array of opcodes associated with
** the Vdbe passed as the first argument. It is the callers responsibility
@ -109544,12 +109567,25 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
onError = OE_Abort;
}
if( ix==0 && pPk==pIdx && onError==OE_Replace && pPk->pNext==0 ){
/* Collision detection may be omitted if all of the following are true:
** (1) The conflict resolution algorithm is REPLACE
** (2) The table is a WITHOUT ROWID table
** (3) There are no secondary indexes on the table
** (4) No delete triggers need to be fired if there is a conflict
** (5) No FK constraint counters need to be updated if a conflict occurs.
*/
if( (ix==0 && pIdx->pNext==0) /* Condition 3 */
&& pPk==pIdx /* Condition 2 */
&& onError==OE_Replace /* Condition 1 */
&& ( 0==(db->flags&SQLITE_RecTriggers) || /* Condition 4 */
0==sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0))
&& ( 0==(db->flags&SQLITE_ForeignKeys) || /* Condition 5 */
(0==pTab->pFKey && 0==sqlite3FkReferences(pTab)))
){
sqlite3VdbeResolveLabel(v, addrUniqueOk);
continue;
}
/* Check to see if the new index entry will be unique */
sqlite3VdbeAddOp4Int(v, OP_NoConflict, iThisCur, addrUniqueOk,
regIdx, pIdx->nKeyCol); VdbeCoverage(v);
@ -111795,11 +111831,12 @@ SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3 *db){
/* Property flags associated with various pragma. */
#define PragFlg_NeedSchema 0x01 /* Force schema load before running */
#define PragFlg_NoColumns 0x02 /* OP_ResultRow called with zero columns */
#define PragFlg_ReadOnly 0x04 /* Read-only HEADER_VALUE */
#define PragFlg_Result0 0x08 /* Acts as query when no argument */
#define PragFlg_Result1 0x10 /* Acts as query when has one argument */
#define PragFlg_SchemaOpt 0x20 /* Schema restricts name search if present */
#define PragFlg_SchemaReq 0x40 /* Schema required - "main" is default */
#define PragFlg_NoColumns1 0x04 /* zero columns if RHS argument is present */
#define PragFlg_ReadOnly 0x08 /* Read-only HEADER_VALUE */
#define PragFlg_Result0 0x10 /* Acts as query when no argument */
#define PragFlg_Result1 0x20 /* Acts as query when has one argument */
#define PragFlg_SchemaOpt 0x40 /* Schema restricts name search if present */
#define PragFlg_SchemaReq 0x80 /* Schema required - "main" is default */
/* Names of columns for pragmas that return multi-column result
** or that return single-column results where the name of the
@ -111876,14 +111913,14 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
{/* zName: */ "application_id",
/* ePragTyp: */ PragTyp_HEADER_VALUE,
/* ePragFlg: */ PragFlg_Result0,
/* ePragFlg: */ PragFlg_NoColumns1|PragFlg_Result0,
/* ColNames: */ 0, 0,
/* iArg: */ BTREE_APPLICATION_ID },
#endif
#if !defined(SQLITE_OMIT_AUTOVACUUM)
{/* zName: */ "auto_vacuum",
/* ePragTyp: */ PragTyp_AUTO_VACUUM,
/* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq,
/* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ 0 },
#endif
@ -111891,7 +111928,7 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_AUTOMATIC_INDEX)
{/* zName: */ "automatic_index",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_AutoIndex },
#endif
@ -111904,31 +111941,31 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
{/* zName: */ "cache_size",
/* ePragTyp: */ PragTyp_CACHE_SIZE,
/* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq,
/* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ 0 },
#endif
#if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
{/* zName: */ "cache_spill",
/* ePragTyp: */ PragTyp_CACHE_SPILL,
/* ePragFlg: */ PragFlg_Result0|PragFlg_SchemaReq,
/* ePragFlg: */ PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ 0 },
#endif
{/* zName: */ "case_sensitive_like",
/* ePragTyp: */ PragTyp_CASE_SENSITIVE_LIKE,
/* ePragFlg: */ 0,
/* ePragFlg: */ PragFlg_NoColumns,
/* ColNames: */ 0, 0,
/* iArg: */ 0 },
{/* zName: */ "cell_size_check",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_CellSizeCk },
#if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
{/* zName: */ "checkpoint_fullfsync",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_CkptFullFSync },
#endif
@ -111949,21 +111986,21 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
{/* zName: */ "count_changes",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_CountRows },
#endif
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_OS_WIN
{/* zName: */ "data_store_directory",
/* ePragTyp: */ PragTyp_DATA_STORE_DIRECTORY,
/* ePragFlg: */ 0,
/* ePragFlg: */ PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ 0 },
#endif
#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
{/* zName: */ "data_version",
/* ePragTyp: */ PragTyp_HEADER_VALUE,
/* ePragFlg: */ PragFlg_Result0|PragFlg_ReadOnly,
/* ePragFlg: */ PragFlg_ReadOnly|PragFlg_Result0,
/* ColNames: */ 0, 0,
/* iArg: */ BTREE_DATA_VERSION },
#endif
@ -111977,7 +112014,7 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED)
{/* zName: */ "default_cache_size",
/* ePragTyp: */ PragTyp_DEFAULT_CACHE_SIZE,
/* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq,
/* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1,
/* ColNames: */ 0, 1,
/* iArg: */ 0 },
#endif
@ -111985,7 +112022,7 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
{/* zName: */ "defer_foreign_keys",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_DeferFKs },
#endif
@ -111993,14 +112030,14 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
{/* zName: */ "empty_result_callbacks",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_NullCallback },
#endif
#if !defined(SQLITE_OMIT_UTF16)
{/* zName: */ "encoding",
/* ePragTyp: */ PragTyp_ENCODING,
/* ePragFlg: */ PragFlg_Result0,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ 0 },
#endif
@ -112022,7 +112059,7 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
{/* zName: */ "foreign_keys",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_ForeignKeys },
#endif
@ -112030,19 +112067,19 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
{/* zName: */ "freelist_count",
/* ePragTyp: */ PragTyp_HEADER_VALUE,
/* ePragFlg: */ PragFlg_Result0|PragFlg_ReadOnly,
/* ePragFlg: */ PragFlg_ReadOnly|PragFlg_Result0,
/* ColNames: */ 0, 0,
/* iArg: */ BTREE_FREE_PAGE_COUNT },
#endif
#if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
{/* zName: */ "full_column_names",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_FullColNames },
{/* zName: */ "fullfsync",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_FullFSync },
#endif
@ -112062,7 +112099,7 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_CHECK)
{/* zName: */ "ignore_check_constraints",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_IgnoreChecks },
#endif
@ -112120,14 +112157,14 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
{/* zName: */ "legacy_file_format",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_LegacyFileFmt },
#endif
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_ENABLE_LOCKING_STYLE
{/* zName: */ "lock_proxy_file",
/* ePragTyp: */ PragTyp_LOCK_PROXY_FILE,
/* ePragFlg: */ 0,
/* ePragFlg: */ PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ 0 },
#endif
@ -112161,7 +112198,7 @@ static const PragmaName aPragmaName[] = {
/* iArg: */ 0 },
{/* zName: */ "page_size",
/* ePragTyp: */ PragTyp_PAGE_SIZE,
/* ePragFlg: */ PragFlg_Result0|PragFlg_SchemaReq,
/* ePragFlg: */ PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ 0 },
#endif
@ -112175,7 +112212,7 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
{/* zName: */ "query_only",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_QueryOnly },
#endif
@ -112189,12 +112226,12 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
{/* zName: */ "read_uncommitted",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_ReadUncommitted },
{/* zName: */ "recursive_triggers",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_RecTriggers },
#endif
@ -112208,14 +112245,14 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
{/* zName: */ "reverse_unordered_selects",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_ReverseOrder },
#endif
#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
{/* zName: */ "schema_version",
/* ePragTyp: */ PragTyp_HEADER_VALUE,
/* ePragFlg: */ PragFlg_Result0,
/* ePragFlg: */ PragFlg_NoColumns1|PragFlg_Result0,
/* ColNames: */ 0, 0,
/* iArg: */ BTREE_SCHEMA_VERSION },
#endif
@ -112229,13 +112266,13 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
{/* zName: */ "short_column_names",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_ShortColNames },
#endif
{/* zName: */ "shrink_memory",
/* ePragTyp: */ PragTyp_SHRINK_MEMORY,
/* ePragFlg: */ 0,
/* ePragFlg: */ PragFlg_NoColumns,
/* ColNames: */ 0, 0,
/* iArg: */ 0 },
{/* zName: */ "soft_heap_limit",
@ -112247,7 +112284,7 @@ static const PragmaName aPragmaName[] = {
#if defined(SQLITE_DEBUG)
{/* zName: */ "sql_trace",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_SqlTrace },
#endif
@ -112262,7 +112299,7 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
{/* zName: */ "synchronous",
/* ePragTyp: */ PragTyp_SYNCHRONOUS,
/* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq,
/* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ 0 },
#endif
@ -112276,12 +112313,12 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
{/* zName: */ "temp_store",
/* ePragTyp: */ PragTyp_TEMP_STORE,
/* ePragFlg: */ PragFlg_Result0,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ 0 },
{/* zName: */ "temp_store_directory",
/* ePragTyp: */ PragTyp_TEMP_STORE_DIRECTORY,
/* ePragFlg: */ 0,
/* ePragFlg: */ PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ 0 },
#endif
@ -112293,7 +112330,7 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
{/* zName: */ "user_version",
/* ePragTyp: */ PragTyp_HEADER_VALUE,
/* ePragFlg: */ PragFlg_Result0,
/* ePragFlg: */ PragFlg_NoColumns1|PragFlg_Result0,
/* ColNames: */ 0, 0,
/* iArg: */ BTREE_USER_VERSION },
#endif
@ -112301,27 +112338,27 @@ static const PragmaName aPragmaName[] = {
#if defined(SQLITE_DEBUG)
{/* zName: */ "vdbe_addoptrace",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_VdbeAddopTrace },
{/* zName: */ "vdbe_debug",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_SqlTrace|SQLITE_VdbeListing|SQLITE_VdbeTrace },
{/* zName: */ "vdbe_eqp",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_VdbeEQP },
{/* zName: */ "vdbe_listing",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_VdbeListing },
{/* zName: */ "vdbe_trace",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_VdbeTrace },
#endif
@ -112341,7 +112378,7 @@ static const PragmaName aPragmaName[] = {
#if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
{/* zName: */ "writable_schema",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
/* ColNames: */ 0, 0,
/* iArg: */ SQLITE_WriteSchema|SQLITE_RecoveryMode },
#endif
@ -112729,7 +112766,9 @@ SQLITE_PRIVATE void sqlite3Pragma(
}
/* Register the result column names for pragmas that return results */
if( (pPragma->mPragFlg & PragFlg_NoColumns)==0 ){
if( (pPragma->mPragFlg & PragFlg_NoColumns)==0
&& ((pPragma->mPragFlg & PragFlg_NoColumns1)==0 || zRight==0)
){
setPragmaResultColumnNames(v, pPragma);
}
@ -114274,6 +114313,15 @@ SQLITE_PRIVATE void sqlite3Pragma(
} /* End of the PRAGMA switch */
/* The following block is a no-op unless SQLITE_DEBUG is defined. Its only
** purpose is to execute assert() statements to verify that if the
** PragFlg_NoColumns1 flag is set and the caller specified an argument
** to the PRAGMA, the implementation has not added any OP_ResultRow
** instructions to the VM. */
if( (pPragma->mPragFlg & PragFlg_NoColumns1) && zRight ){
sqlite3VdbeVerifyNoResultRow(v);
}
pragma_out:
sqlite3DbFree(db, zLeft);
sqlite3DbFree(db, zRight);
@ -116188,8 +116236,7 @@ static void selectInnerLoop(
}else{
ecelFlags = 0;
}
assert( eDest!=SRT_Table || pSort==0 );
if( pSort && hasDistinct==0 && eDest!=SRT_EphemTab ){
if( pSort && hasDistinct==0 && eDest!=SRT_EphemTab && eDest!=SRT_Table ){
/* For each expression in pEList that is a copy of an expression in
** the ORDER BY clause (pSort->pOrderBy), set the associated
** iOrderByCol value to one more than the index of the ORDER BY
@ -116731,6 +116778,7 @@ static void generateSortTail(
VdbeComment((v, "%s", aOutEx[i].zName ? aOutEx[i].zName : aOutEx[i].zSpan));
}
switch( eDest ){
case SRT_Table:
case SRT_EphemTab: {
sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, regRowid);
sqlite3VdbeAddOp3(v, OP_Insert, iParm, regRow, regRowid);
@ -189750,7 +189798,7 @@ static void fts5SegIterNext(
else if( pLeaf->nn>pLeaf->szLeaf ){
pIter->iPgidxOff = pLeaf->szLeaf + fts5GetVarint32(
&pLeaf->p[pLeaf->szLeaf], iOff
);
);
pIter->iLeafOffset = iOff;
pIter->iEndofDoclist = iOff;
bNewTerm = 1;
@ -189784,6 +189832,7 @@ static void fts5SegIterNext(
*/
int nSz;
assert( p->rc==SQLITE_OK );
assert( pIter->iLeafOffset<=pIter->pLeaf->nn );
fts5FastGetVarint32(pIter->pLeaf->p, pIter->iLeafOffset, nSz);
pIter->bDel = (nSz & 0x0001);
pIter->nPos = nSz>>1;
@ -190778,7 +190827,7 @@ static void fts5ChunkIterate(
break;
}else{
pgno++;
pData = fts5DataRead(p, FTS5_SEGMENT_ROWID(pSeg->pSeg->iSegid, pgno));
pData = fts5LeafRead(p, FTS5_SEGMENT_ROWID(pSeg->pSeg->iSegid, pgno));
if( pData==0 ) break;
pChunk = &pData->p[4];
nChunk = MIN(nRem, pData->szLeaf - 4);
@ -193540,7 +193589,7 @@ static void fts5IndexIntegrityCheckSegment(
** ignore this b-tree entry. Otherwise, load it into memory. */
if( iIdxLeaf<pSeg->pgnoFirst ) continue;
iRow = FTS5_SEGMENT_ROWID(pSeg->iSegid, iIdxLeaf);
pLeaf = fts5DataRead(p, iRow);
pLeaf = fts5LeafRead(p, iRow);
if( pLeaf==0 ) break;
/* Check that the leaf contains at least one term, and that it is equal
@ -196816,7 +196865,7 @@ static void fts5SourceIdFunc(
){
assert( nArg==0 );
UNUSED_PARAM2(nArg, apUnused);
sqlite3_result_text(pCtx, "fts5: 2017-01-03 18:27:03 979f04392853b8053817a3eea2fc679947b437fd", -1, SQLITE_TRANSIENT);
sqlite3_result_text(pCtx, "fts5: 2017-01-06 16:32:41 a65a62893ca8319e89e48b8a38cf8a59c69a8209", -1, SQLITE_TRANSIENT);
}
static int fts5Init(sqlite3 *db){

View File

@ -121,9 +121,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
#define SQLITE_VERSION "3.16.1"
#define SQLITE_VERSION_NUMBER 3016001
#define SQLITE_SOURCE_ID "2017-01-03 18:27:03 979f04392853b8053817a3eea2fc679947b437fd"
#define SQLITE_VERSION "3.16.2"
#define SQLITE_VERSION_NUMBER 3016002
#define SQLITE_SOURCE_ID "2017-01-06 16:32:41 a65a62893ca8319e89e48b8a38cf8a59c69a8209"
/*
** CAPI3REF: Run-Time Library Version Numbers
@ -3896,8 +3896,12 @@ SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt*);
** METHOD: sqlite3_stmt
**
** ^Return the number of columns in the result set returned by the
** [prepared statement]. ^This routine returns 0 if pStmt is an SQL
** statement that does not return data (for example an [UPDATE]).
** [prepared statement]. ^If this routine returns 0, that means the
** [prepared statement] returns no data (for example an [UPDATE]).
** ^However, just because this routine returns a positive number does not
** mean that one or more rows of data will be returned. ^A SELECT statement
** will always have a positive sqlite3_column_count() but depending on the
** WHERE clause constraints and the table content, it might return no rows.
**
** See also: [sqlite3_data_count()]
*/

View File

@ -1,9 +1,8 @@
CONFIG += simd no_batch
include(../common/common.pri)
TARGET=$$qtLibraryTarget($${LIBQTANGLE_NAME})
DEF_FILE_TARGET=$${TARGET}
include(../common/gles_common.pri)
INCLUDEPATH += $$OUT_PWD/.. $$ANGLE_DIR/src/libANGLE
TARGET = $$qtLibraryTarget($${LIBQTANGLE_NAME})
DEF_FILE_TARGET = $${TARGET}
!build_pass {
# Merge libGLESv2 and libEGL .def files located under $$ANGLE_DIR into QtANGLE$${SUFFIX}.def
@ -54,361 +53,7 @@ INCLUDEPATH += $$OUT_PWD/.. $$ANGLE_DIR/src/libANGLE
}
}
# Remember to adapt tools/configure/configureapp.cpp if the Direct X version changes.
!winrt: \
LIBS_PRIVATE += -ld3d9
winrt: \
LIBS_PRIVATE += -ld3dcompiler -ldxgi -ld3d11
LIBS_PRIVATE += -ldxguid
STATICLIBS = translator preprocessor
for(libname, STATICLIBS) {
# Appends 'd' to the library for debug builds and builds up the fully
# qualified path to pass to the linker.
staticlib = $$QT_BUILD_TREE/lib/$${QMAKE_PREFIX_STATICLIB}$$qtLibraryTarget($$libname).$${QMAKE_EXTENSION_STATICLIB}
LIBS_PRIVATE += $$staticlib
PRE_TARGETDEPS += $$staticlib
}
DEFINES += LIBANGLE_IMPLEMENTATION LIBGLESV2_IMPLEMENTATION GL_APICALL= GL_GLEXT_PROTOTYPES= EGLAPI=
!winrt: DEFINES += ANGLE_ENABLE_D3D9 ANGLE_SKIP_DXGI_1_2_CHECK
HEADERS += \
$$ANGLE_DIR/src/common/mathutil.h \
$$ANGLE_DIR/src/common/blocklayout.h \
$$ANGLE_DIR/src/common/NativeWindow.h \
$$ANGLE_DIR/src/common/shadervars.h \
$$ANGLE_DIR/src/common/utilities.h \
$$ANGLE_DIR/src/common/MemoryBuffer.h \
$$ANGLE_DIR/src/common/angleutils.h \
$$ANGLE_DIR/src/common/debug.h \
$$ANGLE_DIR/src/common/event_tracer.h \
$$ANGLE_DIR/src/libANGLE/angletypes.h \
$$ANGLE_DIR/src/libANGLE/AttributeMap.h \
$$ANGLE_DIR/src/libANGLE/BinaryStream.h \
$$ANGLE_DIR/src/libANGLE/Buffer.h \
$$ANGLE_DIR/src/libANGLE/Caps.h \
$$ANGLE_DIR/src/libANGLE/Compiler.h \
$$ANGLE_DIR/src/libANGLE/Config.h \
$$ANGLE_DIR/src/libANGLE/Constants.h \
$$ANGLE_DIR/src/libANGLE/Context.h \
$$ANGLE_DIR/src/libANGLE/Data.h \
$$ANGLE_DIR/src/libANGLE/Device.h \
$$ANGLE_DIR/src/libANGLE/Display.h \
$$ANGLE_DIR/src/libANGLE/Error.h \
$$ANGLE_DIR/src/libANGLE/features.h \
$$ANGLE_DIR/src/libANGLE/Fence.h \
$$ANGLE_DIR/src/libANGLE/formatutils.h \
$$ANGLE_DIR/src/libANGLE/Framebuffer.h \
$$ANGLE_DIR/src/libANGLE/FramebufferAttachment.h \
$$ANGLE_DIR/src/libANGLE/HandleAllocator.h \
$$ANGLE_DIR/src/libANGLE/ImageIndex.h \
$$ANGLE_DIR/src/libANGLE/IndexRangeCache.h \
$$ANGLE_DIR/src/libANGLE/Program.h \
$$ANGLE_DIR/src/libANGLE/Query.h \
$$ANGLE_DIR/src/libANGLE/queryconversions.h \
$$ANGLE_DIR/src/libANGLE/RefCountObject.h \
$$ANGLE_DIR/src/libANGLE/Renderbuffer.h \
$$ANGLE_DIR/src/libANGLE/ResourceManager.h \
$$ANGLE_DIR/src/libANGLE/Sampler.h \
$$ANGLE_DIR/src/libANGLE/Shader.h \
$$ANGLE_DIR/src/libANGLE/State.h \
$$ANGLE_DIR/src/libANGLE/Surface.h \
$$ANGLE_DIR/src/libANGLE/Texture.h \
$$ANGLE_DIR/src/libANGLE/TransformFeedback.h \
$$ANGLE_DIR/src/libANGLE/Uniform.h \
$$ANGLE_DIR/src/libANGLE/validationEGL.h \
$$ANGLE_DIR/src/libANGLE/validationES.h \
$$ANGLE_DIR/src/libANGLE/validationES2.h \
$$ANGLE_DIR/src/libANGLE/validationES3.h \
$$ANGLE_DIR/src/libANGLE/VertexArray.h \
$$ANGLE_DIR/src/libANGLE/VertexAttribute.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/BufferD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/CompilerD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/copyimage.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/DeviceD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/DisplayD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/DynamicHLSL.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/EGLImageD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/formatutilsD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/FramebufferD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/generatemip.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/HLSLCompiler.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ImageD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/imageformats.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/IndexBuffer.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/IndexDataManager.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/loadimage.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/loadimage_etc.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ProgramD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/RenderbufferD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/RendererD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/RenderTargetD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ShaderD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ShaderExecutableD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/SurfaceD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/SwapChainD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/TextureD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/TextureStorage.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/TransformFeedbackD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/VaryingPacking.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/VertexBuffer.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/VertexDataManager.h \
$$ANGLE_DIR/src/libANGLE/renderer/BufferImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/CompilerImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/DeviceImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/DisplayImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/FenceNVImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/FenceSyncImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/FramebufferImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/Image.h \
$$ANGLE_DIR/src/libANGLE/renderer/ImplFactory.h \
$$ANGLE_DIR/src/libANGLE/renderer/ProgramImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/QueryImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/RenderbufferImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/Renderer.h \
$$ANGLE_DIR/src/libANGLE/renderer/ShaderImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/SurfaceImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/TextureImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/TransformFeedbackImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/VertexArrayImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/Workarounds.h \
$$ANGLE_DIR/src/libANGLE/resource.h \
$$ANGLE_DIR/src/libANGLE/ResourceManager.h \
$$ANGLE_DIR/src/libANGLE/Sampler.h \
$$ANGLE_DIR/src/libANGLE/Shader.h \
$$ANGLE_DIR/src/libANGLE/State.h \
$$ANGLE_DIR/src/libANGLE/Texture.h \
$$ANGLE_DIR/src/libANGLE/TransformFeedback.h \
$$ANGLE_DIR/src/libANGLE/Uniform.h \
$$ANGLE_DIR/src/libANGLE/validationES2.h \
$$ANGLE_DIR/src/libANGLE/validationES3.h \
$$ANGLE_DIR/src/libANGLE/validationES.h \
$$ANGLE_DIR/src/libANGLE/VertexArray.h \
$$ANGLE_DIR/src/libANGLE/VertexAttribute.h \
$$ANGLE_DIR/src/libANGLE/vertexconversion.h \
$$ANGLE_DIR/src/libGLESv2/entry_points_egl.h \
$$ANGLE_DIR/src/libGLESv2/entry_points_egl_ext.h \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_2_0.h \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_2_0_ext.h \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_3_0.h \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_3_0_ext.h \
$$ANGLE_DIR/src/libGLESv2/global_state.h \
$$ANGLE_DIR/src/libGLESv2/resource.h \
$$ANGLE_DIR/src/third_party/murmurhash/MurmurHash3.h
SOURCES += \
$$ANGLE_DIR/src/common/mathutil.cpp \
$$ANGLE_DIR/src/common/utilities.cpp \
$$ANGLE_DIR/src/common/MemoryBuffer.cpp \
$$ANGLE_DIR/src/common/angleutils.cpp \
$$ANGLE_DIR/src/common/debug.cpp \
$$ANGLE_DIR/src/common/event_tracer.cpp \
$$ANGLE_DIR/src/common/Float16ToFloat32.cpp \
$$ANGLE_DIR/src/third_party/murmurhash/MurmurHash3.cpp \
$$ANGLE_DIR/src/libANGLE/angletypes.cpp \
$$ANGLE_DIR/src/libANGLE/AttributeMap.cpp \
$$ANGLE_DIR/src/libANGLE/Buffer.cpp \
$$ANGLE_DIR/src/libANGLE/Caps.cpp \
$$ANGLE_DIR/src/libANGLE/Compiler.cpp \
$$ANGLE_DIR/src/libANGLE/Config.cpp \
$$ANGLE_DIR/src/libANGLE/Context.cpp \
$$ANGLE_DIR/src/libANGLE/Data.cpp \
$$ANGLE_DIR/src/libANGLE/Device.cpp \
$$ANGLE_DIR/src/libANGLE/Display.cpp \
$$ANGLE_DIR/src/libANGLE/Error.cpp \
$$ANGLE_DIR/src/libANGLE/Fence.cpp \
$$ANGLE_DIR/src/libANGLE/formatutils.cpp \
$$ANGLE_DIR/src/libANGLE/Framebuffer.cpp \
$$ANGLE_DIR/src/libANGLE/FramebufferAttachment.cpp \
$$ANGLE_DIR/src/libANGLE/HandleAllocator.cpp \
$$ANGLE_DIR/src/libANGLE/Image.cpp \
$$ANGLE_DIR/src/libANGLE/ImageIndex.cpp \
$$ANGLE_DIR/src/libANGLE/IndexRangeCache.cpp \
$$ANGLE_DIR/src/libANGLE/Platform.cpp \
$$ANGLE_DIR/src/libANGLE/Program.cpp \
$$ANGLE_DIR/src/libANGLE/Query.cpp \
$$ANGLE_DIR/src/libANGLE/queryconversions.cpp \
$$ANGLE_DIR/src/libANGLE/Renderbuffer.cpp \
$$ANGLE_DIR/src/libANGLE/ResourceManager.cpp \
$$ANGLE_DIR/src/libANGLE/Sampler.cpp \
$$ANGLE_DIR/src/libANGLE/Shader.cpp \
$$ANGLE_DIR/src/libANGLE/State.cpp \
$$ANGLE_DIR/src/libANGLE/Surface.cpp \
$$ANGLE_DIR/src/libANGLE/Texture.cpp \
$$ANGLE_DIR/src/libANGLE/TransformFeedback.cpp \
$$ANGLE_DIR/src/libANGLE/Uniform.cpp \
$$ANGLE_DIR/src/libANGLE/validationEGL.cpp \
$$ANGLE_DIR/src/libANGLE/validationES.cpp \
$$ANGLE_DIR/src/libANGLE/validationES2.cpp \
$$ANGLE_DIR/src/libANGLE/validationES3.cpp \
$$ANGLE_DIR/src/libANGLE/VertexArray.cpp \
$$ANGLE_DIR/src/libANGLE/VertexAttribute.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/DeviceImpl.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/DisplayImpl.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/Renderer.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/SurfaceImpl.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/BufferD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/CompilerD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/copyimage.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/DeviceD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/DisplayD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/DynamicHLSL.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/EGLImageD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/formatutilsD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/FramebufferD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/HLSLCompiler.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ImageD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/IndexBuffer.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/IndexDataManager.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/loadimage.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/loadimage_etc.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ProgramD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/RenderbufferD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/RendererD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/RenderTargetD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ShaderD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ShaderExecutableD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/SurfaceD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/TextureD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/TransformFeedbackD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/VaryingPacking.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/VertexBuffer.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/VertexDataManager.cpp \
$$ANGLE_DIR/src/libGLESv2/entry_points_egl.cpp \
$$ANGLE_DIR/src/libGLESv2/entry_points_egl_ext.cpp \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_2_0.cpp \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_2_0_ext.cpp \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_3_0.cpp \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_3_0_ext.cpp \
$$ANGLE_DIR/src/libGLESv2/global_state.cpp \
$$ANGLE_DIR/src/libGLESv2/libGLESv2.cpp \
$$ANGLE_DIR/src/libEGL/libEGL.cpp
SSE2_SOURCES += $$ANGLE_DIR/src/libANGLE/renderer/d3d/loadimageSSE2.cpp
DEBUG_SOURCE = $$ANGLE_DIR/src/libANGLE/Debug.cpp
debug_copy.input = DEBUG_SOURCE
debug_copy.output = $$ANGLE_DIR/src/libANGLE/Debug2.cpp
debug_copy.commands = $$QMAKE_COPY \"${QMAKE_FILE_IN}\" \"${QMAKE_FILE_OUT}\"
debug_copy.variable_out = GENERATED_SOURCES
debug_copy.CONFIG = target_predeps
QMAKE_EXTRA_COMPILERS += debug_copy
angle_d3d11 {
HEADERS += \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Blit11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Buffer11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Clear11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/dxgi_support_table.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Fence11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/formatutils11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Image11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/IndexBuffer11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/InputLayoutCache.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/internal_format_initializer_table.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/load_functions_table.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/PixelTransfer11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Query11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Renderer11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/RenderTarget11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/RenderStateCache.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/ShaderExecutable11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/StateManager11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/swizzle_format_info.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Trim11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/texture_format_table.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.h
SOURCES += \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Blit11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Buffer11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/dxgi_support_table.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Fence11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/formatutils11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Image11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/IndexBuffer11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/InputLayoutCache.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/internal_format_initializer_table.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/load_functions_table_autogen.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/PixelTransfer11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Query11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/RenderTarget11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/RenderStateCache.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/ShaderExecutable11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/swizzle_format_info_autogen.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Trim11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/texture_format_table_autogen.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp
}
!winrt {
HEADERS += \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Blit9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Buffer9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/DebugAnnotator9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Fence9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Framebuffer9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/formatutils9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Image9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/IndexBuffer9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Query9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Renderer9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/RenderTarget9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/ShaderExecutable9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/StateManager9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/SwapChain9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/VertexBuffer9.h \
$$ANGLE_DIR/src/third_party/systeminfo/SystemInfo.h
SOURCES += \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Blit9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Buffer9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/DebugAnnotator9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Fence9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Framebuffer9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/formatutils9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Image9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/IndexBuffer9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Query9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/RenderTarget9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/ShaderExecutable9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/StateManager9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/SwapChain9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/VertexBuffer9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/VertexDeclarationCache.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp \
$$ANGLE_DIR/src/third_party/systeminfo/SystemInfo.cpp
} else {
HEADERS += \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h
SOURCES += \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp
}
SOURCES += $$ANGLE_DIR/src/libEGL/libEGL.cpp
!static {
DEF_FILE = $$PWD/$${DEF_FILE_TARGET}.def
@ -417,253 +62,9 @@ angle_d3d11 {
DEFINES += DllMain=DllMain_ANGLE # prevent symbol from conflicting with the user's DllMain
}
#load_functions.target = load_functions
#load_functions.commands = python $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/gen_load_functions_table.py \
# > $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/gen_load_functions_table.cpp
#QMAKE_EXTRA_TARGETS += load_functions
# HLSL shaders
BLITVS = $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/shaders/Blit.vs
standardvs.input = BLITVS
standardvs.type = vs_2_0
standardvs.output = standardvs.h
flipyvs.input = BLITVS
flipyvs.type = vs_2_0
flipyvs.output = flipyvs.h
BLITPS = $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/shaders/Blit.ps
passthroughps.input = BLITPS
passthroughps.type = ps_2_0
passthroughps.output = passthroughps.h
luminanceps.input = BLITPS
luminanceps.type = ps_2_0
luminanceps.output = luminanceps.h
componentmaskps.input = BLITPS
componentmaskps.type = ps_2_0
componentmaskps.output = componentmaskps.h
PASSTHROUGH2D = $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/shaders/Passthrough2D11.hlsl
VS_Passthrough2D.input = PASSTHROUGH2D
VS_Passthrough2D.type = vs_4_0_level_9_3
VS_Passthrough2D.output = passthrough2d11vs.h
PS_PassthroughRGBA2D.input = PASSTHROUGH2D
PS_PassthroughRGBA2D.type = ps_4_0_level_9_3
PS_PassthroughRGBA2D.output = passthroughrgba2d11ps.h
PS_PassthroughRGB2D.input = PASSTHROUGH2D
PS_PassthroughRGB2D.type = ps_4_0_level_9_3
PS_PassthroughRGB2D.output = passthroughrgb2d11ps.h
PS_PassthroughRG2D.input = PASSTHROUGH2D
PS_PassthroughRG2D.type = ps_4_0_level_9_3
PS_PassthroughRG2D.output = passthroughrg2d11ps.h
PS_PassthroughR2D.input = PASSTHROUGH2D
PS_PassthroughR2D.type = ps_4_0_level_9_3
PS_PassthroughR2D.output = passthroughr2d11ps.h
PS_PassthroughLum2D.input = PASSTHROUGH2D
PS_PassthroughLum2D.type = ps_4_0_level_9_3
PS_PassthroughLum2D.output = passthroughlum2d11ps.h
PS_PassthroughLumAlpha2D.input = PASSTHROUGH2D
PS_PassthroughLumAlpha2D.type = ps_4_0_level_9_3
PS_PassthroughLumAlpha2D.output = passthroughlumalpha2d11ps.h
PS_PassthroughDepth2D.input = PASSTHROUGH2D
PS_PassthroughDepth2D.type = ps_4_0
PS_PassthroughDepth2D.output = passthroughdepth2d11ps.h
PS_PassthroughRGBA2DUI.input = PASSTHROUGH2D
PS_PassthroughRGBA2DUI.type = ps_4_0
PS_PassthroughRGBA2DUI.output = passthroughrgba2dui11ps.h
PS_PassthroughRGBA2DI.input = PASSTHROUGH2D
PS_PassthroughRGBA2DI.type = ps_4_0
PS_PassthroughRGBA2DI.output = passthroughrgba2di11ps.h
PS_PassthroughRGB2DUI.input = PASSTHROUGH2D
PS_PassthroughRGB2DUI.type = ps_4_0
PS_PassthroughRGB2DUI.output = passthroughrgb2dui11ps.h
PS_PassthroughRGB2DI.input = PASSTHROUGH2D
PS_PassthroughRGB2DI.type = ps_4_0
PS_PassthroughRGB2DI.output = passthroughrgb2di11ps.h
PS_PassthroughRG2DUI.input = PASSTHROUGH2D
PS_PassthroughRG2DUI.type = ps_4_0
PS_PassthroughRG2DUI.output = passthroughrg2dui11ps.h
PS_PassthroughRG2DI.input = PASSTHROUGH2D
PS_PassthroughRG2DI.type = ps_4_0
PS_PassthroughRG2DI.output = passthroughrg2di11ps.h
PS_PassthroughR2DUI.input = PASSTHROUGH2D
PS_PassthroughR2DUI.type = ps_4_0
PS_PassthroughR2DUI.output = passthroughr2dui11ps.h
PS_PassthroughR2DI.input = PASSTHROUGH2D
PS_PassthroughR2DI.type = ps_4_0
PS_PassthroughR2DI.output = passthroughr2di11ps.h
CLEAR = $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/shaders/Clear11.hlsl
VS_ClearFloat.input = CLEAR
VS_ClearFloat.type = vs_4_0_level_9_3
VS_ClearFloat.output = clearfloat11vs.h
PS_ClearFloat_FL9.input = CLEAR
PS_ClearFloat_FL9.type = ps_4_0_level_9_3
PS_ClearFloat_FL9.output = clearfloat11_fl9ps.h
PS_ClearFloat.input = CLEAR
PS_ClearFloat.type = ps_4_0
PS_ClearFloat.output = clearfloat11ps.h
VS_ClearUint.input = CLEAR
VS_ClearUint.type = vs_4_0
VS_ClearUint.output = clearuint11vs.h
PS_ClearUint.input = CLEAR
PS_ClearUint.type = ps_4_0
PS_ClearUint.output = clearuint11ps.h
VS_ClearSint.input = CLEAR
VS_ClearSint.type = vs_4_0
VS_ClearSint.output = clearsint11vs.h
PS_ClearSint.input = CLEAR
PS_ClearSint.type = ps_4_0
PS_ClearSint.output = clearsint11ps.h
PASSTHROUGH3D = $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/shaders/Passthrough3D11.hlsl
VS_Passthrough3D.input = PASSTHROUGH3D
VS_Passthrough3D.type = vs_4_0
VS_Passthrough3D.output = passthrough3d11vs.h
GS_Passthrough3D.input = PASSTHROUGH3D
GS_Passthrough3D.type = gs_4_0
GS_Passthrough3D.output = passthrough3d11gs.h
PS_PassthroughRGBA3D.input = PASSTHROUGH3D
PS_PassthroughRGBA3D.type = ps_4_0
PS_PassthroughRGBA3D.output = passthroughrgba3d11ps.h
PS_PassthroughRGBA3DUI.input = PASSTHROUGH3D
PS_PassthroughRGBA3DUI.type = ps_4_0
PS_PassthroughRGBA3DUI.output = passthroughrgba3dui11ps.h
PS_PassthroughRGBA3DI.input = PASSTHROUGH3D
PS_PassthroughRGBA3DI.type = ps_4_0
PS_PassthroughRGBA3DI.output = passthroughrgba3di11ps.h
PS_PassthroughRGB3D.input = PASSTHROUGH3D
PS_PassthroughRGB3D.type = ps_4_0
PS_PassthroughRGB3D.output = passthroughrgb3d11ps.h
PS_PassthroughRGB3DUI.input = PASSTHROUGH3D
PS_PassthroughRGB3DUI.type = ps_4_0
PS_PassthroughRGB3DUI.output = passthroughrgb3dui11ps.h
PS_PassthroughRGB3DI.input = PASSTHROUGH3D
PS_PassthroughRGB3DI.type = ps_4_0
PS_PassthroughRGB3DI.output = passthroughrgb3di11ps.h
PS_PassthroughRG3D.input = PASSTHROUGH3D
PS_PassthroughRG3D.type = ps_4_0
PS_PassthroughRG3D.output = passthroughrg3d11ps.h
PS_PassthroughRG3DUI.input = PASSTHROUGH3D
PS_PassthroughRG3DUI.type = ps_4_0
PS_PassthroughRG3DUI.output = passthroughrg3dui11ps.h
PS_PassthroughRG3DI.input = PASSTHROUGH3D
PS_PassthroughRG3DI.type = ps_4_0
PS_PassthroughRG3DI.output = passthroughrg3di11ps.h
PS_PassthroughR3D.input = PASSTHROUGH3D
PS_PassthroughR3D.type = ps_4_0
PS_PassthroughR3D.output = passthroughr3d11ps.h
PS_PassthroughR3DUI.input = PASSTHROUGH3D
PS_PassthroughR3DUI.type = ps_4_0
PS_PassthroughR3DUI.output = passthroughr3dui11ps.h
PS_PassthroughR3DI.input = PASSTHROUGH3D
PS_PassthroughR3DI.type = ps_4_0
PS_PassthroughR3DI.output = passthroughr3di11ps.h
PS_PassthroughLum3D.input = PASSTHROUGH3D
PS_PassthroughLum3D.type = ps_4_0
PS_PassthroughLum3D.output = passthroughlum3d11ps.h
PS_PassthroughLumAlpha3D.input = PASSTHROUGH3D
PS_PassthroughLumAlpha3D.type = ps_4_0
PS_PassthroughLumAlpha3D.output = passthroughlumalpha3d11ps.h
SWIZZLE = $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/shaders/Swizzle11.hlsl
PS_SwizzleF2D.input = SWIZZLE
PS_SwizzleF2D.type = ps_4_0
PS_SwizzleF2D.output = swizzlef2dps.h
PS_SwizzleI2D.input = SWIZZLE
PS_SwizzleI2D.type = ps_4_0
PS_SwizzleI2D.output = swizzlei2dps.h
PS_SwizzleUI2D.input = SWIZZLE
PS_SwizzleUI2D.type = ps_4_0
PS_SwizzleUI2D.output = swizzleui2dps.h
PS_SwizzleF3D.input = SWIZZLE
PS_SwizzleF3D.type = ps_4_0
PS_SwizzleF3D.output = swizzlef3dps.h
PS_SwizzleI3D.input = SWIZZLE
PS_SwizzleI3D.type = ps_4_0
PS_SwizzleI3D.output = swizzlei3dps.h
PS_SwizzleUI3D.input = SWIZZLE
PS_SwizzleUI3D.type = ps_4_0
PS_SwizzleUI3D.output = swizzleui3dps.h
PS_SwizzleF2DArray.input = SWIZZLE
PS_SwizzleF2DArray.type = ps_4_0
PS_SwizzleF2DArray.output = swizzlef2darrayps.h
PS_SwizzleI2DArray.input = SWIZZLE
PS_SwizzleI2DArray.type = ps_4_0
PS_SwizzleI2DArray.output = swizzlei2darrayps.h
PS_SwizzleUI2DArray.input = SWIZZLE
PS_SwizzleUI2DArray.type = ps_4_0
PS_SwizzleUI2DArray.output = swizzleui2darrayps.h
BUFFERTOTEXTURE = $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/shaders/BufferToTexture11.hlsl
VS_BufferToTexture.input = BUFFERTOTEXTURE
VS_BufferToTexture.type = vs_4_0
VS_BufferToTexture.output = buffertotexture11_vs.h
GS_BufferToTexture.input = BUFFERTOTEXTURE
GS_BufferToTexture.type = gs_4_0
GS_BufferToTexture.output = buffertotexture11_gs.h
PS_BufferToTexture_4F.input = BUFFERTOTEXTURE
PS_BufferToTexture_4F.type = ps_4_0
PS_BufferToTexture_4F.output = buffertotexture11_ps_4f.h
PS_BufferToTexture_4I.input = BUFFERTOTEXTURE
PS_BufferToTexture_4I.type = ps_4_0
PS_BufferToTexture_4I.output = buffertotexture11_ps_4i.h
PS_BufferToTexture_4UI.input = BUFFERTOTEXTURE
PS_BufferToTexture_4UI.type = ps_4_0
PS_BufferToTexture_4UI.output = buffertotexture11_ps_4ui.h
# D3D11
angle_d3d11: SHADERS = VS_Passthrough2D \
PS_PassthroughRGB2D PS_PassthroughRGB2DUI PS_PassthroughRGB2DI \
PS_PassthroughRGBA2D PS_PassthroughRGBA2DUI PS_PassthroughRGBA2DI \
PS_PassthroughRG2D PS_PassthroughRG2DUI PS_PassthroughRG2DI \
PS_PassthroughR2D PS_PassthroughR2DUI PS_PassthroughR2DI \
PS_PassthroughLum2D PS_PassthroughLumAlpha2D PS_PassthroughDepth2D \
VS_ClearFloat VS_ClearUint VS_ClearSint \
PS_ClearFloat PS_ClearFloat_FL9 PS_ClearUint PS_ClearSint \
VS_Passthrough3D GS_Passthrough3D \
PS_PassthroughRGBA3D PS_PassthroughRGBA3DUI PS_PassthroughRGBA3DI \
PS_PassthroughRGB3D PS_PassthroughRGB3DUI PS_PassthroughRGB3DI \
PS_PassthroughRG3D PS_PassthroughRG3DUI PS_PassthroughRG3DI \
PS_PassthroughR3D PS_PassthroughR3DUI PS_PassthroughR3DI \
PS_PassthroughLum3D PS_PassthroughLumAlpha3D \
PS_SwizzleF2D PS_SwizzleI2D PS_SwizzleUI2D \
PS_SwizzleF3D PS_SwizzleI3D PS_SwizzleUI3D \
PS_SwizzleF2DArray PS_SwizzleI2DArray PS_SwizzleUI2DArray \
VS_BufferToTexture GS_BufferToTexture \
PS_BufferToTexture_4F PS_BufferToTexture_4I PS_BufferToTexture_4UI
# D3D9
!winrt: SHADERS += standardvs flipyvs passthroughps luminanceps componentmaskps
# Generate headers
for (SHADER, SHADERS) {
INPUT = $$eval($${SHADER}.input)
OUT_DIR = $$OUT_PWD/libANGLE/$$relative_path($$dirname($$INPUT), $$ANGLE_DIR/src/libANGLE)/compiled
fxc_$${SHADER}.commands = $$FXC /nologo /E $${SHADER} /T $$eval($${SHADER}.type) /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
fxc_$${SHADER}.output = $$OUT_DIR/$$eval($${SHADER}.output)
fxc_$${SHADER}.input = $$INPUT
fxc_$${SHADER}.dependency_type = TYPE_C
fxc_$${SHADER}.variable_out = HEADERS
fxc_$${SHADER}.CONFIG += target_predeps
QMAKE_EXTRA_COMPILERS += fxc_$${SHADER}
}
khr_headers.files = $$ANGLE_DIR/include/KHR/khrplatform.h
khr_headers.path = $$[QT_INSTALL_HEADERS]/QtANGLE/KHR
gles2_headers.files = \
$$ANGLE_DIR/include/GLES2/gl2.h \
$$ANGLE_DIR/include/GLES2/gl2ext.h \
$$ANGLE_DIR/include/GLES2/gl2platform.h
gles2_headers.path = $$[QT_INSTALL_HEADERS]/QtANGLE/GLES2
gles3_headers.files = \
$$ANGLE_DIR/include/GLES3/gl3.h \
$$ANGLE_DIR/include/GLES3/gl3ext.h \
$$ANGLE_DIR/include/GLES3/gl3platform.h
gles3_headers.path = $$[QT_INSTALL_HEADERS]/QtANGLE/GLES3
egl_headers.files = \
$$ANGLE_DIR/include/EGL/egl.h \
$$ANGLE_DIR/include/EGL/eglext.h \
$$ANGLE_DIR/include/EGL/eglplatform.h
egl_headers.path = $$[QT_INSTALL_HEADERS]/QtANGLE/EGL
INSTALLS += khr_headers gles2_headers egl_headers
angle_d3d11: INSTALLS += gles3_headers
INSTALLS += egl_headers

View File

@ -0,0 +1,605 @@
CONFIG += simd no_batch
include(common.pri)
INCLUDEPATH += $$OUT_PWD/.. $$ANGLE_DIR/src/libANGLE
# Remember to adapt src/gui/configure.* if the Direct X version changes.
!winrt: \
LIBS_PRIVATE += -ld3d9
winrt: \
LIBS_PRIVATE += -ld3dcompiler -ldxgi -ld3d11
LIBS_PRIVATE += -ldxguid
STATICLIBS = translator preprocessor
for(libname, STATICLIBS) {
# Appends 'd' to the library for debug builds and builds up the fully
# qualified path to pass to the linker.
staticlib = $$QT_BUILD_TREE/lib/$${QMAKE_PREFIX_STATICLIB}$$qtLibraryTarget($$libname).$${QMAKE_EXTENSION_STATICLIB}
LIBS_PRIVATE += $$staticlib
PRE_TARGETDEPS += $$staticlib
}
DEFINES += LIBANGLE_IMPLEMENTATION LIBGLESV2_IMPLEMENTATION GL_APICALL= GL_GLEXT_PROTOTYPES= EGLAPI=
!winrt: DEFINES += ANGLE_ENABLE_D3D9 ANGLE_SKIP_DXGI_1_2_CHECK
HEADERS += \
$$ANGLE_DIR/src/common/mathutil.h \
$$ANGLE_DIR/src/common/blocklayout.h \
$$ANGLE_DIR/src/common/NativeWindow.h \
$$ANGLE_DIR/src/common/shadervars.h \
$$ANGLE_DIR/src/common/utilities.h \
$$ANGLE_DIR/src/common/MemoryBuffer.h \
$$ANGLE_DIR/src/common/angleutils.h \
$$ANGLE_DIR/src/common/debug.h \
$$ANGLE_DIR/src/common/event_tracer.h \
$$ANGLE_DIR/src/libANGLE/angletypes.h \
$$ANGLE_DIR/src/libANGLE/AttributeMap.h \
$$ANGLE_DIR/src/libANGLE/BinaryStream.h \
$$ANGLE_DIR/src/libANGLE/Buffer.h \
$$ANGLE_DIR/src/libANGLE/Caps.h \
$$ANGLE_DIR/src/libANGLE/Compiler.h \
$$ANGLE_DIR/src/libANGLE/Config.h \
$$ANGLE_DIR/src/libANGLE/Constants.h \
$$ANGLE_DIR/src/libANGLE/Context.h \
$$ANGLE_DIR/src/libANGLE/Data.h \
$$ANGLE_DIR/src/libANGLE/Device.h \
$$ANGLE_DIR/src/libANGLE/Display.h \
$$ANGLE_DIR/src/libANGLE/Error.h \
$$ANGLE_DIR/src/libANGLE/features.h \
$$ANGLE_DIR/src/libANGLE/Fence.h \
$$ANGLE_DIR/src/libANGLE/formatutils.h \
$$ANGLE_DIR/src/libANGLE/Framebuffer.h \
$$ANGLE_DIR/src/libANGLE/FramebufferAttachment.h \
$$ANGLE_DIR/src/libANGLE/HandleAllocator.h \
$$ANGLE_DIR/src/libANGLE/ImageIndex.h \
$$ANGLE_DIR/src/libANGLE/IndexRangeCache.h \
$$ANGLE_DIR/src/libANGLE/Program.h \
$$ANGLE_DIR/src/libANGLE/Query.h \
$$ANGLE_DIR/src/libANGLE/queryconversions.h \
$$ANGLE_DIR/src/libANGLE/RefCountObject.h \
$$ANGLE_DIR/src/libANGLE/Renderbuffer.h \
$$ANGLE_DIR/src/libANGLE/ResourceManager.h \
$$ANGLE_DIR/src/libANGLE/Sampler.h \
$$ANGLE_DIR/src/libANGLE/Shader.h \
$$ANGLE_DIR/src/libANGLE/State.h \
$$ANGLE_DIR/src/libANGLE/Surface.h \
$$ANGLE_DIR/src/libANGLE/Texture.h \
$$ANGLE_DIR/src/libANGLE/TransformFeedback.h \
$$ANGLE_DIR/src/libANGLE/Uniform.h \
$$ANGLE_DIR/src/libANGLE/validationEGL.h \
$$ANGLE_DIR/src/libANGLE/validationES.h \
$$ANGLE_DIR/src/libANGLE/validationES2.h \
$$ANGLE_DIR/src/libANGLE/validationES3.h \
$$ANGLE_DIR/src/libANGLE/VertexArray.h \
$$ANGLE_DIR/src/libANGLE/VertexAttribute.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/BufferD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/CompilerD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/copyimage.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/DeviceD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/DisplayD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/DynamicHLSL.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/EGLImageD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/formatutilsD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/FramebufferD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/generatemip.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/HLSLCompiler.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ImageD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/imageformats.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/IndexBuffer.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/IndexDataManager.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/loadimage.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/loadimage_etc.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ProgramD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/RenderbufferD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/RendererD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/RenderTargetD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ShaderD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ShaderExecutableD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/SurfaceD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/SwapChainD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/TextureD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/TextureStorage.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/TransformFeedbackD3D.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/VaryingPacking.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/VertexBuffer.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/VertexDataManager.h \
$$ANGLE_DIR/src/libANGLE/renderer/BufferImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/CompilerImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/DeviceImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/DisplayImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/FenceNVImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/FenceSyncImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/FramebufferImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/Image.h \
$$ANGLE_DIR/src/libANGLE/renderer/ImplFactory.h \
$$ANGLE_DIR/src/libANGLE/renderer/ProgramImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/QueryImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/RenderbufferImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/Renderer.h \
$$ANGLE_DIR/src/libANGLE/renderer/ShaderImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/SurfaceImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/TextureImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/TransformFeedbackImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/VertexArrayImpl.h \
$$ANGLE_DIR/src/libANGLE/renderer/Workarounds.h \
$$ANGLE_DIR/src/libANGLE/resource.h \
$$ANGLE_DIR/src/libANGLE/ResourceManager.h \
$$ANGLE_DIR/src/libANGLE/Sampler.h \
$$ANGLE_DIR/src/libANGLE/Shader.h \
$$ANGLE_DIR/src/libANGLE/State.h \
$$ANGLE_DIR/src/libANGLE/Texture.h \
$$ANGLE_DIR/src/libANGLE/TransformFeedback.h \
$$ANGLE_DIR/src/libANGLE/Uniform.h \
$$ANGLE_DIR/src/libANGLE/validationES2.h \
$$ANGLE_DIR/src/libANGLE/validationES3.h \
$$ANGLE_DIR/src/libANGLE/validationES.h \
$$ANGLE_DIR/src/libANGLE/VertexArray.h \
$$ANGLE_DIR/src/libANGLE/VertexAttribute.h \
$$ANGLE_DIR/src/libANGLE/vertexconversion.h \
$$ANGLE_DIR/src/libGLESv2/entry_points_egl.h \
$$ANGLE_DIR/src/libGLESv2/entry_points_egl_ext.h \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_2_0.h \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_2_0_ext.h \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_3_0.h \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_3_0_ext.h \
$$ANGLE_DIR/src/libGLESv2/global_state.h \
$$ANGLE_DIR/src/libGLESv2/resource.h \
$$ANGLE_DIR/src/third_party/murmurhash/MurmurHash3.h
SOURCES += \
$$ANGLE_DIR/src/common/mathutil.cpp \
$$ANGLE_DIR/src/common/utilities.cpp \
$$ANGLE_DIR/src/common/MemoryBuffer.cpp \
$$ANGLE_DIR/src/common/angleutils.cpp \
$$ANGLE_DIR/src/common/debug.cpp \
$$ANGLE_DIR/src/common/event_tracer.cpp \
$$ANGLE_DIR/src/common/Float16ToFloat32.cpp \
$$ANGLE_DIR/src/third_party/murmurhash/MurmurHash3.cpp \
$$ANGLE_DIR/src/libANGLE/angletypes.cpp \
$$ANGLE_DIR/src/libANGLE/AttributeMap.cpp \
$$ANGLE_DIR/src/libANGLE/Buffer.cpp \
$$ANGLE_DIR/src/libANGLE/Caps.cpp \
$$ANGLE_DIR/src/libANGLE/Compiler.cpp \
$$ANGLE_DIR/src/libANGLE/Config.cpp \
$$ANGLE_DIR/src/libANGLE/Context.cpp \
$$ANGLE_DIR/src/libANGLE/Data.cpp \
$$ANGLE_DIR/src/libANGLE/Device.cpp \
$$ANGLE_DIR/src/libANGLE/Display.cpp \
$$ANGLE_DIR/src/libANGLE/Error.cpp \
$$ANGLE_DIR/src/libANGLE/Fence.cpp \
$$ANGLE_DIR/src/libANGLE/formatutils.cpp \
$$ANGLE_DIR/src/libANGLE/Framebuffer.cpp \
$$ANGLE_DIR/src/libANGLE/FramebufferAttachment.cpp \
$$ANGLE_DIR/src/libANGLE/HandleAllocator.cpp \
$$ANGLE_DIR/src/libANGLE/Image.cpp \
$$ANGLE_DIR/src/libANGLE/ImageIndex.cpp \
$$ANGLE_DIR/src/libANGLE/IndexRangeCache.cpp \
$$ANGLE_DIR/src/libANGLE/Platform.cpp \
$$ANGLE_DIR/src/libANGLE/Program.cpp \
$$ANGLE_DIR/src/libANGLE/Query.cpp \
$$ANGLE_DIR/src/libANGLE/queryconversions.cpp \
$$ANGLE_DIR/src/libANGLE/Renderbuffer.cpp \
$$ANGLE_DIR/src/libANGLE/ResourceManager.cpp \
$$ANGLE_DIR/src/libANGLE/Sampler.cpp \
$$ANGLE_DIR/src/libANGLE/Shader.cpp \
$$ANGLE_DIR/src/libANGLE/State.cpp \
$$ANGLE_DIR/src/libANGLE/Surface.cpp \
$$ANGLE_DIR/src/libANGLE/Texture.cpp \
$$ANGLE_DIR/src/libANGLE/TransformFeedback.cpp \
$$ANGLE_DIR/src/libANGLE/Uniform.cpp \
$$ANGLE_DIR/src/libANGLE/validationEGL.cpp \
$$ANGLE_DIR/src/libANGLE/validationES.cpp \
$$ANGLE_DIR/src/libANGLE/validationES2.cpp \
$$ANGLE_DIR/src/libANGLE/validationES3.cpp \
$$ANGLE_DIR/src/libANGLE/VertexArray.cpp \
$$ANGLE_DIR/src/libANGLE/VertexAttribute.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/DeviceImpl.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/DisplayImpl.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/Renderer.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/SurfaceImpl.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/BufferD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/CompilerD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/copyimage.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/DeviceD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/DisplayD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/DynamicHLSL.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/EGLImageD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/formatutilsD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/FramebufferD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/HLSLCompiler.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ImageD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/IndexBuffer.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/IndexDataManager.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/loadimage.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/loadimage_etc.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ProgramD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/RenderbufferD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/RendererD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/RenderTargetD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ShaderD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/ShaderExecutableD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/SurfaceD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/TextureD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/TransformFeedbackD3D.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/VaryingPacking.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/VertexBuffer.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/VertexDataManager.cpp \
$$ANGLE_DIR/src/libGLESv2/entry_points_egl.cpp \
$$ANGLE_DIR/src/libGLESv2/entry_points_egl_ext.cpp \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_2_0.cpp \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_2_0_ext.cpp \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_3_0.cpp \
$$ANGLE_DIR/src/libGLESv2/entry_points_gles_3_0_ext.cpp \
$$ANGLE_DIR/src/libGLESv2/global_state.cpp \
$$ANGLE_DIR/src/libGLESv2/libGLESv2.cpp
SSE2_SOURCES += $$ANGLE_DIR/src/libANGLE/renderer/d3d/loadimageSSE2.cpp
DEBUG_SOURCE = $$ANGLE_DIR/src/libANGLE/Debug.cpp
debug_copy.input = DEBUG_SOURCE
debug_copy.output = $$ANGLE_DIR/src/libANGLE/Debug2.cpp
debug_copy.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
debug_copy.variable_out = GENERATED_SOURCES
debug_copy.CONFIG = target_predeps
QMAKE_EXTRA_COMPILERS += debug_copy
angle_d3d11 {
HEADERS += \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Blit11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Buffer11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Clear11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/dxgi_support_table.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Fence11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/formatutils11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Image11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/IndexBuffer11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/InputLayoutCache.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/internal_format_initializer_table.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/load_functions_table.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/PixelTransfer11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Query11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Renderer11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/RenderTarget11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/RenderStateCache.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/ShaderExecutable11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/StateManager11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/swizzle_format_info.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Trim11.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/texture_format_table.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.h
SOURCES += \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Blit11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Buffer11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/dxgi_support_table.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Fence11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/formatutils11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Image11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/IndexBuffer11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/InputLayoutCache.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/internal_format_initializer_table.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/load_functions_table_autogen.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/PixelTransfer11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Query11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/RenderTarget11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/RenderStateCache.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/ShaderExecutable11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/swizzle_format_info_autogen.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/Trim11.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/texture_format_table_autogen.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp
}
!winrt {
HEADERS += \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Blit9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Buffer9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/DebugAnnotator9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Fence9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Framebuffer9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/formatutils9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Image9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/IndexBuffer9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Query9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Renderer9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/RenderTarget9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/ShaderExecutable9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/StateManager9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/SwapChain9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/VertexBuffer9.h \
$$ANGLE_DIR/src/third_party/systeminfo/SystemInfo.h
SOURCES += \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Blit9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Buffer9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/DebugAnnotator9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Fence9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Framebuffer9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/formatutils9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Image9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/IndexBuffer9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Query9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/RenderTarget9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/ShaderExecutable9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/StateManager9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/SwapChain9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/VertexBuffer9.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/VertexDeclarationCache.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp \
$$ANGLE_DIR/src/third_party/systeminfo/SystemInfo.cpp
} else {
HEADERS += \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h
SOURCES += \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.cpp \
$$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp
}
#load_functions.target = load_functions
#load_functions.commands = python $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/gen_load_functions_table.py \
# > $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/gen_load_functions_table.cpp
#QMAKE_EXTRA_TARGETS += load_functions
# HLSL shaders
BLITVS = $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/shaders/Blit.vs
standardvs.input = BLITVS
standardvs.type = vs_2_0
standardvs.output = standardvs.h
flipyvs.input = BLITVS
flipyvs.type = vs_2_0
flipyvs.output = flipyvs.h
BLITPS = $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d9/shaders/Blit.ps
passthroughps.input = BLITPS
passthroughps.type = ps_2_0
passthroughps.output = passthroughps.h
luminanceps.input = BLITPS
luminanceps.type = ps_2_0
luminanceps.output = luminanceps.h
componentmaskps.input = BLITPS
componentmaskps.type = ps_2_0
componentmaskps.output = componentmaskps.h
PASSTHROUGH2D = $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/shaders/Passthrough2D11.hlsl
VS_Passthrough2D.input = PASSTHROUGH2D
VS_Passthrough2D.type = vs_4_0_level_9_3
VS_Passthrough2D.output = passthrough2d11vs.h
PS_PassthroughRGBA2D.input = PASSTHROUGH2D
PS_PassthroughRGBA2D.type = ps_4_0_level_9_3
PS_PassthroughRGBA2D.output = passthroughrgba2d11ps.h
PS_PassthroughRGB2D.input = PASSTHROUGH2D
PS_PassthroughRGB2D.type = ps_4_0_level_9_3
PS_PassthroughRGB2D.output = passthroughrgb2d11ps.h
PS_PassthroughRG2D.input = PASSTHROUGH2D
PS_PassthroughRG2D.type = ps_4_0_level_9_3
PS_PassthroughRG2D.output = passthroughrg2d11ps.h
PS_PassthroughR2D.input = PASSTHROUGH2D
PS_PassthroughR2D.type = ps_4_0_level_9_3
PS_PassthroughR2D.output = passthroughr2d11ps.h
PS_PassthroughLum2D.input = PASSTHROUGH2D
PS_PassthroughLum2D.type = ps_4_0_level_9_3
PS_PassthroughLum2D.output = passthroughlum2d11ps.h
PS_PassthroughLumAlpha2D.input = PASSTHROUGH2D
PS_PassthroughLumAlpha2D.type = ps_4_0_level_9_3
PS_PassthroughLumAlpha2D.output = passthroughlumalpha2d11ps.h
PS_PassthroughDepth2D.input = PASSTHROUGH2D
PS_PassthroughDepth2D.type = ps_4_0
PS_PassthroughDepth2D.output = passthroughdepth2d11ps.h
PS_PassthroughRGBA2DUI.input = PASSTHROUGH2D
PS_PassthroughRGBA2DUI.type = ps_4_0
PS_PassthroughRGBA2DUI.output = passthroughrgba2dui11ps.h
PS_PassthroughRGBA2DI.input = PASSTHROUGH2D
PS_PassthroughRGBA2DI.type = ps_4_0
PS_PassthroughRGBA2DI.output = passthroughrgba2di11ps.h
PS_PassthroughRGB2DUI.input = PASSTHROUGH2D
PS_PassthroughRGB2DUI.type = ps_4_0
PS_PassthroughRGB2DUI.output = passthroughrgb2dui11ps.h
PS_PassthroughRGB2DI.input = PASSTHROUGH2D
PS_PassthroughRGB2DI.type = ps_4_0
PS_PassthroughRGB2DI.output = passthroughrgb2di11ps.h
PS_PassthroughRG2DUI.input = PASSTHROUGH2D
PS_PassthroughRG2DUI.type = ps_4_0
PS_PassthroughRG2DUI.output = passthroughrg2dui11ps.h
PS_PassthroughRG2DI.input = PASSTHROUGH2D
PS_PassthroughRG2DI.type = ps_4_0
PS_PassthroughRG2DI.output = passthroughrg2di11ps.h
PS_PassthroughR2DUI.input = PASSTHROUGH2D
PS_PassthroughR2DUI.type = ps_4_0
PS_PassthroughR2DUI.output = passthroughr2dui11ps.h
PS_PassthroughR2DI.input = PASSTHROUGH2D
PS_PassthroughR2DI.type = ps_4_0
PS_PassthroughR2DI.output = passthroughr2di11ps.h
CLEAR = $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/shaders/Clear11.hlsl
VS_ClearFloat.input = CLEAR
VS_ClearFloat.type = vs_4_0_level_9_3
VS_ClearFloat.output = clearfloat11vs.h
PS_ClearFloat_FL9.input = CLEAR
PS_ClearFloat_FL9.type = ps_4_0_level_9_3
PS_ClearFloat_FL9.output = clearfloat11_fl9ps.h
PS_ClearFloat.input = CLEAR
PS_ClearFloat.type = ps_4_0
PS_ClearFloat.output = clearfloat11ps.h
VS_ClearUint.input = CLEAR
VS_ClearUint.type = vs_4_0
VS_ClearUint.output = clearuint11vs.h
PS_ClearUint.input = CLEAR
PS_ClearUint.type = ps_4_0
PS_ClearUint.output = clearuint11ps.h
VS_ClearSint.input = CLEAR
VS_ClearSint.type = vs_4_0
VS_ClearSint.output = clearsint11vs.h
PS_ClearSint.input = CLEAR
PS_ClearSint.type = ps_4_0
PS_ClearSint.output = clearsint11ps.h
PASSTHROUGH3D = $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/shaders/Passthrough3D11.hlsl
VS_Passthrough3D.input = PASSTHROUGH3D
VS_Passthrough3D.type = vs_4_0
VS_Passthrough3D.output = passthrough3d11vs.h
GS_Passthrough3D.input = PASSTHROUGH3D
GS_Passthrough3D.type = gs_4_0
GS_Passthrough3D.output = passthrough3d11gs.h
PS_PassthroughRGBA3D.input = PASSTHROUGH3D
PS_PassthroughRGBA3D.type = ps_4_0
PS_PassthroughRGBA3D.output = passthroughrgba3d11ps.h
PS_PassthroughRGBA3DUI.input = PASSTHROUGH3D
PS_PassthroughRGBA3DUI.type = ps_4_0
PS_PassthroughRGBA3DUI.output = passthroughrgba3dui11ps.h
PS_PassthroughRGBA3DI.input = PASSTHROUGH3D
PS_PassthroughRGBA3DI.type = ps_4_0
PS_PassthroughRGBA3DI.output = passthroughrgba3di11ps.h
PS_PassthroughRGB3D.input = PASSTHROUGH3D
PS_PassthroughRGB3D.type = ps_4_0
PS_PassthroughRGB3D.output = passthroughrgb3d11ps.h
PS_PassthroughRGB3DUI.input = PASSTHROUGH3D
PS_PassthroughRGB3DUI.type = ps_4_0
PS_PassthroughRGB3DUI.output = passthroughrgb3dui11ps.h
PS_PassthroughRGB3DI.input = PASSTHROUGH3D
PS_PassthroughRGB3DI.type = ps_4_0
PS_PassthroughRGB3DI.output = passthroughrgb3di11ps.h
PS_PassthroughRG3D.input = PASSTHROUGH3D
PS_PassthroughRG3D.type = ps_4_0
PS_PassthroughRG3D.output = passthroughrg3d11ps.h
PS_PassthroughRG3DUI.input = PASSTHROUGH3D
PS_PassthroughRG3DUI.type = ps_4_0
PS_PassthroughRG3DUI.output = passthroughrg3dui11ps.h
PS_PassthroughRG3DI.input = PASSTHROUGH3D
PS_PassthroughRG3DI.type = ps_4_0
PS_PassthroughRG3DI.output = passthroughrg3di11ps.h
PS_PassthroughR3D.input = PASSTHROUGH3D
PS_PassthroughR3D.type = ps_4_0
PS_PassthroughR3D.output = passthroughr3d11ps.h
PS_PassthroughR3DUI.input = PASSTHROUGH3D
PS_PassthroughR3DUI.type = ps_4_0
PS_PassthroughR3DUI.output = passthroughr3dui11ps.h
PS_PassthroughR3DI.input = PASSTHROUGH3D
PS_PassthroughR3DI.type = ps_4_0
PS_PassthroughR3DI.output = passthroughr3di11ps.h
PS_PassthroughLum3D.input = PASSTHROUGH3D
PS_PassthroughLum3D.type = ps_4_0
PS_PassthroughLum3D.output = passthroughlum3d11ps.h
PS_PassthroughLumAlpha3D.input = PASSTHROUGH3D
PS_PassthroughLumAlpha3D.type = ps_4_0
PS_PassthroughLumAlpha3D.output = passthroughlumalpha3d11ps.h
SWIZZLE = $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/shaders/Swizzle11.hlsl
PS_SwizzleF2D.input = SWIZZLE
PS_SwizzleF2D.type = ps_4_0
PS_SwizzleF2D.output = swizzlef2dps.h
PS_SwizzleI2D.input = SWIZZLE
PS_SwizzleI2D.type = ps_4_0
PS_SwizzleI2D.output = swizzlei2dps.h
PS_SwizzleUI2D.input = SWIZZLE
PS_SwizzleUI2D.type = ps_4_0
PS_SwizzleUI2D.output = swizzleui2dps.h
PS_SwizzleF3D.input = SWIZZLE
PS_SwizzleF3D.type = ps_4_0
PS_SwizzleF3D.output = swizzlef3dps.h
PS_SwizzleI3D.input = SWIZZLE
PS_SwizzleI3D.type = ps_4_0
PS_SwizzleI3D.output = swizzlei3dps.h
PS_SwizzleUI3D.input = SWIZZLE
PS_SwizzleUI3D.type = ps_4_0
PS_SwizzleUI3D.output = swizzleui3dps.h
PS_SwizzleF2DArray.input = SWIZZLE
PS_SwizzleF2DArray.type = ps_4_0
PS_SwizzleF2DArray.output = swizzlef2darrayps.h
PS_SwizzleI2DArray.input = SWIZZLE
PS_SwizzleI2DArray.type = ps_4_0
PS_SwizzleI2DArray.output = swizzlei2darrayps.h
PS_SwizzleUI2DArray.input = SWIZZLE
PS_SwizzleUI2DArray.type = ps_4_0
PS_SwizzleUI2DArray.output = swizzleui2darrayps.h
BUFFERTOTEXTURE = $$ANGLE_DIR/src/libANGLE/renderer/d3d/d3d11/shaders/BufferToTexture11.hlsl
VS_BufferToTexture.input = BUFFERTOTEXTURE
VS_BufferToTexture.type = vs_4_0
VS_BufferToTexture.output = buffertotexture11_vs.h
GS_BufferToTexture.input = BUFFERTOTEXTURE
GS_BufferToTexture.type = gs_4_0
GS_BufferToTexture.output = buffertotexture11_gs.h
PS_BufferToTexture_4F.input = BUFFERTOTEXTURE
PS_BufferToTexture_4F.type = ps_4_0
PS_BufferToTexture_4F.output = buffertotexture11_ps_4f.h
PS_BufferToTexture_4I.input = BUFFERTOTEXTURE
PS_BufferToTexture_4I.type = ps_4_0
PS_BufferToTexture_4I.output = buffertotexture11_ps_4i.h
PS_BufferToTexture_4UI.input = BUFFERTOTEXTURE
PS_BufferToTexture_4UI.type = ps_4_0
PS_BufferToTexture_4UI.output = buffertotexture11_ps_4ui.h
# D3D11
angle_d3d11: SHADERS = VS_Passthrough2D \
PS_PassthroughRGB2D PS_PassthroughRGB2DUI PS_PassthroughRGB2DI \
PS_PassthroughRGBA2D PS_PassthroughRGBA2DUI PS_PassthroughRGBA2DI \
PS_PassthroughRG2D PS_PassthroughRG2DUI PS_PassthroughRG2DI \
PS_PassthroughR2D PS_PassthroughR2DUI PS_PassthroughR2DI \
PS_PassthroughLum2D PS_PassthroughLumAlpha2D PS_PassthroughDepth2D \
VS_ClearFloat VS_ClearUint VS_ClearSint \
PS_ClearFloat PS_ClearFloat_FL9 PS_ClearUint PS_ClearSint \
VS_Passthrough3D GS_Passthrough3D \
PS_PassthroughRGBA3D PS_PassthroughRGBA3DUI PS_PassthroughRGBA3DI \
PS_PassthroughRGB3D PS_PassthroughRGB3DUI PS_PassthroughRGB3DI \
PS_PassthroughRG3D PS_PassthroughRG3DUI PS_PassthroughRG3DI \
PS_PassthroughR3D PS_PassthroughR3DUI PS_PassthroughR3DI \
PS_PassthroughLum3D PS_PassthroughLumAlpha3D \
PS_SwizzleF2D PS_SwizzleI2D PS_SwizzleUI2D \
PS_SwizzleF3D PS_SwizzleI3D PS_SwizzleUI3D \
PS_SwizzleF2DArray PS_SwizzleI2DArray PS_SwizzleUI2DArray \
VS_BufferToTexture GS_BufferToTexture \
PS_BufferToTexture_4F PS_BufferToTexture_4I PS_BufferToTexture_4UI
# D3D9
!winrt: SHADERS += standardvs flipyvs passthroughps luminanceps componentmaskps
# Generate headers
for (SHADER, SHADERS) {
INPUT = $$eval($${SHADER}.input)
OUT_DIR = $$OUT_PWD/libANGLE/$$relative_path($$dirname($$INPUT), $$ANGLE_DIR/src/libANGLE)/compiled
fxc_$${SHADER}.commands = $$FXC /nologo /E $${SHADER} /T $$eval($${SHADER}.type) /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
fxc_$${SHADER}.output = $$OUT_DIR/$$eval($${SHADER}.output)
fxc_$${SHADER}.input = $$INPUT
fxc_$${SHADER}.dependency_type = TYPE_C
fxc_$${SHADER}.variable_out = HEADERS
fxc_$${SHADER}.CONFIG += target_predeps
QMAKE_EXTRA_COMPILERS += fxc_$${SHADER}
}
khr_headers.files = $$ANGLE_DIR/include/KHR/khrplatform.h
khr_headers.path = $$[QT_INSTALL_HEADERS]/QtANGLE/KHR
gles2_headers.files = \
$$ANGLE_DIR/include/GLES2/gl2.h \
$$ANGLE_DIR/include/GLES2/gl2ext.h \
$$ANGLE_DIR/include/GLES2/gl2platform.h
gles2_headers.path = $$[QT_INSTALL_HEADERS]/QtANGLE/GLES2
gles3_headers.files = \
$$ANGLE_DIR/include/GLES3/gl3.h \
$$ANGLE_DIR/include/GLES3/gl3ext.h \
$$ANGLE_DIR/include/GLES3/gl3platform.h
gles3_headers.path = $$[QT_INSTALL_HEADERS]/QtANGLE/GLES3
INSTALLS += khr_headers gles2_headers
angle_d3d11: INSTALLS += gles3_headers

View File

@ -0,0 +1,26 @@
include(../common/common.pri)
DEF_FILE_TARGET = $${TARGET}
TARGET = $$qtLibraryTarget($${LIBEGL_NAME})
winrt: LIBS_PRIVATE += -ld3d11
LIBS_PRIVATE += -ldxguid -L$$QT_BUILD_TREE/lib -l$$qtLibraryTarget($${LIBGLESV2_NAME})
DEFINES += GL_APICALL= GL_GLEXT_PROTOTYPES= EGLAPI= LIBEGL_IMPLEMENTATION
HEADERS += \
$$ANGLE_DIR/src/libEGL/resource.h
SOURCES += \
$$ANGLE_DIR/src/libEGL/libEGL.cpp
!static {
DEF_FILE = $$ANGLE_DIR/src/libEGL/$${DEF_FILE_TARGET}.def
mingw:equals(QT_ARCH, i386): DEF_FILE = $$ANGLE_DIR/src/libEGL/$${DEF_FILE_TARGET}_mingw32.def
}
egl_headers.files = \
$$ANGLE_DIR/include/EGL/egl.h \
$$ANGLE_DIR/include/EGL/eglext.h \
$$ANGLE_DIR/include/EGL/eglplatform.h
egl_headers.path = $$[QT_INSTALL_HEADERS]/QtANGLE/EGL
INSTALLS += egl_headers

View File

@ -0,0 +1,12 @@
include(../common/gles_common.pri)
DEF_FILE_TARGET = $${TARGET}
TARGET = $$qtLibraryTarget($${LIBGLESV2_NAME})
!static {
DEF_FILE = $$ANGLE_DIR/src/libGLESv2/$${DEF_FILE_TARGET}.def
mingw: equals(QT_ARCH, i386): DEF_FILE = $$ANGLE_DIR/src/libGLESv2/$${DEF_FILE_TARGET}_mingw32.def
} else {
DEFINES += DllMain=DllMain_ANGLE # prevent symbol from conflicting with the user's DllMain
}

View File

@ -1,3 +1,11 @@
TEMPLATE = subdirs
SUBDIRS += compiler QtANGLE
SUBDIRS += compiler
QT_FOR_CONFIG += gui
# needed as angle is built before gui
include($$OUT_PWD/../../gui/qtgui-config.pri)
qtConfig(combined-angle-lib): SUBDIRS += QtANGLE
else: SUBDIRS += libGLESv2 libEGL
CONFIG += ordered

View File

@ -60,3 +60,12 @@ while (it.hasNext()) {
// ...
}
//! [0]
//! [1]
QDirIterator it("/sys", QStringList() << "scaling_cur_freq", QDir::NoFilter, QDirIterator::Subdirectories);
while (it.hasNext()) {
QFile f(it.next());
f.open(QIODevice::ReadOnly);
qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 << "MHz";
}
//! [1]

View File

@ -62,8 +62,6 @@ public:
Q_DECL_CONSTEXPR inline qfloat16() Q_DECL_NOTHROW : b16(0) { }
inline qfloat16(float f) Q_DECL_NOTHROW;
inline operator float() const Q_DECL_NOTHROW;
inline operator double() const Q_DECL_NOTHROW;
inline operator long double() const Q_DECL_NOTHROW;
#endif
private:
@ -153,16 +151,6 @@ inline qfloat16::operator float() const Q_DECL_NOTHROW
#endif
}
inline qfloat16::operator double() const Q_DECL_NOTHROW
{
return static_cast<double>(float(*this));
}
inline qfloat16::operator long double() const Q_DECL_NOTHROW
{
return static_cast<long double>(float(*this));
}
inline qfloat16 operator-(qfloat16 a) Q_DECL_NOTHROW
{
qfloat16 f;

View File

@ -376,7 +376,7 @@
\omitvalue KeyboardModifierMask
\note On \macos, the \c ControlModifier value corresponds to
the Command keys on the Macintosh keyboard, and the \c MetaModifier value
the Command keys on the keyboard, and the \c MetaModifier value
corresponds to the Control keys. The \c KeypadModifier value will also be set
when an arrow key is pressed as the arrow keys are considered part of the
keypad.
@ -394,7 +394,7 @@
supported by Qt.
\note On \macos, the \c CTRL value corresponds to
the Command keys on the Macintosh keyboard, and the \c META value
the Command keys on the keyboard, and the \c META value
corresponds to the Control keys.
\value SHIFT The Shift keys provided on all standard keyboards.
@ -2096,12 +2096,12 @@
We refer to a top-level window that has a parent
as a \e secondary window.
\value Sheet Indicates that the window is a Macintosh sheet. Since
\value Sheet Indicates that the window is a sheet on \macos. Since
using a sheet implies window modality, the recommended
way is to use QWidget::setWindowModality(), or
QDialog::open(), instead.
\value Drawer Indicates that the widget is a Macintosh drawer.
\value Drawer Indicates that the widget is a drawer on \macos.
\value Popup Indicates that the widget is a pop-up top-level
window, i.e. that it is modal, but has a window

View File

@ -56,6 +56,10 @@
\snippet code/src_corelib_io_qdiriterator.cpp 0
Here's how to find and read all files filtered by name, recursively:
\snippet code/src_corelib_io_qdiriterator.cpp 1
The next() function returns the path to the next directory entry and
advances the iterator. You can also call filePath() to get the current
file path without advancing the iterator. The fileName() function returns

View File

@ -42,6 +42,7 @@
#include <qdebug.h>
#include <algorithm>
#include <functional>
#ifndef QT_NO_ITEMVIEWS
@ -307,7 +308,9 @@ bool QItemSelectionRange::operator<(const QItemSelectionRange &other) const
}
return topLeftParent < otherTopLeftParent;
}
return tl.model() < other.tl.model();
std::less<const QAbstractItemModel *> less;
return less(tl.model(), other.tl.model());
}
/*!
@ -1264,6 +1267,21 @@ void QItemSelectionModel::select(const QModelIndex &index, QItemSelectionModel::
convenience.
*/
namespace {
namespace QtFunctionObjects {
struct IsNotValid {
typedef bool result_type;
struct is_transparent : std::true_type {};
template <typename T>
Q_DECL_CONSTEXPR bool operator()(T &t) const Q_DECL_NOEXCEPT_EXPR(noexcept(t.isValid()))
{ return !t.isValid(); }
template <typename T>
Q_DECL_CONSTEXPR bool operator()(T *t) const Q_DECL_NOEXCEPT_EXPR(noexcept(t->isValid()))
{ return !t->isValid(); }
};
}
} // unnamed namespace
/*!
Selects the item \a selection using the specified \a command, and emits
selectionChanged().
@ -1287,13 +1305,9 @@ void QItemSelectionModel::select(const QItemSelection &selection, QItemSelection
// be too late if another model observer is connected to the same modelReset slot and is invoked first
// it might call select() on this selection model before any such QItemSelectionModelPrivate::_q_modelReset() slot
// is invoked, so it would not be cleared yet. We clear it invalid ranges in it here.
QItemSelection::iterator it = d->ranges.begin();
while (it != d->ranges.end()) {
if (!it->isValid())
it = d->ranges.erase(it);
else
++it;
}
using namespace QtFunctionObjects;
d->ranges.erase(std::remove_if(d->ranges.begin(), d->ranges.end(), IsNotValid()),
d->ranges.end());
QItemSelection old = d->ranges;
old.merge(d->currentSelection, d->currentCommand);
@ -1745,12 +1759,9 @@ const QItemSelection QItemSelectionModel::selection() const
selected.merge(d->currentSelection, d->currentCommand);
// make sure we have no invalid ranges
// ### should probably be handled more generic somewhere else
auto isNotValid = [](const QItemSelectionRange& range) {
return !range.isValid();
};
using namespace QtFunctionObjects;
selected.erase(std::remove_if(selected.begin(), selected.end(),
isNotValid),
IsNotValid()),
selected.end());
return selected;
}

View File

@ -55,7 +55,6 @@
#include <QtCore/private/qglobal_p.h>
#include "qplatformdefs.h"
#include "qatomic.h"
#include "qhash.h"
#ifndef Q_OS_UNIX
# error "qcore_unix_p.h included on a non-Unix system"
@ -371,19 +370,6 @@ union qt_semun {
unsigned short *array; /* array for GETALL, SETALL */
};
#ifndef QT_POSIX_IPC
#if QT_CONFIG(sharedmemory) || QT_CONFIG(systemsemaphore)
#ifndef Q_OS_ANDROID
static inline key_t qt_safe_ftok(const QByteArray &filename, int proj_id)
{
// Unfortunately ftok can return colliding keys even for different files.
// Try to add some more entropy via qHash.
return ::ftok(filename.constData(), qHash(filename, proj_id));
}
#endif // !Q_OS_ANDROID
#endif // QT_CONFIG(sharedmemory) || QT_CONFIG(systemsemaphore)
#endif // !QT_POSIX_IPC
QT_END_NAMESPACE
#endif

View File

@ -201,7 +201,6 @@ namespace QtPrivate {
typedef List<Args...> Arguments;
typedef Ret ReturnType;
typedef Ret (Obj::*Function) (Args...) noexcept;
template <class Base> struct ChangeClass { typedef Ret (Base:: *Type)(Args...) noexcept; };
enum {ArgumentCount = sizeof...(Args), IsPointerToMemberFunction = true};
template <typename SignalArgs, typename R>
static void call(Function f, Obj *o, void **arg) {
@ -214,7 +213,6 @@ namespace QtPrivate {
typedef List<Args...> Arguments;
typedef Ret ReturnType;
typedef Ret (Obj::*Function) (Args...) const noexcept;
template <class Base> struct ChangeClass { typedef Ret (Base:: *Type)(Args...) const noexcept; };
enum {ArgumentCount = sizeof...(Args), IsPointerToMemberFunction = true};
template <typename SignalArgs, typename R>
static void call(Function f, Obj *o, void **arg) {

View File

@ -88,7 +88,7 @@ key_t QSharedMemoryPrivate::handle()
return 0;
}
unix_key = qt_safe_ftok(QFile::encodeName(nativeKey), 'Q');
unix_key = ftok(QFile::encodeName(nativeKey).constData(), 'Q');
if (-1 == unix_key) {
errorString = QSharedMemory::tr("%1: ftok failed").arg(QLatin1String("QSharedMemory::handle:"));
error = QSharedMemory::KeyError;

View File

@ -104,7 +104,7 @@ key_t QSystemSemaphorePrivate::handle(QSystemSemaphore::AccessMode mode)
#if !defined(QT_NO_SHAREDMEMORY) && !defined(QT_POSIX_IPC) && !defined(Q_OS_ANDROID)
// Get the unix key for the created file
unix_key = qt_safe_ftok(QFile::encodeName(fileName), 'Q');
unix_key = ftok(QFile::encodeName(fileName).constData(), 'Q');
#endif
if (-1 == unix_key) {
errorString =

File diff suppressed because it is too large Load Diff

View File

@ -115,7 +115,7 @@ QT_BEGIN_NAMESPACE
\snippet code/src_corelib_tools_qscopedpointer.cpp 4
Otherwise, the compiler output a warning about not being able to destruct
Otherwise, the compiler outputs a warning about not being able to destruct
\c MyPrivateClass.
\sa QSharedPointer

View File

@ -425,7 +425,7 @@ void QDBusConnectionManager::createServer(const QString &address, void *server)
*/
QDBusConnection::QDBusConnection(const QString &name)
{
if (name.isEmpty()) {
if (name.isEmpty() || _q_manager.isDestroyed()) {
d = 0;
} else {
QMutexLocker locker(&_q_manager()->mutex);
@ -490,7 +490,7 @@ QDBusConnection &QDBusConnection::operator=(const QDBusConnection &other)
*/
QDBusConnection QDBusConnection::connectToBus(BusType type, const QString &name)
{
if (!qdbus_loadLibDBus()) {
if (_q_manager.isDestroyed() || !qdbus_loadLibDBus()) {
QDBusConnectionPrivate *d = 0;
return QDBusConnection(d);
}
@ -504,7 +504,7 @@ QDBusConnection QDBusConnection::connectToBus(BusType type, const QString &name)
QDBusConnection QDBusConnection::connectToBus(const QString &address,
const QString &name)
{
if (!qdbus_loadLibDBus()) {
if (_q_manager.isDestroyed() || !qdbus_loadLibDBus()) {
QDBusConnectionPrivate *d = 0;
return QDBusConnection(d);
}
@ -519,7 +519,7 @@ QDBusConnection QDBusConnection::connectToBus(const QString &address,
QDBusConnection QDBusConnection::connectToPeer(const QString &address,
const QString &name)
{
if (!qdbus_loadLibDBus()) {
if (_q_manager.isDestroyed() || !qdbus_loadLibDBus()) {
QDBusConnectionPrivate *d = 0;
return QDBusConnection(d);
}
@ -1174,6 +1174,8 @@ bool QDBusConnection::unregisterService(const QString &serviceName)
*/
QDBusConnection QDBusConnection::sessionBus()
{
if (_q_manager.isDestroyed())
return QDBusConnection(Q_NULLPTR);
return QDBusConnection(_q_manager()->busConnection(SessionBus));
}
@ -1186,6 +1188,8 @@ QDBusConnection QDBusConnection::sessionBus()
*/
QDBusConnection QDBusConnection::systemBus()
{
if (_q_manager.isDestroyed())
return QDBusConnection(Q_NULLPTR);
return QDBusConnection(_q_manager()->busConnection(SystemBus));
}

View File

@ -299,6 +299,9 @@ static void qDBusNewConnection(DBusServer *server, DBusConnection *connection, v
Q_ASSERT(connection);
Q_ASSERT(data);
if (!QDBusConnectionManager::instance())
return;
// keep the connection alive
q_dbus_connection_ref(connection);
QDBusConnectionPrivate *serverConnection = static_cast<QDBusConnectionPrivate *>(data);

View File

@ -68,7 +68,11 @@ QDBusServer::QDBusServer(const QString &address, QObject *parent)
if (!qdbus_loadLibDBus())
return;
emit QDBusConnectionManager::instance()->serverRequested(address, this);
QDBusConnectionManager *instance = QDBusConnectionManager::instance();
if (!instance)
return;
emit instance->serverRequested(address, this);
QObject::connect(d, SIGNAL(newServerConnection(QDBusConnectionPrivate*)),
this, SLOT(_q_newConnection(QDBusConnectionPrivate*)), Qt::QueuedConnection);
}
@ -93,7 +97,11 @@ QDBusServer::QDBusServer(QObject *parent)
return;
}
emit QDBusConnectionManager::instance()->serverRequested(address, this);
QDBusConnectionManager *instance = QDBusConnectionManager::instance();
if (!instance)
return;
emit instance->serverRequested(address, this);
QObject::connect(d, SIGNAL(newServerConnection(QDBusConnectionPrivate*)),
this, SLOT(_q_newConnection(QDBusConnectionPrivate*)), Qt::QueuedConnection);
}

View File

@ -9,6 +9,7 @@
"options": {
"accessibility": "boolean",
"angle": "boolean",
"combined-angle-lib": "boolean",
"direct2d": "boolean",
"directfb": "boolean",
"directwrite": "boolean",
@ -443,6 +444,13 @@
{ "type": "define", "name": "QT_OPENGL_ES_2_ANGLE" }
]
},
"combined-angle-lib": {
"label": "Combined ANGLE Library",
"autoDetect": false,
"enable": "features.angle",
"condition": "features.angle",
"output": [ "publicFeature" ]
},
"directfb": {
"label": "DirectFB",
"section": "Platform plugins",
@ -1111,6 +1119,11 @@ QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your pla
"args": "angle",
"condition": "config.win32"
},
{
"type": "feature",
"args": "combined-angle-lib",
"condition": "features.angle"
},
"opengl-desktop",
{
"type": "feature",

View File

@ -641,6 +641,18 @@ QGuiApplication::~QGuiApplication()
QGuiApplicationPrivate::m_inputDeviceManager = 0;
delete QGuiApplicationPrivate::desktopFileName;
QGuiApplicationPrivate::desktopFileName = 0;
QGuiApplicationPrivate::mouse_buttons = Qt::NoButton;
QGuiApplicationPrivate::modifier_buttons = Qt::NoModifier;
QGuiApplicationPrivate::lastCursorPosition = {qInf(), qInf()};
QGuiApplicationPrivate::currentMousePressWindow = QGuiApplicationPrivate::currentMouseWindow = nullptr;
QGuiApplicationPrivate::applicationState = Qt::ApplicationInactive;
QGuiApplicationPrivate::highDpiScalingUpdated = false;
QGuiApplicationPrivate::tabletDevicePoints.clear();
#ifndef QT_NO_SESSIONMANAGER
QGuiApplicationPrivate::is_fallback_session_management_enabled = true;
#endif
QGuiApplicationPrivate::mousePressTime = 0;
QGuiApplicationPrivate::mousePressX = QGuiApplicationPrivate::mousePressY = 0;
}
QGuiApplicationPrivate::QGuiApplicationPrivate(int &argc, char **argv, int flags)
@ -1538,6 +1550,7 @@ QGuiApplicationPrivate::~QGuiApplicationPrivate()
delete m_a32ColorProfile.load();
window_list.clear();
screen_list.clear();
}
#if 0

View File

@ -215,7 +215,8 @@ bool QWindowSystemEventHandler::sendEvent(QWindowSystemInterfacePrivate::WindowS
QT_DEFINE_QPA_EVENT_HANDLER(void, handleEnterEvent, QWindow *window, const QPointF &local, const QPointF &global)
{
if (window) {
QWindowSystemInterfacePrivate::EnterEvent *e = new QWindowSystemInterfacePrivate::EnterEvent(window, local, global);
QWindowSystemInterfacePrivate::EnterEvent *e
= new QWindowSystemInterfacePrivate::EnterEvent(window, QHighDpi::fromNativeLocalPosition(local, window), QHighDpi::fromNativePixels(global, window));
QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e);
}
}

View File

@ -5643,17 +5643,11 @@ static inline void rgbBlendPixel(quint32 *dst, int coverage, QRgba64 slinear, co
static inline void grayBlendPixel(quint32 *dst, int coverage, QRgba64 srcLinear, const QColorProfile *colorProfile)
{
// Do a gammacorrected gray alphablend...
QRgba64 dstLinear = QRgba64::fromArgb32(*dst);
const QRgba64 dstLinear = colorProfile ? colorProfile->toLinear64(*dst) : QRgba64::fromArgb32(*dst);
if (colorProfile && !dstLinear.isTransparent())
dstLinear = colorProfile->fromLinear(dstLinear.unpremultiplied()).premultiplied();
QRgba64 blend = interpolate255(srcLinear, coverage, dstLinear, 255 - coverage);
dstLinear = interpolate255(srcLinear, coverage, dstLinear, 255 - coverage);
if (colorProfile && !dstLinear.isTransparent())
dstLinear = colorProfile->fromLinear(dstLinear.unpremultiplied()).premultiplied();
*dst = toArgb32(dstLinear);
*dst = colorProfile ? colorProfile->fromLinear64(blend) : toArgb32(blend);
}
static inline void alphamapblend_argb32(quint32 *dst, int coverage, QRgba64 srcLinear, quint32 src, const QColorProfile *colorProfile)
@ -5663,7 +5657,12 @@ static inline void alphamapblend_argb32(quint32 *dst, int coverage, QRgba64 srcL
} else if (coverage == 255) {
*dst = src;
} else {
grayBlendPixel(dst, coverage, srcLinear, colorProfile);
if (*dst >= 0xff000000) {
grayBlendPixel(dst, coverage, srcLinear, colorProfile);
} else {
// Give up and do a naive gray alphablend. Needed to deal with ARGB32 and invalid ARGB32_premultiplied, see QTBUG-60571
*dst = INTERPOLATE_PIXEL_255(src, coverage, *dst, 255 - coverage);
}
}
}
@ -5751,14 +5750,25 @@ static inline void alphargbblend_generic(uint coverage, QRgba64 *dest, int x, co
dstColor = colorProfile->fromLinear(dstColor);
dest[x] = dstColor;
} else {
// Give up and do a gray alphablend.
if (colorProfile && !dstColor.isTransparent())
dstColor = colorProfile->toLinear(dstColor.unpremultiplied()).premultiplied();
// Do a gray alphablend.
alphamapblend_generic(qRgbAvg(coverage), dest, x, srcLinear, src, colorProfile);
}
}
}
static inline void alphargbblend_argb32(quint32 *dst, uint coverage, QRgba64 srcLinear, quint32 src, const QColorProfile *colorProfile)
{
if (coverage == 0xff000000) {
// nothing
} else if (coverage == 0xffffffff) {
*dst = src;
} else {
if (*dst >= 0xff000000) {
rgbBlendPixel(dst, coverage, srcLinear, colorProfile);
} else {
// Give up and do a naive gray alphablend. Needed to deal with ARGB32 and invalid ARGB32_premultiplied, see QTBUG-60571
const int a = qRgbAvg(coverage);
dstColor = interpolate255(srcLinear, coverage, dstColor, 255 - a);
if (colorProfile && !dstColor.isTransparent())
dstColor = colorProfile->fromLinear(dstColor.unpremultiplied()).premultiplied();
dest[x] = dstColor;
*dst = INTERPOLATE_PIXEL_255(src, a, *dst, 255 - a);
}
}
}
@ -5863,16 +5873,7 @@ static void qt_alphargbblit_argb32(QRasterBuffer *rasterBuffer,
while (mapHeight--) {
for (int i = 0; i < mapWidth; ++i) {
const uint coverage = src[i];
if (coverage == 0xffffffff) {
dst[i] = c;
} else if (coverage != 0xff000000) {
if (dst[i] >= 0xff000000) {
rgbBlendPixel(dst + i, coverage, srcColor, colorProfile);
} else {
// Give up and do a gray blend.
grayBlendPixel(dst + i, qRgbAvg(coverage), srcColor, colorProfile);
}
}
alphargbblend_argb32(dst + i, coverage, srcColor, c, colorProfile);
}
dst += destStride;
@ -5898,16 +5899,7 @@ static void qt_alphargbblit_argb32(QRasterBuffer *rasterBuffer,
for (int xp=start; xp<end; ++xp) {
const uint coverage = src[xp - x];
if (coverage == 0xffffffff) {
dst[xp] = c;
} else if (coverage != 0xff000000) {
if (dst[xp] >= 0xff000000) {
rgbBlendPixel(dst + xp, coverage, srcColor, colorProfile);
} else {
// Give up and do a gray blend.
grayBlendPixel(dst + xp, qRgbAvg(coverage), srcColor, colorProfile);
}
}
alphargbblend_argb32(dst + xp, coverage, srcColor, c, colorProfile);
}
} // for (i -> line.count)
src += srcStride;

View File

@ -1981,6 +1981,17 @@ static bool qt_isect_curve_vertical(const QBezier &bezier, qreal x, qreal y1, qr
return false;
}
static bool pointOnEdge(const QRectF &rect, const QPointF &point)
{
if ((point.x() == rect.left() || point.x() == rect.right()) &&
(point.y() >= rect.top() && point.y() <= rect.bottom()))
return true;
if ((point.y() == rect.top() || point.y() == rect.bottom()) &&
(point.x() >= rect.left() && point.x() <= rect.right()))
return true;
return false;
}
/*
Returns \c true if any lines or curves cross the four edges in of rect
*/
@ -1988,6 +1999,7 @@ static bool qt_painterpath_check_crossing(const QPainterPath *path, const QRectF
{
QPointF last_pt;
QPointF last_start;
enum { OnRect, InsideRect, OutsideRect} edgeStatus = OnRect;
for (int i=0; i<path->elementCount(); ++i) {
const QPainterPath::Element &e = path->elementAt(i);
@ -2026,6 +2038,27 @@ static bool qt_painterpath_check_crossing(const QPainterPath *path, const QRectF
default:
break;
}
// Handle crossing the edges of the rect at the end-points of individual sub-paths.
// A point on on the edge itself is considered neither inside nor outside for this purpose.
if (!pointOnEdge(rect, last_pt)) {
bool contained = rect.contains(last_pt);
switch (edgeStatus) {
case OutsideRect:
if (contained)
return true;
break;
case InsideRect:
if (!contained)
return true;
break;
case OnRect:
edgeStatus = contained ? InsideRect : OutsideRect;
break;
}
} else {
if (last_pt == last_start)
edgeStatus = OnRect;
}
}
// implicitly close last subpath

View File

@ -630,6 +630,9 @@ Qt::CursorMoveStyle QTextLayout::cursorMoveStyle() const
/*!
Begins the layout process.
\warning This will invalidate the layout, so all existing QTextLine objects
that refer to the previous contents should now be discarded.
\sa endLayout()
*/
void QTextLayout::beginLayout()
@ -673,6 +676,9 @@ void QTextLayout::endLayout()
Clears the line information in the layout. After having called
this function, lineCount() returns 0.
\warning This will invalidate the layout, so all existing QTextLine objects
that refer to the previous contents should now be discarded.
*/
void QTextLayout::clearLayout()
{

View File

@ -235,33 +235,6 @@ QNetworkSession is the central class for managing roaming related issues.
Some API features are not available on all platforms. The
\l QNetworkConfigurationManager::Capability should be used to detect
platform features at runtime. The following table lists the various
platform APIs being used by this API. This may assist in the process of
determining the feature support:
\table
\header
\li Platform
\li Backend capabilities
\row
\li Linux\unicode{0xAE}
\li Linux uses the \l {http://projects.gnome.org/NetworkManager}{NetworkManager}
and \l {http://connman.net/}{ConnMan} / \l {http://ofono.org/}{oFono} APIs
which support interface notifications and starting and stopping of network
interfaces. Network Manager version 0.9 and above is supported.
\row
\li Windows\unicode{0xAE} XP
\li This platform supports interface notifications without active polling.
\row
\li Windows XP SP2+Hotfixes, Windows XP SP3, Windows Vista, Windows 7
\li In addition to standard Windows XP wifi access point monitoring has been improved which includes the ability to start and stop wifi interfaces. This requires Windows to manage the wifi interfaces.
\row
\li Mac OS\unicode{0xAE}
\li This platform has full support by way of CoreWLAN offered in Mac OS 10.6. Previous
versions of Mac OS - 10.5 and 10.4 have limited support.
\row
\li All other platforms (*nix, Windows Mobile)
\li This backend is the fallback for all platforms supports network interface notifications via active polling only.
\endtable
platform features at runtime.
*/

View File

@ -194,9 +194,22 @@ public:
Q_ASSERT_SUCCEEDED(hr);
}
}
if (connectOp) {
ComPtr<IAsyncInfo> info;
HRESULT hr = connectOp.As(&info);
Q_ASSERT_SUCCEEDED(hr);
if (info) {
hr = info->Cancel();
Q_ASSERT_SUCCEEDED(hr);
hr = info->Close();
Q_ASSERT_SUCCEEDED(hr);
}
}
}
signals:
void connectOpFinished(bool success, QAbstractSocket::SocketError error, WinRTSocketEngine::ErrorString errorString);
void newDatagramsReceived(const QList<WinRtDatagram> &datagram);
void newDataReceived(const QVector<QByteArray> &data);
void socketErrorOccured(QAbstractSocket::SocketError error);
@ -234,6 +247,45 @@ public:
Q_ASSERT_SUCCEEDED(hr);
}
HRESULT onConnectOpFinished(IAsyncAction *action, AsyncStatus)
{
HRESULT hr = action->GetResults();
if (FAILED(hr)) {
switch (hr) {
case HRESULT_FROM_WIN32(WSAETIMEDOUT):
emit connectOpFinished(false, QAbstractSocket::NetworkError, WinRTSocketEngine::ConnectionTimeOutErrorString);
return S_OK;
case HRESULT_FROM_WIN32(WSAEHOSTUNREACH):
emit connectOpFinished(false, QAbstractSocket::HostNotFoundError, WinRTSocketEngine::HostUnreachableErrorString);
return S_OK;
case HRESULT_FROM_WIN32(WSAECONNREFUSED):
emit connectOpFinished(false, QAbstractSocket::ConnectionRefusedError, WinRTSocketEngine::ConnectionRefusedErrorString);
return S_OK;
default:
emit connectOpFinished(false, QAbstractSocket::UnknownSocketError, WinRTSocketEngine::UnknownSocketErrorString);
return S_OK;
}
}
// The callback might be triggered several times if we do not cancel/reset it here
if (connectOp) {
ComPtr<IAsyncInfo> info;
hr = connectOp.As(&info);
Q_ASSERT_SUCCEEDED(hr);
if (info) {
hr = info->Cancel();
Q_ASSERT_SUCCEEDED(hr);
hr = info->Close();
Q_ASSERT_SUCCEEDED(hr);
}
hr = connectOp.Reset();
Q_ASSERT_SUCCEEDED(hr);
}
emit connectOpFinished(true, QAbstractSocket::UnknownSocketError, WinRTSocketEngine::UnknownSocketErrorString);
return S_OK;
}
HRESULT OnNewDatagramReceived(IDatagramSocket *, IDatagramSocketMessageReceivedEventArgs *args)
{
WinRtDatagram datagram;
@ -378,6 +430,7 @@ public:
void setTcpSocket(ComPtr<IStreamSocket> socket) { tcpSocket = socket; }
private:
friend class QNativeSocketEngine;
ComPtr<IStreamSocket> tcpSocket;
QList<WinRtDatagram> pendingDatagrams;
@ -386,6 +439,7 @@ private:
// Protects pendingData/pendingDatagrams which are accessed from native callbacks
QMutex mutex;
ComPtr<IAsyncAction> connectOp;
ComPtr<IAsyncOperationWithProgress<IBuffer *, UINT32>> initialReadOp;
ComPtr<IAsyncOperationWithProgress<IBuffer *, UINT32>> readOp;
@ -481,6 +535,7 @@ QNativeSocketEngine::QNativeSocketEngine(QObject *parent)
: QAbstractSocketEngine(*new QNativeSocketEnginePrivate(), parent)
{
qRegisterMetaType<WinRtDatagram>();
qRegisterMetaType<WinRTSocketEngine::ErrorString>();
#ifndef QT_NO_SSL
Q_D(QNativeSocketEngine);
if (parent)
@ -490,6 +545,8 @@ QNativeSocketEngine::QNativeSocketEngine(QObject *parent)
connect(this, SIGNAL(connectionReady()), SLOT(connectionNotification()), Qt::QueuedConnection);
connect(this, SIGNAL(readReady()), SLOT(readNotification()), Qt::QueuedConnection);
connect(this, SIGNAL(writeReady()), SLOT(writeNotification()), Qt::QueuedConnection);
connect(d->worker, &SocketEngineWorker::connectOpFinished,
this, &QNativeSocketEngine::handleConnectOpFinished, Qt::QueuedConnection);
connect(d->worker, &SocketEngineWorker::newDatagramsReceived, this, &QNativeSocketEngine::handleNewDatagrams, Qt::QueuedConnection);
connect(d->worker, &SocketEngineWorker::newDataReceived,
this, &QNativeSocketEngine::handleNewData, Qt::QueuedConnection);
@ -531,7 +588,7 @@ bool QNativeSocketEngine::initialize(qintptr socketDescriptor, QAbstractSocket::
if (!d->socketDescriptor || !d->fetchConnectionParameters()) {
d->setError(QAbstractSocket::UnsupportedSocketOperationError,
d->InvalidSocketErrorString);
WinRTSocketEngine::InvalidSocketErrorString);
d->socketDescriptor = -1;
return false;
}
@ -599,9 +656,9 @@ bool QNativeSocketEngine::connectToHostByName(const QString &name, quint16 port)
const QString portString = QString::number(port);
HStringReference portReference(reinterpret_cast<LPCWSTR>(portString.utf16()));
if (d->socketType == QAbstractSocket::TcpSocket)
hr = d->tcpSocket()->ConnectAsync(remoteHost.Get(), portReference.Get(), &d->connectOp);
hr = d->tcpSocket()->ConnectAsync(remoteHost.Get(), portReference.Get(), &d->worker->connectOp);
else if (d->socketType == QAbstractSocket::UdpSocket)
hr = d->udpSocket()->ConnectAsync(remoteHost.Get(), portReference.Get(), &d->connectOp);
hr = d->udpSocket()->ConnectAsync(remoteHost.Get(), portReference.Get(), &d->worker->connectOp);
if (hr == E_ACCESSDENIED) {
qErrnoWarning(hr, "QNativeSocketEngine::connectToHostByName: Unable to connect to host (%s:%hu/%s). "
"Please check your manifest capabilities.",
@ -622,8 +679,8 @@ bool QNativeSocketEngine::connectToHostByName(const QString &name, quint16 port)
d->socketState = QAbstractSocket::ConnectingState;
QEventDispatcherWinRT::runOnXamlThread([d, &hr]() {
hr = d->connectOp->put_Completed(Callback<IAsyncActionCompletedHandler>(
d, &QNativeSocketEnginePrivate::handleConnectOpFinished).Get());
hr = d->worker->connectOp->put_Completed(Callback<IAsyncActionCompletedHandler>(
d->worker, &SocketEngineWorker::onConnectOpFinished).Get());
RETURN_OK_IF_FAILED("connectToHostByName: Could not register \"connectOp\" callback");
return S_OK;
});
@ -677,7 +734,7 @@ bool QNativeSocketEngine::bind(const QHostAddress &address, quint16 port)
qErrnoWarning(hr, "Unable to bind socket (%s:%hu/%s). Please check your manifest capabilities.",
qPrintable(address.toString()), port, socketDescription(this).constData());
d->setError(QAbstractSocket::SocketAccessError,
QNativeSocketEnginePrivate::AccessErrorString);
WinRTSocketEngine::AccessErrorString);
d->socketState = QAbstractSocket::UnconnectedState;
specificErrorSet = true;
return S_OK;
@ -687,14 +744,14 @@ bool QNativeSocketEngine::bind(const QHostAddress &address, quint16 port)
hr = QWinRTFunctions::await(op);
if (hr == 0x80072741) { // The requested address is not valid in its context
d->setError(QAbstractSocket::SocketAddressNotAvailableError,
QNativeSocketEnginePrivate::AddressNotAvailableErrorString);
WinRTSocketEngine::AddressNotAvailableErrorString);
d->socketState = QAbstractSocket::UnconnectedState;
specificErrorSet = true;
return S_OK;
// Only one usage of each socket address (protocol/network address/port) is normally permitted
} else if (hr == 0x80072740) {
d->setError(QAbstractSocket::AddressInUseError,
QNativeSocketEnginePrivate::AddressInuseErrorString);
WinRTSocketEngine::AddressInuseErrorString);
d->socketState = QAbstractSocket::UnconnectedState;
specificErrorSet = true;
return S_OK;
@ -705,7 +762,7 @@ bool QNativeSocketEngine::bind(const QHostAddress &address, quint16 port)
if (FAILED(hr)) {
if (!specificErrorSet) {
d->setError(QAbstractSocket::UnknownSocketError,
QNativeSocketEnginePrivate::UnknownSocketErrorString);
WinRTSocketEngine::UnknownSocketErrorString);
d->socketState = QAbstractSocket::UnconnectedState;
}
return false;
@ -737,7 +794,7 @@ int QNativeSocketEngine::accept()
Q_CHECK_TYPE(QNativeSocketEngine::accept(), QAbstractSocket::TcpSocket, -1);
if (d->socketDescriptor == -1 || d->pendingConnections.isEmpty()) {
d->setError(QAbstractSocket::TemporaryError, QNativeSocketEnginePrivate::TemporaryErrorString);
d->setError(QAbstractSocket::TemporaryError, WinRTSocketEngine::TemporaryErrorString);
return -1;
}
@ -767,18 +824,6 @@ void QNativeSocketEngine::close()
d->notifyOnException = false;
HRESULT hr;
if (d->connectOp) {
ComPtr<IAsyncInfo> info;
hr = d->connectOp.As(&info);
Q_ASSERT_SUCCEEDED(hr);
if (info) {
hr = info->Cancel();
Q_ASSERT_SUCCEEDED(hr);
hr = info->Close();
Q_ASSERT_SUCCEEDED(hr);
}
}
if (d->socketType == QAbstractSocket::TcpSocket) {
hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
HRESULT hr;
@ -924,7 +969,7 @@ qint64 QNativeSocketEngine::write(const char *data, qint64 len)
qint64 bytesWritten = writeIOStream(stream, data, len);
if (bytesWritten < 0)
d->setError(QAbstractSocket::SocketAccessError, QNativeSocketEnginePrivate::AccessErrorString);
d->setError(QAbstractSocket::SocketAccessError, WinRTSocketEngine::AccessErrorString);
else if (bytesWritten > 0 && d->notifyOnWrite)
emit writeReady();
@ -1089,7 +1134,7 @@ bool QNativeSocketEngine::waitForRead(int msecs, bool *timedOut)
}
d->setError(QAbstractSocket::SocketTimeoutError,
QNativeSocketEnginePrivate::TimeOutErrorString);
WinRTSocketEngine::TimeOutErrorString);
if (timedOut)
*timedOut = true;
@ -1102,9 +1147,9 @@ bool QNativeSocketEngine::waitForWrite(int msecs, bool *timedOut)
Q_UNUSED(timedOut);
Q_D(QNativeSocketEngine);
if (d->socketState == QAbstractSocket::ConnectingState) {
HRESULT hr = QWinRTFunctions::await(d->connectOp, QWinRTFunctions::ProcessMainThreadEvents);
HRESULT hr = QWinRTFunctions::await(d->worker->connectOp, QWinRTFunctions::ProcessMainThreadEvents);
if (SUCCEEDED(hr)) {
d->handleConnectOpFinished(d->connectOp.Get(), Completed);
handleConnectOpFinished(true, QAbstractSocket::UnknownSocketError, WinRTSocketEngine::UnknownSocketErrorString);
return true;
}
}
@ -1176,6 +1221,32 @@ void QNativeSocketEngine::establishRead()
Q_ASSERT_SUCCEEDED(hr);
}
void QNativeSocketEngine::handleConnectOpFinished(bool success, QAbstractSocket::SocketError error, WinRTSocketEngine::ErrorString errorString)
{
Q_D(QNativeSocketEngine);
disconnect(d->worker, &SocketEngineWorker::connectOpFinished,
this, &QNativeSocketEngine::handleConnectOpFinished);
if (!success) {
d->setError(error, errorString);
d->socketState = QAbstractSocket::UnconnectedState;
return;
}
d->socketState = QAbstractSocket::ConnectedState;
emit connectionReady();
if (d->socketType != QAbstractSocket::TcpSocket)
return;
#ifndef QT_NO_SSL
// Delay the reader so that the SSL socket can upgrade
if (d->sslSocket)
QObject::connect(qobject_cast<QSslSocket *>(d->sslSocket), &QSslSocket::encrypted, this, &QNativeSocketEngine::establishRead);
else
#endif
establishRead();
}
void QNativeSocketEngine::handleNewDatagrams(const QList<WinRtDatagram> &datagrams)
{
Q_D(QNativeSocketEngine);
@ -1198,13 +1269,13 @@ void QNativeSocketEngine::handleNewData(const QVector<QByteArray> &data)
void QNativeSocketEngine::handleTcpError(QAbstractSocket::SocketError error)
{
Q_D(QNativeSocketEngine);
QNativeSocketEnginePrivate::ErrorString errorString;
WinRTSocketEngine::ErrorString errorString;
switch (error) {
case QAbstractSocket::RemoteHostClosedError:
errorString = QNativeSocketEnginePrivate::RemoteHostClosedErrorString;
errorString = WinRTSocketEngine::RemoteHostClosedErrorString;
break;
default:
errorString = QNativeSocketEnginePrivate::UnknownSocketErrorString;
errorString = WinRTSocketEngine::UnknownSocketErrorString;
}
d->setError(error, errorString);
@ -1271,7 +1342,7 @@ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType soc
// Make the socket nonblocking.
if (!setOption(QAbstractSocketEngine::NonBlockingSocketOption, 1)) {
setError(QAbstractSocket::UnsupportedSocketOperationError, NonBlockingInitFailedErrorString);
setError(QAbstractSocket::UnsupportedSocketOperationError, WinRTSocketEngine::NonBlockingInitFailedErrorString);
q_func()->close();
return false;
}
@ -1307,7 +1378,7 @@ QNativeSocketEnginePrivate::~QNativeSocketEnginePrivate()
worker->deleteLater();
}
void QNativeSocketEnginePrivate::setError(QAbstractSocket::SocketError error, ErrorString errorString) const
void QNativeSocketEnginePrivate::setError(QAbstractSocket::SocketError error, WinRTSocketEngine::ErrorString errorString) const
{
if (hasSetSocketError) {
// Only set socket errors once for one engine; expect the
@ -1325,86 +1396,86 @@ void QNativeSocketEnginePrivate::setError(QAbstractSocket::SocketError error, Er
socketError = error;
switch (errorString) {
case NonBlockingInitFailedErrorString:
case WinRTSocketEngine::NonBlockingInitFailedErrorString:
socketErrorString = QNativeSocketEngine::tr("Unable to initialize non-blocking socket");
break;
case BroadcastingInitFailedErrorString:
case WinRTSocketEngine::BroadcastingInitFailedErrorString:
socketErrorString = QNativeSocketEngine::tr("Unable to initialize broadcast socket");
break;
// should not happen anymore
case NoIpV6ErrorString:
case WinRTSocketEngine::NoIpV6ErrorString:
socketErrorString = QNativeSocketEngine::tr("Attempt to use IPv6 socket on a platform with no IPv6 support");
break;
case RemoteHostClosedErrorString:
case WinRTSocketEngine::RemoteHostClosedErrorString:
socketErrorString = QNativeSocketEngine::tr("The remote host closed the connection");
break;
case TimeOutErrorString:
case WinRTSocketEngine::TimeOutErrorString:
socketErrorString = QNativeSocketEngine::tr("Network operation timed out");
break;
case ResourceErrorString:
case WinRTSocketEngine::ResourceErrorString:
socketErrorString = QNativeSocketEngine::tr("Out of resources");
break;
case OperationUnsupportedErrorString:
case WinRTSocketEngine::OperationUnsupportedErrorString:
socketErrorString = QNativeSocketEngine::tr("Unsupported socket operation");
break;
case ProtocolUnsupportedErrorString:
case WinRTSocketEngine::ProtocolUnsupportedErrorString:
socketErrorString = QNativeSocketEngine::tr("Protocol type not supported");
break;
case InvalidSocketErrorString:
case WinRTSocketEngine::InvalidSocketErrorString:
socketErrorString = QNativeSocketEngine::tr("Invalid socket descriptor");
break;
case HostUnreachableErrorString:
case WinRTSocketEngine::HostUnreachableErrorString:
socketErrorString = QNativeSocketEngine::tr("Host unreachable");
break;
case NetworkUnreachableErrorString:
case WinRTSocketEngine::NetworkUnreachableErrorString:
socketErrorString = QNativeSocketEngine::tr("Network unreachable");
break;
case AccessErrorString:
case WinRTSocketEngine::AccessErrorString:
socketErrorString = QNativeSocketEngine::tr("Permission denied");
break;
case ConnectionTimeOutErrorString:
case WinRTSocketEngine::ConnectionTimeOutErrorString:
socketErrorString = QNativeSocketEngine::tr("Connection timed out");
break;
case ConnectionRefusedErrorString:
case WinRTSocketEngine::ConnectionRefusedErrorString:
socketErrorString = QNativeSocketEngine::tr("Connection refused");
break;
case AddressInuseErrorString:
case WinRTSocketEngine::AddressInuseErrorString:
socketErrorString = QNativeSocketEngine::tr("The bound address is already in use");
break;
case AddressNotAvailableErrorString:
case WinRTSocketEngine::AddressNotAvailableErrorString:
socketErrorString = QNativeSocketEngine::tr("The address is not available");
break;
case AddressProtectedErrorString:
case WinRTSocketEngine::AddressProtectedErrorString:
socketErrorString = QNativeSocketEngine::tr("The address is protected");
break;
case DatagramTooLargeErrorString:
case WinRTSocketEngine::DatagramTooLargeErrorString:
socketErrorString = QNativeSocketEngine::tr("Datagram was too large to send");
break;
case SendDatagramErrorString:
case WinRTSocketEngine::SendDatagramErrorString:
socketErrorString = QNativeSocketEngine::tr("Unable to send a message");
break;
case ReceiveDatagramErrorString:
case WinRTSocketEngine::ReceiveDatagramErrorString:
socketErrorString = QNativeSocketEngine::tr("Unable to receive a message");
break;
case WriteErrorString:
case WinRTSocketEngine::WriteErrorString:
socketErrorString = QNativeSocketEngine::tr("Unable to write");
break;
case ReadErrorString:
case WinRTSocketEngine::ReadErrorString:
socketErrorString = QNativeSocketEngine::tr("Network error");
break;
case PortInuseErrorString:
case WinRTSocketEngine::PortInuseErrorString:
socketErrorString = QNativeSocketEngine::tr("Another socket is already listening on the same port");
break;
case NotSocketErrorString:
case WinRTSocketEngine::NotSocketErrorString:
socketErrorString = QNativeSocketEngine::tr("Operation on non-socket");
break;
case InvalidProxyTypeString:
case WinRTSocketEngine::InvalidProxyTypeString:
socketErrorString = QNativeSocketEngine::tr("The proxy type is invalid for this operation");
break;
case TemporaryErrorString:
case WinRTSocketEngine::TemporaryErrorString:
socketErrorString = QNativeSocketEngine::tr("Temporary error");
break;
case UnknownSocketErrorString:
case WinRTSocketEngine::UnknownSocketErrorString:
socketErrorString = QNativeSocketEngine::tr("Unknown error");
break;
}
@ -1615,65 +1686,6 @@ HRESULT QNativeSocketEnginePrivate::handleClientConnection(IStreamSocketListener
return S_OK;
}
HRESULT QNativeSocketEnginePrivate::handleConnectOpFinished(IAsyncAction *action, AsyncStatus)
{
Q_Q(QNativeSocketEngine);
if (wasDeleted || !connectOp) // Protect against a late callback
return S_OK;
HRESULT hr = action->GetResults();
switch (hr) {
case 0x8007274c: // A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
setError(QAbstractSocket::NetworkError, ConnectionTimeOutErrorString);
socketState = QAbstractSocket::UnconnectedState;
return S_OK;
case 0x80072751: // A socket operation was attempted to an unreachable host.
setError(QAbstractSocket::HostNotFoundError, HostUnreachableErrorString);
socketState = QAbstractSocket::UnconnectedState;
return S_OK;
case 0x8007274d: // No connection could be made because the target machine actively refused it.
setError(QAbstractSocket::ConnectionRefusedError, ConnectionRefusedErrorString);
socketState = QAbstractSocket::UnconnectedState;
return S_OK;
default:
if (FAILED(hr)) {
setError(QAbstractSocket::UnknownSocketError, UnknownSocketErrorString);
socketState = QAbstractSocket::UnconnectedState;
return S_OK;
}
}
// The callback might be triggered several times if we do not cancel/reset it here
if (connectOp) {
ComPtr<IAsyncInfo> info;
hr = connectOp.As(&info);
Q_ASSERT_SUCCEEDED(hr);
if (info) {
hr = info->Cancel();
Q_ASSERT_SUCCEEDED(hr);
hr = info->Close();
Q_ASSERT_SUCCEEDED(hr);
}
hr = connectOp.Reset();
Q_ASSERT_SUCCEEDED(hr);
}
socketState = QAbstractSocket::ConnectedState;
emit q->connectionReady();
if (socketType != QAbstractSocket::TcpSocket)
return S_OK;
#ifndef QT_NO_SSL
// Delay the reader so that the SSL socket can upgrade
if (sslSocket)
QObject::connect(qobject_cast<QSslSocket *>(sslSocket), &QSslSocket::encrypted, q, &QNativeSocketEngine::establishRead);
else
#endif
q->establishRead();
return S_OK;
}
HRESULT QNativeSocketEnginePrivate::handleNewDatagram(IDatagramSocket *socket, IDatagramSocketMessageReceivedEventArgs *args)
{
Q_Q(QNativeSocketEngine);

View File

@ -63,6 +63,39 @@
QT_BEGIN_NAMESPACE
namespace WinRTSocketEngine {
enum ErrorString {
NonBlockingInitFailedErrorString,
BroadcastingInitFailedErrorString,
NoIpV6ErrorString,
RemoteHostClosedErrorString,
TimeOutErrorString,
ResourceErrorString,
OperationUnsupportedErrorString,
ProtocolUnsupportedErrorString,
InvalidSocketErrorString,
HostUnreachableErrorString,
NetworkUnreachableErrorString,
AccessErrorString,
ConnectionTimeOutErrorString,
ConnectionRefusedErrorString,
AddressInuseErrorString,
AddressNotAvailableErrorString,
AddressProtectedErrorString,
DatagramTooLargeErrorString,
SendDatagramErrorString,
ReceiveDatagramErrorString,
WriteErrorString,
ReadErrorString,
PortInuseErrorString,
NotSocketErrorString,
InvalidProxyTypeString,
TemporaryErrorString,
UnknownSocketErrorString = -1
};
}
class QNativeSocketEnginePrivate;
class SocketEngineWorker;
@ -143,6 +176,8 @@ signals:
private slots:
void establishRead();
void handleConnectOpFinished(bool success, QAbstractSocket::SocketError error,
WinRTSocketEngine::ErrorString errorString);
void handleNewDatagrams(const QList<WinRtDatagram> &datagram);
void handleNewData(const QVector<QByteArray> &data);
void handleTcpError(QAbstractSocket::SocketError error);
@ -168,38 +203,7 @@ public:
bool notifyOnRead, notifyOnWrite, notifyOnException;
QAtomicInt closingDown;
enum ErrorString {
NonBlockingInitFailedErrorString,
BroadcastingInitFailedErrorString,
NoIpV6ErrorString,
RemoteHostClosedErrorString,
TimeOutErrorString,
ResourceErrorString,
OperationUnsupportedErrorString,
ProtocolUnsupportedErrorString,
InvalidSocketErrorString,
HostUnreachableErrorString,
NetworkUnreachableErrorString,
AccessErrorString,
ConnectionTimeOutErrorString,
ConnectionRefusedErrorString,
AddressInuseErrorString,
AddressNotAvailableErrorString,
AddressProtectedErrorString,
DatagramTooLargeErrorString,
SendDatagramErrorString,
ReceiveDatagramErrorString,
WriteErrorString,
ReadErrorString,
PortInuseErrorString,
NotSocketErrorString,
InvalidProxyTypeString,
TemporaryErrorString,
UnknownSocketErrorString = -1
};
void setError(QAbstractSocket::SocketError error, ErrorString errorString) const;
void setError(QAbstractSocket::SocketError error, WinRTSocketEngine::ErrorString errorString) const;
// native functions
int option(QNativeSocketEngine::SocketOption option) const;
@ -216,7 +220,6 @@ private:
inline ABI::Windows::Networking::Sockets::IDatagramSocket *udpSocket() const
{ return reinterpret_cast<ABI::Windows::Networking::Sockets::IDatagramSocket *>(socketDescriptor); }
Microsoft::WRL::ComPtr<ABI::Windows::Networking::Sockets::IStreamSocketListener> tcpListener;
Microsoft::WRL::ComPtr<ABI::Windows::Foundation::IAsyncAction> connectOp;
// In case of TCP readMutex protects readBytes and bytesAvailable. In case of UDP it is
// pendingDatagrams. They are written inside native callbacks (handleReadyRead and
@ -242,11 +245,11 @@ private:
ABI::Windows::Networking::Sockets::IDatagramSocketMessageReceivedEventArgs *args);
HRESULT handleClientConnection(ABI::Windows::Networking::Sockets::IStreamSocketListener *tcpListener,
ABI::Windows::Networking::Sockets::IStreamSocketListenerConnectionReceivedEventArgs *args);
HRESULT handleConnectOpFinished(ABI::Windows::Foundation::IAsyncAction *, ABI::Windows::Foundation::AsyncStatus);
};
QT_END_NAMESPACE
Q_DECLARE_METATYPE(WinRtDatagram)
Q_DECLARE_METATYPE(WinRTSocketEngine::ErrorString)
#endif // QNATIVESOCKETENGINE_WINRT_P_H

View File

@ -1038,9 +1038,18 @@ bool q_resolveOpenSslSymbols()
RESOLVEFUNC(d2i_PKCS12_bio)
RESOLVEFUNC(PKCS12_free)
symbolsResolved = true;
delete libs.first;
delete libs.second;
if (!_q_SSLeay || q_SSLeay() >= 0x10100000L) {
// OpenSSL 1.1 deprecated and removed SSLeay. We consider a failure to
// resolve this symbol as a failure to resolve symbols.
// The right operand of '||' above ... a bit of paranoia.
qCWarning(lcSsl, "Incompatible version of OpenSSL");
return false;
}
symbolsResolved = true;
return true;
}
#endif // QT_CONFIG(library)

View File

@ -7,11 +7,15 @@ qtConfig(freetype) {
SOURCES += freetype/qfontengine_ft.cpp
}
uikit: \
# On iOS/tvOS/watchOS CoreText and CoreGraphics are stand-alone frameworks
LIBS_PRIVATE += -framework CoreText -framework CoreGraphics -framework UIKit
else: \
# On macOS they are re-exported by the AppKit framework
LIBS_PRIVATE += \
-framework CoreFoundation \
-framework CoreGraphics \
-framework CoreText \
-framework Foundation
macos: \
LIBS_PRIVATE += -framework AppKit
else: \
LIBS_PRIVATE += -framework UIKit
CONFIG += watchos_coretext

View File

@ -509,7 +509,7 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of
// actions
- (NSArray *)accessibilityActionNames {
NSMutableArray * nsActions = [NSMutableArray new];
NSMutableArray *nsActions = [[NSMutableArray new] autorelease];
QAccessibleInterface *iface = QAccessible::accessibleInterface(axid);
if (!iface || !iface->isValid())
return nsActions;

View File

@ -83,7 +83,7 @@ private:
QList<QPointer<QCocoaMenu> > m_menus;
NSMenu *m_nativeMenu;
QCocoaWindow *m_window;
QPointer<QCocoaWindow> m_window;
};
QT_END_NAMESPACE

View File

@ -52,8 +52,7 @@ QT_BEGIN_NAMESPACE
static QList<QCocoaMenuBar*> static_menubars;
QCocoaMenuBar::QCocoaMenuBar() :
m_window(0)
QCocoaMenuBar::QCocoaMenuBar()
{
static_menubars.append(this);
@ -79,7 +78,7 @@ QCocoaMenuBar::~QCocoaMenuBar()
[m_nativeMenu release];
static_menubars.removeOne(this);
if (m_window && m_window->menubar() == this) {
if (!m_window.isNull() && m_window->menubar() == this) {
m_window->setMenubar(0);
// Delete the children first so they do not cause
@ -92,9 +91,10 @@ QCocoaMenuBar::~QCocoaMenuBar()
bool QCocoaMenuBar::needsImmediateUpdate()
{
if (m_window && m_window->window()->isActive()) {
return true;
} else if (!m_window) {
if (!m_window.isNull()) {
if (m_window->window()->isActive())
return true;
} else {
// Only update if the focus/active window has no
// menubar, which means it'll be using this menubar.
// This is to avoid a modification in a parentless
@ -221,11 +221,11 @@ void QCocoaMenuBar::handleReparent(QWindow *newParentWindow)
qDebug() << "QCocoaMenuBar" << this << "handleReparent" << newParentWindow;
#endif
if (m_window)
m_window->setMenubar(NULL);
if (!m_window.isNull())
m_window->setMenubar(nullptr);
if (newParentWindow == NULL) {
m_window = NULL;
if (newParentWindow == nullptr) {
m_window.clear();
} else {
newParentWindow->create();
m_window = static_cast<QCocoaWindow*>(newParentWindow->handle());
@ -246,7 +246,7 @@ QCocoaWindow *QCocoaMenuBar::findWindowForMenubar()
QCocoaMenuBar *QCocoaMenuBar::findGlobalMenubar()
{
foreach (QCocoaMenuBar *mb, static_menubars) {
if (mb->m_window == NULL)
if (mb->m_window.isNull())
return mb;
}

View File

@ -302,6 +302,7 @@ public: // for QNSView
bool isContentView() const;
bool isChildNSWindow() const;
bool alwaysShowToolWindow() const;
void removeMonitor();
NSView *m_view;

View File

@ -291,6 +291,8 @@ static void qt_closePopups()
- (void)closeAndRelease
{
qCDebug(lcQpaCocoaWindow) << "closeAndRelease" << self;
[self close];
if (self.helper.grabbingMouse) {
@ -315,6 +317,71 @@ static void qt_closePopups()
@synthesize helper = _helper;
+ (void)applicationActivationChanged:(NSNotification*)notification
{
const id sender = self;
NSEnumerator<NSWindow*> *windowEnumerator = nullptr;
NSApplication *application = [NSApplication sharedApplication];
#if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_12)
if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSSierra) {
// Unfortunately there's no NSWindowListOrderedBackToFront,
// so we have to manually reverse the order using an array.
NSMutableArray *windows = [[[NSMutableArray alloc] init] autorelease];
[application enumerateWindowsWithOptions:NSWindowListOrderedFrontToBack
usingBlock:^(NSWindow *window, BOOL *) {
// For some reason AppKit will give us nil-windows, skip those
if (!window)
return;
[(NSMutableArray*)windows addObject:window];
}
];
windowEnumerator = windows.reverseObjectEnumerator;
} else
#endif
{
// No way to get ordered list of windows, so fall back to unordered,
// list, which typically corresponds to window creation order.
windowEnumerator = application.windows.objectEnumerator;
}
for (NSWindow *window in windowEnumerator) {
// We're meddling with normal and floating windows, so leave others alone
if (!(window.level == NSNormalWindowLevel || window.level == NSFloatingWindowLevel))
continue;
// Windows that hide automatically will keep their NSFloatingWindowLevel,
// and hence be on top of the window stack. We don't want to affect these
// windows, as otherwise we might end up with key windows being ordered
// behind these auto-hidden windows when activating the application by
// clicking on a new tool window.
if (window.hidesOnDeactivate)
continue;
if ([window conformsToProtocol:@protocol(QNSWindowProtocol)]) {
QCocoaWindow *cocoaWindow = static_cast<id<QNSWindowProtocol>>(window).helper.platformWindow;
window.level = notification.name == NSApplicationWillResignActiveNotification ?
NSNormalWindowLevel : cocoaWindow->windowLevel(cocoaWindow->window()->flags());
}
// The documentation says that "when a window enters a new level, its ordered
// in front of all its peers in that level", but that doesn't seem to be the
// case in practice. To keep the order correct after meddling with the window
// levels, we explicitly order each window to the front. Since we are iterating
// the windows in back-to-front order, this is okey. The call also triggers AppKit
// to re-evaluate the level in relation to windows from other applications,
// working around an issue where our tool windows would stay on top of other
// application windows if activation was transferred to another application by
// clicking on it instead of via the application switcher or Dock. Finally, we
// do this re-ordering for all windows (except auto-hiding ones), otherwise we would
// end up triggering a bug in AppKit where the tool windows would disappear behind
// the application window.
[window orderFront:sender];
}
}
- (id)initWithContentRect:(NSRect)contentRect
screen:(NSScreen*)screen
styleMask:(NSUInteger)windowStyle
@ -328,6 +395,17 @@ static void qt_closePopups()
if (self) {
_helper = [[QNSWindowHelper alloc] initWithNSWindow:self platformWindow:qpw];
if (qpw->alwaysShowToolWindow()) {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:[self class] selector:@selector(applicationActivationChanged:)
name:NSApplicationWillResignActiveNotification object:nil];
[center addObserver:[self class] selector:@selector(applicationActivationChanged:)
name:NSApplicationWillBecomeActiveNotification object:nil];
});
}
}
return self;
}
@ -361,6 +439,8 @@ static void qt_closePopups()
- (void)closeAndRelease
{
qCDebug(lcQpaCocoaWindow) << "closeAndRelease" << self;
[self.helper detachFromPlatformWindow];
[self close];
[self release];
@ -1595,7 +1675,7 @@ void QCocoaWindow::recreateWindowIfNeeded()
if (isChildNSWindow() != shouldBeChildNSWindow)
recreateReason |= ChildNSWindowChanged;
const bool shouldBeContentView = !parentWindow || shouldBeChildNSWindow;
const bool shouldBeContentView = (!parentWindow && !m_viewIsEmbedded) || shouldBeChildNSWindow;
if (isContentView() != shouldBeContentView)
recreateReason |= ContentViewChanged;
@ -1612,7 +1692,7 @@ void QCocoaWindow::recreateWindowIfNeeded()
return;
}
qCDebug(lcQpaCocoaWindow) << "Recreating NSWindow due to" << recreateReason;
qCDebug(lcQpaCocoaWindow) << "Reconfiguring NSWindow due to" << recreateReason;
QCocoaWindow *parentCocoaWindow = static_cast<QCocoaWindow *>(parentWindow);
@ -1627,6 +1707,7 @@ void QCocoaWindow::recreateWindowIfNeeded()
// Remove current window (if any)
if ((isContentView() && !shouldBeContentView) || (recreateReason & PanelChanged)) {
qCDebug(lcQpaCocoaWindow) << "Getting rid of existing window" << m_nsWindow;
[m_nsWindow closeAndRelease];
if (isChildNSWindow())
[m_view.window.parentWindow removeChildWindow:m_view.window];
@ -1654,6 +1735,7 @@ void QCocoaWindow::recreateWindowIfNeeded()
// Move view to new NSWindow if needed
if (newWindow) {
qCDebug(lcQpaCocoaWindow) << "Ensuring that view is content view for" << m_nsWindow;
[m_view setPostsFrameChangedNotifications:NO];
[newWindow setContentView:m_view];
[m_view setPostsFrameChangedNotifications:YES];
@ -1731,6 +1813,8 @@ void QCocoaWindow::requestActivateWindow()
QCocoaNSWindow *QCocoaWindow::createNSWindow(bool shouldBeChildNSWindow, bool shouldBePanel)
{
qCDebug(lcQpaCocoaWindow) << "createNSWindow" << shouldBeChildNSWindow << shouldBePanel;
QMacAutoReleasePool pool;
QRect rect = geometry();
@ -1778,8 +1862,7 @@ QCocoaNSWindow *QCocoaWindow::createNSWindow(bool shouldBeChildNSWindow, bool sh
if (shouldBePanel) {
// Qt::Tool windows hide on app deactivation, unless Qt::WA_MacAlwaysShowToolWindow is set
window.hidesOnDeactivate = ((type & Qt::Tool) == Qt::Tool) &&
!qt_mac_resolveOption(false, QPlatformWindow::window(), "_q_macAlwaysShowToolWindow", "");
window.hidesOnDeactivate = ((type & Qt::Tool) == Qt::Tool) && !alwaysShowToolWindow();
// Make popup windows show on the same desktop as the parent full-screen window
window.collectionBehavior = NSWindowCollectionBehaviorFullScreenAuxiliary;
@ -1805,6 +1888,11 @@ QCocoaNSWindow *QCocoaWindow::createNSWindow(bool shouldBeChildNSWindow, bool sh
return window;
}
bool QCocoaWindow::alwaysShowToolWindow() const
{
return qt_mac_resolveOption(false, window(), "_q_macAlwaysShowToolWindow", "");
}
void QCocoaWindow::removeMonitor()
{
if (!monitor)

View File

@ -242,11 +242,12 @@
if (platformData.value(kImePlatformDataHideShortcutsBar).toBool()) {
// According to the docs, leadingBarButtonGroups/trailingBarButtonGroups should be set to nil to hide the shortcuts bar.
// However, starting with iOS 10, the API has been surrounded with NS_ASSUME_NONNULL, which contradicts this and causes
// compiler warnings. And assigning just an empty array causes layout asserts. Hence, we assign empty button groups instead.
UIBarButtonItemGroup *leading = [[[UIBarButtonItemGroup alloc] initWithBarButtonItems:@[] representativeItem:nil] autorelease];
UIBarButtonItemGroup *trailing = [[[UIBarButtonItemGroup alloc] initWithBarButtonItems:@[] representativeItem:nil] autorelease];
self.inputAssistantItem.leadingBarButtonGroups = @[leading];
self.inputAssistantItem.trailingBarButtonGroups = @[trailing];
// compiler warnings. Still it is the way to go to really hide the space reserved for that.
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnonnull"
self.inputAssistantItem.leadingBarButtonGroups = nil;
self.inputAssistantItem.trailingBarButtonGroups = nil;
#pragma clang diagnostic pop
}
}
#endif

View File

@ -78,7 +78,7 @@ qtConfig(opengles2) {
HEADERS += qqnxglcontext.h \
qqnxeglwindow.h
QMAKE_USE += egl
QMAKE_USE += opengl_es2 egl
}
CONFIG(qqnx_pps) {

View File

@ -47,6 +47,8 @@
#include <QtGui/QOpenGLContext>
#include <QtGui/QScreen>
#include <dlfcn.h>
#if defined(QQNXGLCONTEXT_DEBUG)
#define qGLContextDebug qDebug
#else
@ -262,7 +264,10 @@ QFunctionPointer QQnxGLContext::getProcAddress(const char *procName)
qFatal("QQNX: failed to set EGL API, err=%d", eglGetError());
// Lookup EGL extension function pointer
return static_cast<QFunctionPointer>(eglGetProcAddress(procName));
QFunctionPointer result = static_cast<QFunctionPointer>(eglGetProcAddress(procName));
if (!result)
result = reinterpret_cast<QFunctionPointer>(dlsym(RTLD_DEFAULT, procName));
return result;
}
bool QQnxGLContext::isSharing() const

View File

@ -894,13 +894,15 @@ void QWindowsBaseWindow::hide_sys() // Normal hide, do not activate other window
void QWindowsBaseWindow::raise_sys()
{
qCDebug(lcQpaWindows) << __FUNCTION__ << this << window();
SetWindowPos(handle(), HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
if ((window()->flags() & (Qt::WindowStaysOnTopHint | Qt::WindowStaysOnBottomHint)) == 0)
SetWindowPos(handle(), HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
}
void QWindowsBaseWindow::lower_sys()
{
qCDebug(lcQpaWindows) << __FUNCTION__ << this << window();
SetWindowPos(handle(), HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
if ((window()->flags() & (Qt::WindowStaysOnTopHint | Qt::WindowStaysOnBottomHint)) == 0)
SetWindowPos(handle(), HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
}
void QWindowsBaseWindow::setWindowTitle_sys(const QString &title)

View File

@ -1,6 +1,8 @@
# Note: OpenGL32 must precede Gdi32 as it overwrites some functions.
LIBS += -lole32 -luser32 -lwinspool -limm32 -lwinmm -loleaut32
QT_FOR_CONFIG += gui
qtConfig(opengl):!qtConfig(opengles2):!qtConfig(dynamicgl): LIBS *= -lopengl32
mingw: LIBS *= -luuid
@ -112,5 +114,10 @@ RESOURCES += $$PWD/openglblacklists.qrc
qtConfig(accessibility): include($$PWD/accessible/accessible.pri)
DEFINES *= LIBEGL_NAME=$${LIBQTANGLE_NAME}
DEFINES *= LIBGLESV2_NAME=$${LIBQTANGLE_NAME}
qtConfig(combined-angle-lib) {
DEFINES *= LIBEGL_NAME=$${LIBQTANGLE_NAME}
DEFINES *= LIBGLESV2_NAME=$${LIBQTANGLE_NAME}
} else {
DEFINES *= LIBEGL_NAME=$${LIBEGL_NAME}
DEFINES *= LIBGLESV2_NAME=$${LIBGLESV2_NAME}
}

View File

@ -1,6 +1,9 @@
option(host_build)
!force_bootstrap:!qtConfig(commandlineparser): \
CONFIG += force_bootstrap
!force_bootstrap {
include($$OUT_PWD/../../corelib/qtcore-config.pri)
!qtConfig(commandlineparser): \
CONFIG += force_bootstrap
}
QT = core-private
force_bootstrap: QT += bootstrap_dbus-private
else: QT += dbus-private

View File

@ -58,7 +58,7 @@
alphabetical dictionary of widgets and other user interface elements,
with comprehensive coverage of each. Each chapter covers one widget
or other element, contains the most important recommendation from the
Macintosh, Windows and Motif style guides, notes about common
\macos, Windows and Motif style guides, notes about common
problems, comparison with other widgets that can serve some of the
same roles as this one, etc.
@ -72,7 +72,7 @@
\b{\l{http://www.amazon.com/exec/obidos/ASIN/0201622165/trolltech/t}{Macintosh
Human Interface Guidelines}}, Second Edition, ISBN
0-201-62216-5, is worth buying for the \e {don't}s alone. Even
if you're not writing Macintosh software, avoiding most of what it
if you are not writing software for \macos, avoiding most of what it
advises against will produce more easily comprehensible software.
Doing what it tells you to do may also help.

View File

@ -1818,7 +1818,7 @@ void QTreeView::drawBranches(QPainter *painter, const QRect &rect,
QStyle::State extraFlags = QStyle::State_None;
if (isEnabled())
extraFlags |= QStyle::State_Enabled;
if (window()->isActiveWindow())
if (hasFocus())
extraFlags |= QStyle::State_Active;
QPoint oldBO = painter->brushOrigin();
if (verticalScrollMode() == QAbstractItemView::ScrollPerPixel)

View File

@ -44,6 +44,8 @@ private slots:
void float_cast();
void float_cast_data();
void promotionTests();
void arithOps_data();
void arithOps();
};
void tst_qfloat16::fuzzyCompare_data()
@ -198,8 +200,12 @@ void tst_qfloat16::float_cast()
{
QFETCH(float, val);
QVERIFY(qFuzzyCompare(float(qfloat16(val)),val));
QVERIFY(qFuzzyCompare(float(qfloat16(-val)),-val));
QVERIFY(qFuzzyCompare((float)(qfloat16(val)),val));
QVERIFY(qFuzzyCompare((float)(qfloat16(-val)),-val));
QVERIFY(qFuzzyCompare((double)(qfloat16(val)),(double)(val)));
QVERIFY(qFuzzyCompare((double)(qfloat16(-val)),(double)(-val)));
//QVERIFY(qFuzzyCompare((long double)(qfloat16(val)),(long double)(val)));
//QVERIFY(qFuzzyCompare((long double)(qfloat16(-val)),(long double)(-val)));
}
void tst_qfloat16::promotionTests()
@ -248,6 +254,55 @@ void tst_qfloat16::promotionTests()
QCOMPARE(sizeof(double),sizeof(qfloat16(1.f)-1));
QCOMPARE(sizeof(double),sizeof(qfloat16(1.f)*1));
QCOMPARE(sizeof(double),sizeof(qfloat16(1.f)/1));
QCOMPARE(QString::number(1.f),QString::number(qfloat16(1.f)));
}
void tst_qfloat16::arithOps_data()
{
QTest::addColumn<float>("val1");
QTest::addColumn<float>("val2");
QTest::newRow("zero") << 0.0f << 2.0f;
QTest::newRow("one") << 1.0f << 4.0f;
QTest::newRow("ten") << 10.0f << 20.0f;
}
void tst_qfloat16::arithOps()
{
QFETCH(float, val1);
QFETCH(float, val2);
QVERIFY(qFuzzyCompare(float(qfloat16(val1) + qfloat16(val2)), val1 + val2));
QVERIFY(qFuzzyCompare(float(qfloat16(val1) - qfloat16(val2)), val1 - val2));
QVERIFY(qFuzzyCompare(float(qfloat16(val1) * qfloat16(val2)), val1 * val2));
QVERIFY(qFuzzyCompare(float(qfloat16(val1) / qfloat16(val2)), val1 / val2));
QVERIFY(qFuzzyCompare(qfloat16(val1) + val2, val1 + val2));
QVERIFY(qFuzzyCompare(qfloat16(val1) - val2, val1 - val2));
QVERIFY(qFuzzyCompare(qfloat16(val1) * val2, val1 * val2));
QVERIFY(qFuzzyCompare(qfloat16(val1) / val2, val1 / val2));
QVERIFY(qFuzzyCompare(val1 + qfloat16(val2), val1 + val2));
QVERIFY(qFuzzyCompare(val1 - qfloat16(val2), val1 - val2));
QVERIFY(qFuzzyCompare(val1 * qfloat16(val2), val1 * val2));
QVERIFY(qFuzzyCompare(val1 / qfloat16(val2), val1 / val2));
float r1 = 0.f;
r1 += qfloat16(val2);
QVERIFY(qFuzzyCompare(r1,val2));
float r2 = 0.f;
r2 -= qfloat16(val2);
QVERIFY(qFuzzyCompare(r2,-val2));
float r3 = 1.f;
r3 *= qfloat16(val2);
QVERIFY(qFuzzyCompare(r3,val2));
float r4 = 1.f;
r4 /= qfloat16(val2);
QVERIFY(qFuzzyCompare(r4,1.f/val2));
}
QTEST_APPLESS_MAIN(tst_qfloat16)

View File

@ -155,7 +155,9 @@ void tst_QCoreApplication::qAppName()
void tst_QCoreApplication::qAppVersion()
{
#if defined(Q_OS_WIN)
#if defined(Q_OS_WINRT)
const char appVersion[] = "1.0.0.0";
#elif defined(Q_OS_WIN)
const char appVersion[] = "1.2.3.4";
#elif defined(Q_OS_DARWIN) || defined(Q_OS_ANDROID)
const char appVersion[] = "1.2.3";
@ -946,9 +948,12 @@ void tst_QCoreApplication::addRemoveLibPaths()
char *argv[] = { const_cast<char*>(QTest::currentAppName()) };
TestApplication app(argc, argv);
// Check that modifications stay alive across the creation of an application.
QVERIFY(QCoreApplication::libraryPaths().contains(currentDir));
QVERIFY(!QCoreApplication::libraryPaths().contains(paths[0]));
// If libraryPaths only contains currentDir, neither will be in libraryPaths now.
if (paths.length() != 1 && currentDir != paths[0]) {
// Check that modifications stay alive across the creation of an application.
QVERIFY(QCoreApplication::libraryPaths().contains(currentDir));
QVERIFY(!QCoreApplication::libraryPaths().contains(paths[0]));
}
QStringList replace;
replace << currentDir << paths[0];

View File

@ -1,4 +1,6 @@
[sendPostedEvents]
windows
osx
[registerTimer]
windows
osx

View File

@ -1,2 +1,3 @@
[testQuitLock]
windows
osx

View File

@ -1729,10 +1729,10 @@ void tst_QMetaType::metaObject()
}
#define METATYPE_ID_FUNCTION(Type, MetaTypeId, Name) \
case ::qMetaTypeId< Name >(): metaType = MetaTypeIdStruct<MetaTypeId>::Value;
case ::qMetaTypeId< Name >(): metaType = MetaTypeIdStruct<MetaTypeId>::Value; break;
#define REGISTER_METATYPE_FUNCTION(Type, MetaTypeId, Name) \
case qRegisterMetaType< Name >(): metaType = RegisterMetaTypeStruct<MetaTypeId>::Value;
case qRegisterMetaType< Name >(): metaType = RegisterMetaTypeStruct<MetaTypeId>::Value; break;
template<int>
struct MetaTypeIdStruct

View File

@ -350,6 +350,9 @@ void tst_QSocketNotifier::async_writeDatagramSlot()
void tst_QSocketNotifier::asyncMultipleDatagram()
{
#ifdef Q_OS_WINRT
QSKIP("WinRT does not allow connection to localhost", SkipAll);
#else
m_asyncSender = new QUdpSocket;
m_asyncReceiver = new QUdpSocket;
@ -379,6 +382,7 @@ void tst_QSocketNotifier::asyncMultipleDatagram()
delete m_asyncSender;
delete m_asyncReceiver;
#endif // !Q_OS_WINRT
}
QTEST_MAIN(tst_QSocketNotifier)

View File

@ -144,12 +144,10 @@ void tst_QTimer::timeout()
QCOMPARE(helper.count, 0);
QTest::qWait(TIMEOUT_TIMEOUT);
QVERIFY(helper.count > 0);
QTRY_VERIFY_WITH_TIMEOUT(helper.count > 0, TIMEOUT_TIMEOUT);
int oldCount = helper.count;
QTest::qWait(TIMEOUT_TIMEOUT);
QVERIFY(helper.count > oldCount);
QTRY_VERIFY_WITH_TIMEOUT(helper.count > oldCount, TIMEOUT_TIMEOUT);
}
void tst_QTimer::remainingTime()

View File

@ -72,12 +72,12 @@ static inline QString testSuiteWarning()
str << "\nCannot find the shared-mime-info test suite\nstarting from: "
<< QDir::toNativeSeparators(QDir::currentPath()) << "\n"
"cd " << QDir::toNativeSeparators(QStringLiteral("tests/auto/corelib/mimetypes/qmimedatabase")) << "\n"
"wget http://cgit.freedesktop.org/xdg/shared-mime-info/snapshot/Release-1-0.zip\n"
"unzip Release-1-0.zip\n";
"wget http://cgit.freedesktop.org/xdg/shared-mime-info/snapshot/Release-1-8.zip\n"
"unzip Release-1-8.zip\n";
#ifdef Q_OS_WIN
str << "mkdir testfiles\nxcopy /s Release-1-0\\tests testfiles\n";
str << "mkdir testfiles\nxcopy /s Release-1-8 s-m-i\n";
#else
str << "ln -s Release-1-0/tests testfiles\n";
str << "ln -s Release-1-8 s-m-i\n";
#endif
return result;
}
@ -154,7 +154,7 @@ void tst_QMimeDatabase::initTestCase()
QVERIFY2(copyResourceFile(xmlFileName, xmlTargetFileName, &errorMessage), qPrintable(errorMessage));
#endif
m_testSuite = QFINDTESTDATA("testfiles");
m_testSuite = QFINDTESTDATA("s-m-i/tests");
if (m_testSuite.isEmpty())
qWarning("%s", qPrintable(testSuiteWarning()));
@ -438,7 +438,7 @@ void tst_QMimeDatabase::icons()
QMimeType directory = db.mimeTypeForFile(QString::fromLatin1("/"));
QCOMPARE(directory.name(), QString::fromLatin1("inode/directory"));
QCOMPARE(directory.iconName(), QString::fromLatin1("inode-directory"));
QCOMPARE(directory.genericIconName(), QString::fromLatin1("inode-x-generic"));
QCOMPARE(directory.genericIconName(), QString::fromLatin1("folder"));
QMimeType pub = db.mimeTypeForFile(QString::fromLatin1("foo.epub"), QMimeDatabase::MatchExtension);
QCOMPARE(pub.name(), QString::fromLatin1("application/epub+zip"));
@ -510,7 +510,7 @@ void tst_QMimeDatabase::mimeTypeForFileWithContent()
mime = db.mimeTypeForFile(txtTempFileName);
QCOMPARE(mime.name(), QString::fromLatin1("text/plain"));
mime = db.mimeTypeForFile(txtTempFileName, QMimeDatabase::MatchContent);
QCOMPARE(mime.name(), QString::fromLatin1("application/smil"));
QCOMPARE(mime.name(), QString::fromLatin1("application/smil+xml"));
}
// Test what happens with an incorrect path
@ -607,7 +607,7 @@ void tst_QMimeDatabase::allMimeTypes()
QVERIFY(!lst.isEmpty());
// Hardcoding this is the only way to check both providers find the same number of mimetypes.
QCOMPARE(lst.count(), 661);
QCOMPARE(lst.count(), 749);
foreach (const QMimeType &mime, lst) {
const QString name = mime.name();
@ -802,7 +802,7 @@ void tst_QMimeDatabase::findByData()
// Expected to fail
QVERIFY2(resultMimeTypeName != mimeTypeName, qPrintable(resultMimeTypeName));
} else {
QCOMPARE(resultMimeTypeName, mimeTypeName);
QCOMPARE(resultMimeTypeName.toLower(), mimeTypeName.toLower());
}
QFileInfo info(filePath);
@ -833,7 +833,7 @@ void tst_QMimeDatabase::findByFile()
// Expected to fail
QVERIFY2(resultMimeTypeName != mimeTypeName, qPrintable(resultMimeTypeName));
} else {
QCOMPARE(resultMimeTypeName, mimeTypeName);
QCOMPARE(resultMimeTypeName.toLower(), mimeTypeName.toLower());
}
// Test QFileInfo overload

View File

@ -242,10 +242,13 @@ public:
{
case 4:
if4 = new Interface4(this);
Q_FALLTHROUGH();
case 3:
if3 = new Interface3(this);
Q_FALLTHROUGH();
case 2:
if2 = new Interface2(this);
Q_FALLTHROUGH();
case 1:
if1 = new Interface1(this);
}
@ -270,4 +273,4 @@ signals:
void nonScriptableSignalVoid();
};
#endif // MYOBJECT_H
#endif // MYOBJECT_H

View File

@ -99,6 +99,9 @@ private slots:
void translate();
void lineWithinBounds();
void intersectionEquality();
void intersectionPointOnEdge();
};
void tst_QPainterPath::cleanupTestCase()
@ -1313,6 +1316,64 @@ void tst_QPainterPath::lineWithinBounds()
}
}
void tst_QPainterPath::intersectionEquality()
{
// Test case from QTBUG-17027
QPainterPath p1;
p1.moveTo(256.0000000000000000, 135.8384137532701743);
p1.lineTo(50.9999999999999715, 107.9999999999999857);
p1.lineTo(233.5425474228109123, 205.3560252921671462);
p1.lineTo(191.7771366877784373, 318.0257074407572304);
p1.lineTo(-48.2616272048215151, 229.0459803737862216);
p1.lineTo(0.0000000000000000, 98.8515898136580801);
p1.lineTo(0.0000000000000000, 0.0000000000000000);
p1.lineTo(256.0000000000000000, 0.0000000000000000);
p1.lineTo(256.0000000000000000, 135.8384137532701743);
QPainterPath p2;
p2.moveTo(1516.2703263523442274, 306.9795200262722119);
p2.lineTo(-1296.8426224886295585, -75.0331736542986931);
p2.lineTo(-1678.8553161692004778, 2738.0797751866753060);
p2.lineTo(1134.2576326717733081, 3120.0924688672457705);
p2.lineTo(1516.2703263523442274, 306.9795200262722119);
QPainterPath i1 = p1.intersected(p2);
QPainterPath i2 = p2.intersected(p1);
QVERIFY(i1 == i2 || i1.toReversed() == i2);
p1 = QPainterPath();
p1.moveTo(256.00000000, 135.83841375);
p1.lineTo(50.99999999, 107.99999999);
p1.lineTo(233.54254742, 205.35602529);
p1.lineTo(191.77713668, 318.02570744);
p1.lineTo(-48.26162720, 229.04598037);
p1.lineTo(0.00000000, 98.85158981);
p1.lineTo(0.00000000, 0.00000000);
p1.lineTo(256.00000000, 0.00000000);
p1.lineTo(256.00000000, 135.83841375);
p2 = QPainterPath();
p2.moveTo(1516.27032635, 306.97952002);
p2.lineTo(-1296.84262248, -75.03317365);
p2.lineTo(-1678.85531616, 2738.07977518);
p2.lineTo(1134.25763267, 3120.09246886);
p2.lineTo(1516.27032635, 306.97952002);
i1 = p1.intersected(p2);
i2 = p2.intersected(p1);
QVERIFY(i1 == i2 || i1.toReversed() == i2);
}
void tst_QPainterPath::intersectionPointOnEdge()
{
// From QTBUG-31551
QPainterPath p; p.addRoundedRect(-10, 10, 40, 40, 10, 10);
QRectF r(0, 0, 100, 100);
QPainterPath rp; rp.addRect(r);
QVERIFY(!p.intersected(rp).isEmpty());
QVERIFY(p.intersects(rp));
QVERIFY(p.intersects(r));
}
QTEST_APPLESS_MAIN(tst_QPainterPath)

View File

@ -398,7 +398,7 @@ void tst_QSqlThread::readWriteThreading()
producer.start();
consumer.start();
QTRY_VERIFY(threadFinishedCount >= 2);
QTRY_VERIFY_WITH_TIMEOUT(threadFinishedCount >= 2, 10000);
}
// run with n threads in parallel. Change this constant to hammer the poor DB server even more

View File

@ -0,0 +1,3 @@
[removeItem]
# QTBUG-60754, QTest::mouseMove is not always respected, or the CI moves the cursor
osx-10.11 ci