// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only

/*!
    \page whatsnew68.html
    \title What's New in Qt 6.8
    \ingroup whatsnewqt6
    \brief Lists the new features in Qt 6.8.

    \section1 New and Restored Modules in Qt 6.8
    Qt 6.8 adds the following modules and tools:

    \list
        \li The \l{svgtoqml} tool is now available out of tech preview. It can be used to generate
        QML code from SVG documents. It supports a static subset of the \c{SVG Tiny 1.2} profile.
    \endlist

    \section2 New and Restored Modules in Technical Preview

    \note API and ABI stability is not guaranteed for modules in
          technical preview.

    \section1 New Features in Qt 6.8

    \section2 Qt Core Module
    \list
        \li QChronoTimer is a replacement for QTimer using std::chrono durations throughout.
        \li QTimer::id() returns a Qt::TimerId, introduced and accepted in place of int timer
            IDs in new overloads of various methods that take one.
        \li More support for std::chrono durations to replace integral nanosecond
            parameters in QAbstractEventDispatcher.
        \li QString, QByteArray, and QList gain resizeForOverwrite().
        \li QString, QByteArray gain slice() equivalent to \c{*this = sliced()}.
        \li QString, QByteArray, QList, QVarLengthArray gain max_size() for stl compat.
        \li QList supports construction with uninitialized entries to a specified size,
            where the content-type permits.
        \li QVarLengthArray::PreallocatedSize tells you the Prealloc parameter.
        \li QLatin1StringMatcher::indexOf() can now take a QStringView.
        \li QCollatorSortKey now supports move-construction.
        \li QStringEncoder and QStringDecoder can now take the encoding name as a QString.
        \li QThread gains isMainThread(), isCurrentThread().
        \li QThreadPool::waitForDone() now accepts a QDeadlineTimer in place of int
            milliseconds.
        \li QDirListing provides stl-style iteration over directory entries.
        \li QVersionNumber can now be constructed from a QSpan; it can also be iterated.
        \li qHash() now accepts quint128 and qint128.
        \li QMap::qHash() tells you a key's hash value.
        \li QHash can now hash different types from its key, if they are marked as having
            the equivalent hash result for equivalent values (C++20 only). This works for
            QString/QStringView and QByteArray/QByteArrayView pairs. On all systems except
            on ARM processors, the QLatin1StringView also participates in the QString and
            QStringView hashing.
        \li QPointF, QLineF, QRectF, QMarginsF now support fuzzy comparison and null-checks.
        \li Define QT_ENABLE_STRICT_MODE_UP_TO opts out of various APIs, documented by
            which version it cuts them out at.
        \li Define QT_NO_QASCONST to disable qAsConst().
        \li Define QT_(NO_)USE_NODISCARD_FILE_OPEN to control [[nodiscard]] on open() methods
            of I/O classes.
    \endlist

    \section2 Qt Graphs Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt GRPC Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt GUI Module
    \list
        \li QStyleHints::colorScheme now has a setter function, allowing applications to try
            to override the system setting with an explicit Dark or Light scheme.
        \li Added QFont::ContextFontMerging, which can be used to enable a new font merging
        algorithm that takes the full string into account when selecting fallback fonts. This may
        come at some more cost, but in certain cases it will give better results.
        \li Added QFontDatabase::addApplicationFallbackFontFamily(), which provides a means to
        override the default system fallback fonts for specific scripts.
        \li Added QDesktopServices custom and \e https URL scheme support,
        for \macos, similar to what iOS has.
        \li QImage::Format_CMYK8888 a 32bit CMYK image format has been added.
        \li QColorSpace support for ICC A2B color spaces processing has been added. Along with
            explicit support for grayscale and CMYK color spaces.
        \li QColorSpace::transformModel() returns the underlying processing model.
        \li QColorSpace::colorModel() returns which color model the color space is made for.
        \li QImage::colorTransformed() and QImage::applyColorTransform() variants with three arguments,
            has been added to support converting both image format and color space at the same time.
    \endlist

    \section2 Qt Graphs Module
    \list
        \li Brought out of tech preview.
        \li Split into two submodules: QtGraphs and QtGraphsWidgets to remove
        the requirement for including widgets into pure QML applications.
    \endlist

    \section2 Qt Location Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt Multimedia Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt Network Module
    \list
        \li QNetworkAccessManager gained support for sending HTTP requests over local socket
            using the unix+http: or local+http: scheme.
        \li QDnsLookup gained support for TLS association records, returning the authentic data
            bit and DNS over TLS on some platforms, see QDnsLookup::isProtocolSupported().
    \endlist

    \section2 Qt OPC UA Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt Network Auth Module
    \list
        \li Added QOAuthUriSchemeReplyHandler class, which
        handles private/custom and https URI scheme redirects
        (on supported platforms).
        \li Added Proof of Key Code Exchange (PKCE) support to
        QOAuth2AuthorizationCodeFlow class. PKCE is a recommended
        security measure to mitigate authorization code interception
        attacks.
    \endlist

    \section2 Qt Positioning Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt Protobuf Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt QML Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt Quick Module
    \list
        \li Added font.contextFontMerging, which can be used to enable a new font merging algorithm
        that takes the full text into account when selecting fallback fonts. This may come at some
        more cost, but in certain cases it will give better results.
        \li Added the Image.retainWhileLoading property. When set to true on images that load
        asynchronously, the current image data will be retained until the new image is fully
        loaded. This can avoid flickering.
        \li Added ShapePath.fillItem to Qt Quick Shapes. This can be used to take any texture
        provider item (such as layered items and images) and use them as fill for the shape.
        \li Added ShapePath.fillTransform to Qt Quick Shapes, which can be used to set an arbitrary
        transform on the shape's fill, whether it is an item or a gradient.
        \li Added PlanarTransform, a utility object providing simple functions for specifying 2D
        transformation matrices.
        \li Introduced the VectorImage: A component which can be used to render vector graphics
        directly Qt Quick with hardware acceleration and no pre-rasterization. It currently
        supports the SVG format (a static subset of the \c{SVG Tiny 1.2} profile.)
    \endlist

    \section2 Qt Quick Controls Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt Quick Shapes Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt Quick Timeline Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt Quick 3D Module
    \list
        \li Technology Preview of XR support for Qt Quick 3D
            \list
                \li Support for Head Mounted Displays (HMD) using OpenXR such
                as the Meta Quest 2 and 3
                \li Support for Apple Vision Pro
                \li Multi-view rendering (render both eyes in a single pass)
                \li Spatial input support via hand tracking or controllers
                \li Support for spatial anchors
            \endlist
        \li Improved Shadow Rendering
            \list
                \li Overall quality improvements
                \li Enhanced shadow debug tooling
                \li Cascading Shadow Maps
                \li Percentage-closer filtering (PCF) soft shadows.
            \endlist
        \li PrincipledMaterial Enhancements
            \list
                \li Additional parameters for adjusting Fresnel
                \li Support for property masking based on the vertex color attribute
            \endlist
        \li CustomMaterial: expose remaining properties from PrincipledMaterial
    \endlist

    \section2 Qt Quick 3D Physics Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt Serial Bus Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt Sql Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt SVG Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt Test Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt TextToSpeech Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt WebEngine Module
    \list
        \li QWebEngineFrame added for frame specific API, such as running javascript on specific frames, or printing
            specific frames.
        \li QWebEngineClientHints added to better control the browser identification to web pages using client hints
            DOM api.
        \li QWebEngineCertificateError::isMainFrame() indicates the certificate error is from a main or sub frame.
        \li QWebEngineNavigationRequest::hasFormData() added to indicate a navigation request sending form data.
        \li QWebEnginePage::ClipboardReadWrite and QWebEnginePage::LocalFontsAccess features added.
        \li QWebEngineSettings::imageAnimationPolicy() added to control image animation policy.
    \endlist

    \section2 Qt WebView Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Qt Widgets Module
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section1 Tools

    \section2 Qt Widgets Designer
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section1 Platform Changes

    \section2 Desktop Platforms

    \section3 Windows
    \list
        \li Changed the font system to use DirectWrite as the default backend. This enables some
        modern features which were not available with the legacy GDI backend. The previous backend
        is still available and can be enabled by passing \c{fontengine=gdi} as parameter to the QPA
        plugin.
    \endlist

    \section3 \macos
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section3 X11
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section3 Wayland Client on Linux
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section3 WebAssembly
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Mobile Platforms

    \section3 Android
    \list
        \li Bumped the minimum supported version to Android 9.
        \li Added support for build.gradle namespace property.
        \li Added a CMake property \l QT_ANDROID_PACKAGE_NAME to set the package
            name.
        \li Updated Gradle to 8.7 and AGP to 8.4.0.
        \li Added support for
            \l {Building an AAR (Android Archive) File}{building AAR library packages}.
        \li Deprecated the native Android backend in Qt Multimedia.
        \li When opening libraries with QLibrary, JNI_OnLoad is no longer called
            by default.
        \li \l QtQuickView and QML Embedding:
            \list
                \li Added strong typing support for QtQuickView API.
                \li Added API to manage QML Components, under this Java classes under
                    QtQuickView were moved to own classes. This includes:
                    \list
                        \li QtQuickView.SignalListener to QtSignalListener
                        \li QtQuickView.StatusChangeListener to QtQmlStatusChangeListener
                        \li QtQuickView Status to QtQmlStatus
                    \endlist
                \li Added Java classes QtAbstractItemModel, QtAbstractListModel and
                    QtModelIndex that wraps QAbstractItemModel, QAbstractListModel,
                    and QModelIndex respectively.
                \li Added support for QML embedding from a Service.
            \endlist
    \endlist

    \section3 iOS
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section2 Embedded Platforms

    \section3 Boot to Qt
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section3 VxWorks
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section3 INTEGRITY
    \list
        \li Nothing to see here. //! TODO Clean this up before release.
    \endlist

    \section1 List of API Changes

    These pages contain an overview of API changes in Qt 6.8:
    \list
        \li \l {New Classes and Functions in Qt 6.8}
        \li \l {Obsolete Classes}
    \endlist
*/

/*!
    \page newclasses68.html
    \title New Classes and Functions in Qt 6.8
    \ingroup whatsnewqt6
    \brief A list of new APIs in Qt 6.8.

    This page contains a comprehensive list of all new classes and functions
    introduced in Qt 6.8.

    \sincelist 6.8
*/
