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:
commit
6a772fd201
@ -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]
|
||||
|
@ -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
586
dist/changes-5.9.0
vendored
Normal 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.
|
@ -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
|
||||
|
||||
|
@ -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 \
|
||||
|
@ -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:
|
||||
|
@ -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
13
mkspecs/common/angle.conf
Normal 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
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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 {
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
2
src/3rdparty/sqlite/qt_attribution.json
vendored
2
src/3rdparty/sqlite/qt_attribution.json
vendored
@ -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."
|
||||
}
|
||||
|
171
src/3rdparty/sqlite/sqlite3.c
vendored
171
src/3rdparty/sqlite/sqlite3.c
vendored
@ -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){
|
||||
|
14
src/3rdparty/sqlite/sqlite3.h
vendored
14
src/3rdparty/sqlite/sqlite3.h
vendored
@ -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()]
|
||||
*/
|
||||
|
@ -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
|
||||
|
605
src/angle/src/common/gles_common.pri
Normal file
605
src/angle/src/common/gles_common.pri
Normal 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
|
26
src/angle/src/libEGL/libEGL.pro
Normal file
26
src/angle/src/libEGL/libEGL.pro
Normal 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
|
12
src/angle/src/libGLESv2/libGLESv2.pro
Normal file
12
src/angle/src/libGLESv2/libGLESv2.pro
Normal 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
|
||||
}
|
@ -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
|
||||
|
@ -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]
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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
@ -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
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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",
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
{
|
||||
|
@ -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.
|
||||
|
||||
*/
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -83,7 +83,7 @@ private:
|
||||
|
||||
QList<QPointer<QCocoaMenu> > m_menus;
|
||||
NSMenu *m_nativeMenu;
|
||||
QCocoaWindow *m_window;
|
||||
QPointer<QCocoaWindow> m_window;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -302,6 +302,7 @@ public: // for QNSView
|
||||
bool isContentView() const;
|
||||
bool isChildNSWindow() const;
|
||||
|
||||
bool alwaysShowToolWindow() const;
|
||||
void removeMonitor();
|
||||
|
||||
NSView *m_view;
|
||||
|
@ -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, it’s 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)
|
||||
|
@ -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
|
||||
|
@ -78,7 +78,7 @@ qtConfig(opengles2) {
|
||||
HEADERS += qqnxglcontext.h \
|
||||
qqnxeglwindow.h
|
||||
|
||||
QMAKE_USE += egl
|
||||
QMAKE_USE += opengl_es2 egl
|
||||
}
|
||||
|
||||
CONFIG(qqnx_pps) {
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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];
|
||||
|
@ -1,4 +1,6 @@
|
||||
[sendPostedEvents]
|
||||
windows
|
||||
osx
|
||||
[registerTimer]
|
||||
windows
|
||||
osx
|
||||
|
@ -1,2 +1,3 @@
|
||||
[testQuitLock]
|
||||
windows
|
||||
osx
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
3
tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST
Normal file
3
tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST
Normal file
@ -0,0 +1,3 @@
|
||||
[removeItem]
|
||||
# QTBUG-60754, QTest::mouseMove is not always respected, or the CI moves the cursor
|
||||
osx-10.11 ci
|
Loading…
Reference in New Issue
Block a user