// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
    \title Qt Quick Examples - Window and Screen
    \example window
    \brief This example demonstrates the Window and Screen types in QML.
    \image qml-window-example.png
    \ingroup qtquickexamples
    \examplecategory {Graphics & Multimedia}

    \e{Window and Screen} shows how to:

    \list
    \li create a window in QML
    \li control its \l {QQuickWindow::visibility} {visibility}
    \li present a splash screen during application startup
    \li access the properties of the \l Screen
    \endlist

    It also demonstrates how to package QML into \l {The Qt Resource System}
    {resources} and provide an \l {Setting the Application Icon} {icon} to
    create a standalone QML desktop application.

    \include examples-run.qdocinc

    \section1 Window Implementation

    A splash screen can be created with the \l {Qt::SplashScreen}
    {Qt.SplashScreen} flag, and should be \l {Qt::ApplicationModal}
    {ApplicationModal} to prevent interaction with the main window. If the
    splash window is also transparent, and showing a partially transparent
    image, then it will look like a shaped window.

    \snippet window/Splash.qml splash-properties

    In this example a \l Timer will automatically dismiss the splash screen,
    but in a real application you might want to connect to a signal from the
    application logic to hide the splash when initialization is complete.

    \snippet window/Splash.qml timer

    The main window in this example is the control window, with some buttons
    and checkboxes to control and provide feedback on the state of a secondary
    window. Each checkbox has a binding to the property whose state it is
    displaying, and also an onClicked handler to change the state. This is the
    typical pattern to create a two-way binding while avoiding binding loops.

    \snippet window/window.qml windowedCheckbox

    \l Screen has several properties which are generally useful to
    applications which need to rotate some content when the screen orientation
    changes, to position windows on the screen or to convert real units to
    logical pixel units.  CurrentScreen.qml (which is displayed inline in
    window.qml, or can be run by itself with the
    \l {Prototyping with the QML Runtime Tool}{qml tool}) simply displays the
    property values, while the splash screen uses them to center the window on
    the screen.

    \snippet window/Splash.qml screen-properties

    If a \l Window is nested inside an \l Item or another Window, the inner
    window becomes \e{transient for} the outer one (see \l Window for more
    explanation). But if you want to create multiple top-level windows as
    unrelated peers, you can create them inside a non-visual \l QtObject root
    item, as this example does.
*/
