/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \page whatsnew58.html
    \title What's New in Qt 5.8
    \brief Lists the new features in Qt 5.8.

    \section1 New Features in Qt 5.8

    \section2 Qt Core Module
    \list
        \li Added at(), operator[], mid(), right(), and left() functions to
            QLatin1String.
    \endlist

    \section2 Qt GUI Module
    \list
        \li Added \l {QTouchEvent::TouchPoint::}{uniqueId()} and
            \l {QTouchEvent::TouchPoint::}{rotation()} to QTouchEvent.
        \li Added support for dithering when converting to all QImage formats.
        \li Made the QOpenGLTextureBlitter API public; used particularly in Qt
            Wayland.
        \li Added \l {QFontMetrics::}{capHeight()} to QFontMetrics,
            QFontMetricsF, and QRawFont.
        \li Added selection handles on Android, with an edit menu for copy and
            paste.
    \endlist

    \section2 Qt Quick Module
    \list
        \li Refactored the Qt Quick scene graph to remove its OpenGL
            dependency, enabling backends based on other graphics APIs such as
            Vulkan or Direct3D.
        \li Integrated the software renderer (previously known as the Qt Quick
            2D Renderer) for Qt Quick as a proper scene graph backend.
        \li Implemented support for partial updates in the software renderer.
        \li Added an experimental Direct3D 12 backend.
        \li Implemented caching of code and data structures generated from
            \c .qml and \c .js files to disk, reducing start-up time and memory
            consumption. The resulting \c .qmlc and \c .jsc cache files are
            memory mapped.
        \li Cleaned up touch and mouse event delivery, and added a new internal
            class \c QQuickPointerEvent for this purpose.
    \endlist

    \section2 Qt Quick Controls 2 Module
    \list
        \li Added new QML types: \l [QtQuickControls2] {Dialog},
            \l [QtQuickControls2] {DialogButtonBox},
            \l [QtQuickControls2] {MenuSeparator},
            \l [QtQuickControls2] {RoundButton}, and
            \l [QtQuickControls2] {ToolSeparator}.
        \li Added ripple effects to the Material style.
        \li Added hover effects to Material and Universal styles
        \li Added a \e System theme to Material and Universal styles
        \li Added new experimental \e platform QML types:
            \c MenuBar, \c Menu, \c SystemTrayIcon,
            \c ColorDialog, \c FontDialog, \c MessageDialog,
            \c FileDialog, and \c FolderDialog.
    \endlist

    \section2 Qt WebEngine Module
    \list
        \li Based on Chromium 53.
        \li Updated requirements to MSVC 2015 Update 2 or later on Windows.
        \li Added \l {Qt WebEngine Features#View Source}{view-source} scheme
            support.
        \li Added support for spellchecking with custom .bdic files.
        \li Made tooltips (HTML5 global tile attribute) visible.
        \li Added support for metadata (\c @include, \c @exclude, \c @match,
            \c @name, and \c @run-at) in user scripts.
        \li QML: Enabled the use of custom dialogs and context menus.
        \li QML: on eglfs, took the built-in dialogs based on Qt Quick Controls
            2 into use.
        \li Added support for printing.
        \li Added a setting to enable printing of CSS backgrounds.
    \endlist

    \section2 Qt Bluetooth Module
    \list
        \li Added Bluetooth Low Energy Peripheral support on macOS, iOS, and
            WinRT.
    \endlist

    \section2 Qt Multimedia Module
    \list
        \li Added QAudio::convertVolume() and a matching QML method to convert
            audio volumes from one scale to another; for example, from
            logarithmic to linear scale.
        \li Added support for rendering YUV 4:2:2 (YUYV, UYVY) video frames to
            VideoOutput QML type.
    \endlist

    \section2 Qt Network Module
    \list
        \li Added support for TLS-PSK ciphersuites on server side.
        \li Added support for configurable Diffie-Hellman parameters.
        \li Added support for HTTP/2 in Network Access Manager.
    \endlist

    \section2 Qt WebSockets Module
    \list
        \li Added support for TLS-PSK ciphersuites on client and server side.
    \endlist

    \section2 Qt Charts Module
    \list
        \li Added a candlestick chart type.
    \endlist

    \section2 Qt 3D Module
    \list
        \li Focused on maturation: Bug fixes, improving performance and test
            coverage.
        \li Added a \e {paint to texture} feature using QPainter.
        \li Added optional support for issuing commands to Qt3D aspects (for
            example, from a profiler).
    \endlist

    \section2 Embedded Platforms
    \list
        \li Enhanced multi-screen capabilities and configurability with eglfs
            when running on KMS/DRM, both with GBM and EGLDevice/Stream.
        \li Added support for 90 and 180 degrees rotation of software-rendered
            content (QWidget) in eglfs.
    \endlist

    \section2 Configurability (Qt Lite Project)
    \list
        \li Qt 5.8 comes with a rewritten configuration system that allows for
            easy customization of Qt builds. The main focus of this feature is
            for the Device Creation, but it can also be used to tailor a Qt
            build for mobile or desktop platforms. The new configuration system
            allows removing individual pieces of functionality and APIs from
            Qt, creating a more lightweight set of libraries for deployment.
    \endlist

    \section1 New Modules
    \list
        \li \l {Qt Wayland Compositor}
        \list \li Provides a framework to develop a Wayland compositor.
        \endlist
        \li \l {Qt SCXML}
        \list \li Enables static and runtime integration of SCXML models into
                  Qt code.
        \endlist
        \li \l {Qt Serial Bus}
        \list \li Provides access to various industrial serial buses and
                  protocols, such as CAN and ModBus.
        \endlist
    \endlist

    These modules were previously released as technology previews, and are
    now fully supported Qt add-on modules.

    \section1 Technology Preview Modules
    \list
        \li \l {Qt Gamepad}
        \list \li Enables Qt gaming applications to respond to gamepad input.
        \endlist
        \li \l {Qt Speech}
        \list \li Text to speech and speech recognition functionality.
                  Currently only the text to speech features are released.
                  Includes backends for several speech synthesizers on
                  Windows, Linux, macOS, and Android.
        \endlist
        \li \l {Qt Network Authorization}
        \list \li Online authorization support with OAuth protocol,
                  versions 1 and 2.
        \endlist
    \endlist

    \section1 Deprecated Functionality
    \list
        \li Qt Script
    \endlist

    Deprecated modules are still included in Qt 5.8, but are considered for removal
    in future releases.

    \section1 Removed Functionality
    \list
        \li Qt Quick 2D Renderer (functionality has been merged into Qt Quick).
    \endlist

    \section1 List of API Changes

    The pages below contain a list of API changes in Qt 5.8:
    \list
    \li \l{New Classes and Functions in Qt 5.8}
    \li \l{Obsolete Classes}
    \endlist

    \section1 Additions to Other Qt 5 Releases

    \list
        \li \l{What's New in Qt 5.7}
        \li \l{What's New in Qt 5.6}
        \li \l{What's New in Qt 5.5}
        \li \l{What's New in Qt 5.4}
        \li \l{What's New in Qt 5.3}
        \li \l{What's New in Qt 5.2}
        \li \l{What's New in Qt 5.1}
        \li \l{What's New in Qt 5.0}
    \endlist

*/

/*!
    \page newclasses58.html
    \title New Classes and Functions in Qt 5.8
    \brief A list of new APIs in Qt 5.8.

    This page contains a comprehensive list of all new classes and functions
    introduced in Qt 5.8. Links to new APIs in previous Qt 5 releases are found
    at the bottom of this page.

    \sincelist 5.8

    \section1 Additions to Other Qt 5 Releases

    \list
        \li \l{What's New in Qt 5.7}
        \li \l{What's New in Qt 5.6}
        \li \l{What's New in Qt 5.5}
        \li \l{What's New in Qt 5.4}
        \li \l{What's New in Qt 5.3}
        \li \l{What's New in Qt 5.2}
        \li \l{What's New in Qt 5.1}
        \li \l{What's New in Qt 5.0}
    \endlist
*/

