Qt 5.12 introduces many new features and improvements as well as bugfixes
over the 5.11.x series. For more details, refer to the online documentation
included in this distribution. The documentation is also available online:

https://doc.qt.io/qt-5/index.html

The Qt version 5.12 series is binary compatible with the 5.11.x series.
Applications compiled for 5.11 will continue to run with 5.12.

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.

****************************************************************************
*                                General                                   *
****************************************************************************

 - [QTBUG-51710] Added TableView with a similar architecture as ListView
   (inheriting Flickable and using QQmlInstanceModel internally)
   but 2-dimensional. It works best with a QAbstractItemModel that defines
   multiple columns and rows (i.e. it's the QtQuick counterpart to QTableView)
   but can also present a single-column view of other model types.
   As an optimization, it maintains a pool of the delegate instances that
   are visible (plus a few extras); during scrolling, as delegates fall
   out of view, they are re-bound to show cells that have just come into view.
 - [QTBUG-26681] Added DelegateChooser, a new type of Component to choose
   different delegates in an Item View (e.g. TableView) depending on model
   roles.  DelegateChoice instances specify the available choices.
 - Pointer Handlers and the Keys handler are now collectively called
   Input Handlers [QTBUG-66651], and are fully supported as part of
   Qt Quick 2.12 and forward.  The Qt.labs.handlers import is now removed.
 - [QTBUG-68072] Added HoverHandler to detect the position of the
   hovering mouse or stylus pointer.
 - The JavaScript engine now supports ECMAScript 7.
 - ECMAScript modules can now be loaded directly with QJSEngine::importModule()
   and imported in .qml files when using the .mjs file extension.
 - Qt Quick applications can now be deployed via WebAssembly.
 - The new Qt.labs.wavefrontmesh import provides an experimental
   WavefrontMesh type which can read a Wavefront .obj file containing
   a 2D shape, and generate a 2D mesh for use with ShaderEffect.

****************************************************************************
*                        Important Behavior Changes                        *
****************************************************************************

 - [QTBUG-7329][QTBUG-41977][QTBUG-69196] The automatic translation loading
   in qml, qmlscene and QQmlApplicationEngine now tries to load
   translations for all languages in QLocale::uiLanguages(). This might
   require shipping an empty translation for the source language.

****************************************************************************
*                                  QtQml                                   *
****************************************************************************

 - LoggingCategory:
   * [QTBUG-67094] Added defaultLogLevel property. It is possible to define
     default log level that LoggingCategory is enabled for.

 - QJSEngine:
   * [QTBUG-39041] Added API to throw run-time errors.
   * Added function to import ECMASCript modules from the file system or
     the Qt resource system.
   * [QTBUG-71083] Fixed a stack overflow in the parser.
   * [QTBUG-70632] It's now OK to declare a class in a .mjs module.
   * [QTBUG-69475] Fixed quadratic behavior when allocating large objects.

 - QQmlEngine:
   * [QTBUG-56150] QML cache files are now always stored in the
     application's cache directory when being generated at run-time. If
     precompiled QML files exist at the source location, then they are
     loaded and no cache file is being generated. The application's
     uninstaller is responsible for cleaning up the cache during removal.
   * [QTBUG-39970] Added API to access singletons associated with a
     QQmlEngine.
   * [QTBUG-53111] The onStatusChanged signal from the incubator object
     that is returned from Component.incubateObject() is more reliable.
   * [QTBUG-70425] Fixed translation contexts for paths with drive letters
     on Windows
   * [QTBUG-68350] Fix QQmlEngine::retranslate() with ListElement objects
     that use translation functions such as qsTr.
   * [QTBUG-51581] Properties of the JS global object will now be looked up
     after local properties in the QML object. This can lead to runtime
     incompatibilities if your qml file is named the same as a property of
     the global object (e.g. Date.qml).
   * [QTBUG-71184] Enums in subclasses can overwrite inherited enums.
   * Added option to disable unscoped registration of enum classes.
   * [QTBUG-69884] Fixed the visibility of the Connections.enabled property
     to appear only when importing QtQml/QtQuick >= 2.3, which was introduced
     with Qt 5.7. Otherwise it would accidentally shadow an "enabled"
     context property, for example.

 - QtTest:
   * We now call cleanupTestCase() on the object given to QUICK_TEST_MAIN
     before starting destruction.
   * Add test init function to be called when application object is
     available.
   * [QTBUG-47111] ignoreWarning now supports ignoring regular expressions
     as well as strings.

****************************************************************************
*                                 QtQuick                                  *
****************************************************************************

 - Input Handlers:
   * The QQuickEventPoint::GrabState enum is renamed to GrabTransition.
   * [QTBUG-68941] PinchHandler.scale is now persistent between gestures,
     i.e. it's the same as the target Item's scale property if there is a
     target.  Added an activeScale property to provide the scaling value
     during a single pinch gesture (activeScale will be 1.0 whenever the
     PinchHandler is not active, whereas the scale property was unintuitively
     behaving that way in previous versions).  This change is intended to
     increase flexibility when the scaling is not done by setting an Item's
     scale property, but by other means.
   * [QTBUG-68077] The pointDistanceThreshold property is renamed to
     margin, and now allows activating any pointer handler within a margin
     around the parent Item.  This makes it easier to pinch a PinchHandler
     on a small item, makes it easier to comply with Fitts's Law when
     a button with a TapHandler is near a screen edge, etc.  If margin
     is set, it overrides the parent Item's containmentMask, if any.
   * [QTBUG-68106] DragHandler is now a multi-point handler: if
     declared with minimumPointCount: 2 for example, it will require
     two fingers to initiate the drag.  This is especially useful with
     target: null to handle 2-finger-drag for some alternate purpose.
   * DragHandler and PinchHandler (and other future MultiPointHandler
     subclasses) now have a centroid property, since that is usually
     the focal point of the action or gesture being performed.
   * [QTBUG-68101] QQuickHandlerPoint (i.e. a handler's centroid or
     other exposed point property) includes a modifiers property so
     that you can see which keyboard modifiers are being held.
   * [QTBUG-61749][QTBUG-64847] The TapHandler.tapped signal includes an
     eventPoint parameter so that you can see which button was tapped.
   * [QTBUG-68074] The PointerHandler.grabChanged signal includes a
     stateChange parameter so that you can see whether the grab was
     acquired or lost.
   * [QTBUG-70075] PinchHandler.centroid now has correct property values
     on a macOS trackpad.
   * [QTBUG-70292] The PinchHandler.pinchOrigin property is removed.
   * [QTBUG-66360] PointHandler handles presses and releases of multiple
     mouse buttons correctly.
   * [QTBUG-69607] DragHandler doesn't react to mouse wheel events.
   * [QTBUG-65012] TapHandler doesn't emit longPressed if the point
     is dragged.

 - AnimatedSprite:
   * Added finished() signal to AnimatedSprite as a convenient way to react
     to an animation finishing.

 - Animation:
   * Added finished() signal to Animation as a convenient way to react to
     an animation finishing naturally.

 - Canvas:
   * [QTBUG-31807] Added set/get lineDash and lineDashOffset to Context2D
     to allow non solid lines to be drawn.

 - Image:
   * [QTBUG-66116] Fixed a memory leak in Image in an invisible window.

 - Item:
   * There's now a warning whenever an Item has multiple states with the
     same name.
   * [QTBUG-68271] Fixed an infinite loop in tab focus chain when visiting
     invisible items.

 - MultiPointTouchArea:
   * [QTBUG-70258] Avoid emitting gestureStarted until the drag threshold
     is actually exceeded.  In a QML onGestureStarted callback,
     gesture.touchPoints[0].startX and startY now have correct values.

 - Rectangle:
   * Added support for horizontal gradients.

 - Repeater:
   * [QTBUG-54752] If the model is an integer, it must be less than
     100,000,000 to avoid running out of memory.

 - Shape:
   * [QTBUG-66843][QTBUG-66457] The Shape item will not try to use
     GL_NV_path_rendering by default, unless explicitly requested.
     Thus the default value of enableVendorExtensions is now false.

 - Flickable and Item Views:
   * [QTBUG-62902] Added a synchronousDrag property that makes the content
     jump to the position it would have had if there was no drag threshold,
     as soon as dragging begins.
   * [QTBUG-70742][QTBUG-70941] We now cancel flicking when the model is
     reset, and when programmatically positioning the content, to avoid
     wasting time instantiating irrelevant delegates.
   * [QTBUG-49224] Fixed a crash by avoiding movement during layout.
   * [QTBUG-67051] Improved interaction between snapping and sections.
   * [QTBUG-69863] GridView LeftMargin and RightMargin are taken into
     account when calculating positions and columns.
   * [QTBUG-69059][QTBUG-61144] Fixed the regression that when a
     mouse-handling Item or Control is used in a Flickable with a
     pressDelay, the delegate item did not receive touchscreen taps
     (in the form of mouse clicks).  This fix was in 5.9.4 but somehow
     did not get merged forward into 5.10 and 5.11.
   * [QTBUG-59620] PathView calls setKeepMouseGrab() so that a parent
     Flickable will not steal the grab from it.

 - Text:
   * [QTBUG-53279] Fixed an issue where updating text inside a layout would
     not cause it to correctly adapt to its new width.
   * [QTBUG-69356] Support pregenerated loading distance field glyph caches
     to decrease startup time for applications with large amounts of text.

 - QQuickWindow:
   * [QTBUG-52748] You can now disable touch->mouse event synthesis in
     QtQuick by calling
     qGuiApp.setAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents,
     false). This will simplify and speed up event delivery, and it will
     also prevent any and all interaction with mouse-only items like
     MouseArea and Flickable on a touchscreen.
   * [QTBUG-70998] Touch->mouse synthesis is canceled when the touch
     is ungrabbed, rather than when a new touchpoint is pressed.  Thus
     if you are using one finger to interact with a legacy mouse-handling
     Item, and you press a second finger, the first interaction doesn't
     necessarily end right away, unless some other handler steals the
     grab from the first Item.
   * [QTBUG-70898] Emit a warning rather than crashing if user code
     calls sendEvent() while a pointer event is being delivered.
     Nested event delivery is not possible because of the way that
     the QQuickPointerEvent instances are reused for subsequent events.

 - FolderListModel:
   * [QTBUG-48757][QTBUG-70212] Added a sortCaseSensitive property that
     can be set to false to sort filenames in a case-insensitive manner.

 - Software renderer:
   * [QTBUG-70740] Fixed a memory leak.
   * Fixed QSGImageNode with QSGLayer.
   * [QTBUG-68085] Italic text is no longer cut improperly due to line wrap.
   * [QTBUG-70422] If Qt is built without support for threads, single-threaded
     rendering is used.  (This includes the WebAssembly use case.)

 - Platform Specific Changes:
   * [QTBUG-63026][QTBUG-65160] Now that macOS provides a proper
     ScrollMomentum phase in QWheelEvent, Flickable responds more
     precisely when simulated momentum on the trackpad comes to an
     end, rather than using a timer to wait for it to end.  This improves
     robustness in some cases where scrolling was jumpy in older versions.
