Qt 5.11 introduces many new features and improvements as well as bugfixes
over the 5.10.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.11 series is binary compatible with the 5.10.x series.
Applications compiled for 5.10 will continue to run with 5.11.

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                             *
****************************************************************************

* QML module plugins used to be limited to type registrations in the
  primary module namespace in the virtual registerTypes() function.
  Module authors worked around this limitation by placing necessary
  internal type registrations into initializeEngine() that may cause
  memory leaks. Therefore this restriction has been moved and types in
  any (non-protected) namespaces can be registered in the
  registerTypes() function.

* In Qt 5.11 and newer versions, QML plugin modules are available with
  the same minor version as the Qt release minor version number. For
  example it's possible to import QtQuick.Window 2.11 or import
  QtQuick.Layouts 1.11 even though there haven't been any API changes in
  these modules for Qt 5.11, and the maximum possible import version
  will automatically increment in future Qt versions. This is intended
  to reduce confusion.

****************************************************************************
*                          Library                                         *
****************************************************************************

QtQml
-----

 - Qt Qml uses a completely new compiler pipeline to compile Javascript (and QML) first
   into bytecode and then JIT heavily used functions into assembly.
  * Lots of cleanups and performance improvement to the way function calls and Javascript
    scopes are being handled.
  * Improved performance of JS property lookups.
  * A new bytecode format that is very compact, saving memory in many cases.
  * significantly faster bytecode interpreter than in earlier versions of Qt, in many cases
    reaching almost the performance of the old JIT.
  * A new JIT that works on top of the bytecode interpreter and only compiles hot functions
    into assembly.
  * Overall test results show almost a doubling of the JS performance on platforms where we
    can't use a JIT (iOS and WinRT) compared to 5.10.
  * With the new JIT, JS performance is usually around 10-40% faster than in older Qt versions
    (depending on the use case).

 - The commercial only Qt Quick Compiler has been removed and replaced with a common solution
   that works in both the open source and commercial version of Qt. No code changes are needed
   for users of the old compiler.

 - Fix qmlplugindump to work correctly with shadow builds.

 - Fixed creation of QWidgets in QML.

 - Various fixes to the debugging bridge.

 - ListModel
   * Support assignment of function declarations in ListElement, to allow for
     models with actions.

QtQuick
-------

 - QQuickWindow:
   * [QTBUG-66329] We no longer synthesize redundant mouse events based on
     touch events that come from a trackpad which can generate mouse events.

 - Item:
   * [QTBUG-20524] Added a containmentMask property.  This allows any
     QObject which defines Q_INVOKABLE bool contains(const QPointF &point)
     (including a Shape) to mask the area of an Item that will be
     sensitive to mouse and touch events.

 - AnimatedSprite:
   * [QTBUG-36341] AnimatedSprite's implicitWidth and implicitHeight are
     now based on frameWidth and frameHeight, respectively. This means it
     is no longer necessary to explicitly size AnimatedSprite.

 - Image:
   * [QTBUG-66127] Support detection of suitable file extension.
   * Add support for ktx files containing compressed textures.
   * Add experimental automatic atlasing of ETC-compressed
     textures (can be enabled with QSG_ENABLE_COMPRESSED_ATLAS=1).
   * [QTBUG-67019] SVG images are now scaled up if the source size is larger
     than the original size.
   * [QTBUG-65789] SVG images are rendered with the correct aspect ratio
     when width or height is set to zero.

 - AnimatedImage:
   * Added a speed property.  It's also OK to set it to 0 to pause
     the animation.
   * There is now an example to demonstrate usage of AnimatedImage.
   * [QTBUG-62913] frameCount now has a NOTIFY signal to avoid binding warnings.

 - Path:
   * [QTBUG-62684] Add new PathAngleArc type.

 - Shape:
   * A containsMode property is added. If it is set to FillContains, then
     Shape.contains() returns true only within the visible bounds, so its
     Pointer Handlers also respond only within those bounds.

 - ShapePath:
   * Improved performance for complex paths.

 - Text:
   * [QTBUG-60328][QTBUG-67145] Fixed Text with ElideRight not being rendered
     when reparented.
   * [QTBUG-67007] Fixed non-integer scale factors with Text native rendering.

 - Pointer Handlers:
   * Added singleTapped and doubleTapped convenience signals to TapHandler.
   * PointerHandlers implement QQmlParserStatus, so that subclasses can
     have custom initialization in componentComplete() (just as Items can).
   * [QTBUG-65651] Restore 5.9 behavior: if an Item has no PointerHandlers,
     childMouseEventFilter() will not be called during post-delivery of
     an unhandled event.
   * TapHandler.gesturePolicy is now DragThreshold by default.
   * DragHandler with target: null no longer crashes.
   * [QTBUG-64852] DragHandler enforces its axis constraints even when
     the parent coordinate system changes during the drag.  For example
     the knob of a DragHandler-based slider inside a Flickable doesn't
     come out of its "groove" if you manage to drag the slider and the
     Flickable at the same time.

  - Loader:
    * [QTBUG-63729] Avoid evaluating bindings during destruction, to
      avoid some spurious errors.
    * [QTBUG-66822] When deactivating a loader, do not immediately clear
      its context.

 - Software renderer
    * [QTBUG-63185][QTBUG-65975] QSGLayer::grab now works correctly.
    * [QTBUG-66381] Fixed a crash when a Window has a QObject parent
      (such as Loader).
    * [QTBUG-65934] Fixed renering of rounded rectangles with floating point
      pixel device ratios.

  - Platform Specific Changes:
    * [QTBUG-67460] Fixed a problem with jumping back to the highlight
      while slowly scrolling a ListView on macOS.

QtQuickTest
-----------

 - [QTBUG-50064] Added QUICK_TEST_MAIN_WITH_SETUP macro to allow executing
   C++ before a QML test (such as registering context properties).

QQuickWidget
------------

 - [QTBUG-45641] Tab presses are now passed on to the root item to be
   handled first. When not handled by the root item, it will be handled
   like a standard QWidget.
