/****************************************************************************
**
** Copyright (C) 2017 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 qtwaylandcompositor-index.html
  \title Qt Wayland Compositor
  \brief An API to develop display servers supporting the Wayland protocol

  \l {https://wayland.freedesktop.org/} {Wayland} is a display server
  protocol to help in creating multi-process systems, where multiple client
  applications may render content on the same display, by going via
  a compositor process.

  Compared to a system with a single-process design, a multi-process system
  gives several benefits:

  \list
  \li Easier resource management, through the regular operating system mechanisms.
  \li Better security, as each application can run with its own permissions or
      sandbox.
  \li Clearer separation of application UI and compositor UI, so each
      can be modified independently.
  \endlist

  In a typical Wayland-based system, multiple client processes will render their
  own contents to off-screen buffers. The information about these buffers will
  then be passed to a display server process by using the Wayland protocol.
  Finally, the display server process will composite and position the contents
  on a physical display.

  Qt Wayland Compositor is a module that provides convenient and powerful
  QML and C++ APIs for developing custom display servers based on this protocol.
  The server displays content from client applications that support the Wayland
  protocol. The design philosophy of Wayland is to keep the core protocol simple
  and minimal, and to expand on this with use-case-specific extensions. Qt Wayland
  Compositor supports many common extensions by default, and also has APIs that
  enables the creation of new, custom extensions.

  In one typical use case, a display server written with Qt Wayland Compositor will
  be a subsystem inside a larger application manager process. Qt Wayland Compositor
  provides the APIs to communicate with clients and display their contents on screen,
  using C++ for low-level access and the full set of Qt Quick effects, animations and
  convenience when using the QML APIs. A typical application manager would, in addition
  to this, implement features such as application life cycle, virtual keyboard input,
  security and IPC. Qt provides APIs that can be used to develop the remaining parts
  of an application manager in other modules. The \l {https://www.qt.io/qt-automotive-suite/}
  {Qt Automotive Suite} provides a complete application manager which includes a
  display server developed using Qt Wayland Compositor.

  \section1 Features of Qt Wayland Compositor

  The Qt Wayland Compositor API includes features needed to create a display server.

  \list
  \li A QML API that can be used to display and manipulate client content, fully
      integrated with all the features in Qt Quick.
  \li A C++ API for low-level access and control.
  \li Support for common extensions, including XDG Shell and IVI Application.
  \li APIs to easily expand support to include custom extensions.
  \endlist

  \section1 Environment Variables and Command-line Arguments

  The Qt Wayland Compositor API recognizes some environment variables and
  command-line arguments that can be used to customize its behavior.

  \list
  \li Environment variables:
      \list
      \li \b QT_WAYLAND_HARDWARE_INTEGRATION Selects the hardware integration
          plugin to use.
      \li \b QT_WAYLAND_CLIENT_BUFFER_INTEGRATION Selects the client buffer
          integration plugin to use.
      \li \b QT_WAYLAND_SERVER_BUFFER_INTEGRATION Selects the server
          integration plugin to use.
      \endlist
  \li Command-line arguments:
      \list
      \li \c{--wayland-socket-name} Overrides the default socket name used for
          communicating with clients.
      \endlist
  \endlist

  \section1 Examples

  Take a look at the \l{Qt Wayland Compositor Examples} for a demonstration on
  how the APIs can be used to write custom display servers.

  \section1 Licenses and Attributions

  Qt Wayland Compositor and the Qt Wayland integration plugin
  are available under commercial licenses from \l{The Qt Company}.
  In addition, they are available under the
  \l{GNU Lesser General Public License, version 3}, or
  the \l{GNU General Public License, version 2}.
  See \l{Qt Licensing} for further details.

  Qt Wayland Compositor and the Qt Wayland integration plugin
  use protocol definitions under following permissive licenses:

  \generatelist{groupsbymodule attributions-qtwaylandcompositor}

  \section1 API Reference

  The Qt Wayland Compositor API can be used from C++ or QML.

  \list
  \li \l{Qt Wayland Compositor QML Types}
  \li \l{Qt Wayland Compositor C++ Classes}
  \endlist

*/
