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

/*!
    \example painting/imagecomposition
    \title Image Composition Example
    \ingroup examples-painting
    \ingroup examples-layout
    \brief Shows how composition modes work in QPainter.

    \brief The Image Composition example lets the user combine images
    together using any composition mode supported by QPainter, described
    in detail in \l{QPainter#Composition Modes}{Composition Modes}.

    \image imagecomposition-example.png

    \section1 Setting Up The Resource File

    The Image Composition example requires two source images,
    \e butterfly.png and \e checker.png that are embedded within
    \e imagecomposition.qrc. The file contains the following code:

    \quotefile painting/imagecomposition/imagecomposition.qrc

    For more information on resource files, see \l{The Qt Resource System}.

    \section1 ImageComposer Class Definition

    The \c ImageComposer class is a subclass of QWidget that implements three
    private slots, \c chooseSource(), \c chooseDestination(), and
    \c recalculateResult().

    \snippet painting/imagecomposition/imagecomposer.h 0

    In addition, \c ImageComposer consists of five private functions,
    \c addOp(), \c chooseImage(), \c loadImage(), \c currentMode(), and
    \c imagePos(), as well as private instances of QToolButton, QComboBox,
    QLabel, and QImage.

    \snippet painting/imagecomposition/imagecomposer.h 1

    \section1 ImageComposer Class Implementation

    We declare a QSize object, \c resultSize, as a static constant with width
    and height equal to 200.

    \snippet painting/imagecomposition/imagecomposer.cpp 0

    Within the constructor, we instantiate a QToolButton object,
    \c sourceButton and set its \l{QAbstractButton::setIconSize()}{iconSize}
    property to \c resultSize. The \c operatorComboBox is instantiated and
    then populated using the \c addOp() function. This function accepts a
    QPainter::CompositionMode, \a mode, and a QString, \a name, representing
    the name of the composition mode.

    \snippet painting/imagecomposition/imagecomposer.cpp 1

    The \c destinationButton is instantiated and its
    \l{QAbstractButton::setIconSize()}{iconSize} property is set to
    \c resultSize as well. The \l{QLabel}s \c equalLabel and \c resultLabel
    are created and \c{resultLabel}'s \l{QWidget::setMinimumWidth()}
    {minimumWidth} is set.

    \snippet painting/imagecomposition/imagecomposer.cpp 2

    We connect the following signals to their corresponding slots:
    \list
        \li \c{sourceButton}'s \l{QPushButton::clicked()}{clicked()} signal is
            connected to \c chooseSource(),
        \li \c{operatorComboBox}'s \l{QComboBox::activated()}{activated()}
            signal is connected to \c recalculateResult(), and
        \li \c{destinationButton}'s \l{QToolButton::clicked()}{clicked()} signal
            is connected to \c chooseDestination().
    \endlist

    \snippet painting/imagecomposition/imagecomposer.cpp 3

    A QGridLayout, \c mainLayout, is used to place all the widgets. Note
    that \c{mainLayout}'s \l{QLayout::setSizeConstraint()}{sizeConstraint}
    property is set to QLayout::SetFixedSize, which means that
    \c{ImageComposer}'s size cannot be resized at all.

    \snippet painting/imagecomposition/imagecomposer.cpp 4

    We create a QImage, \c resultImage, and we invoke \c loadImage() twice
    to load both the image files in our \e imagecomposition.qrc file. Then,
    we set the \l{QWidget::setWindowTitle()}{windowTitle} property to
    "Image Composition".

    \snippet painting/imagecomposition/imagecomposer.cpp 5

    The \c chooseSource() and \c chooseDestination() functions are
    convenience functions that invoke \c chooseImage() with specific
    parameters.

    \snippet painting/imagecomposition/imagecomposer.cpp 6
    \codeline
    \snippet painting/imagecomposition/imagecomposer.cpp 7

    The \c chooseImage() function loads an image of the user's choice,
    depending on the \a title, \a image, and \a button.

    \snippet painting/imagecomposition/imagecomposer.cpp 10

    The \c recalculateResult() function is used to calculate amd display the
    result of combining the two images together with the user's choice of
    composition mode.

    \snippet painting/imagecomposition/imagecomposer.cpp 8

    The \c addOp() function adds an item to the \c operatorComboBox using
    \l{QComboBox}'s \l{QComboBox::addItem()}{addItem} function. This function
    accepts a QPainter::CompositionMode, \a mode, and a QString, \a name. The
    rectangle is filled with Qt::Transparent and both the \c sourceImage and
    \c destinationImage are painted, before displaying it on \c resultLabel.

    \snippet painting/imagecomposition/imagecomposer.cpp 9

    The \c loadImage() function paints a transparent background using
    \l{QPainter::fillRect()}{fillRect()} and draws \c image in a
    centralized position using \l{QPainter::drawImage()}{drawImage()}.
    This \c image is then set as the \c{button}'s icon.

    \snippet painting/imagecomposition/imagecomposer.cpp 11

    The \c currentMode() function returns the composition mode currently
    selected in \c operatorComboBox.

    \snippet painting/imagecomposition/imagecomposer.cpp 12

    We use the \c imagePos() function to ensure that images loaded onto the
    QToolButton objects, \c sourceButton and \c destinationButton, are
    centralized.

    \snippet painting/imagecomposition/imagecomposer.cpp 13

    \section1 The \c main() Function

    The \c main() function instantiates QApplication and \c ImageComposer
    and invokes its \l{QWidget::show()}{show()} function.

    \snippet painting/imagecomposition/main.cpp 0

    */
