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

/*!
    \class QColormap
    \ingroup painting
    \inmodule QtWidgets

    \brief The QColormap class maps device independent QColors to device
    dependent pixel values.
*/

/*! \enum QColormap::Mode

    This enum describes how QColormap maps device independent RGB
    values to device dependent pixel values.

    \value Direct Pixel values are derived directly from the RGB
    values, also known as "True Color."

    \value Indexed Pixel values represent indexes into a vector of
    available colors, i.e. QColormap uses the index of the color that
    most closely matches an RGB value.

    \value Gray Similar to \c Indexed, pixel values represent a vector
    of available gray tones.  QColormap uses the index of the gray
    tone that most closely matches the computed gray tone of an RGB
    value.
*/

/*!
    \fn QColormap QColormap::instance(int screen)

    Returns the colormap for the specified \a screen.  If \a screen is
    -1, this function returns the colormap for the default screen.
*/

/*!
    \fn QColormap::QColormap(const QColormap &colormap)

    Constructs a copy of another \a colormap.
*/

/*!
    \fn QColormap::~QColormap()

    Destroys the colormap.
*/

/*!
    \fn int QColormap::size() const

    Returns the size of the colormap for \c Indexed and \c Gray modes;
    Returns -1 for \c Direct mode.

    \sa colormap()
*/

/*!
    \fn uint QColormap::pixel(const QColor &color) const

    Returns a device dependent pixel value for the \a color.

    \sa colorAt()
*/

/*!
    \fn int QColormap::depth() const

    Returns the depth of the device.

    \sa size()
*/

/*!
    \fn QColormap::Mode QColormap::mode() const

    Returns the mode of this colormap.

    \sa QColormap::Mode
*/

/*!
    \fn const QColor QColormap::colorAt(uint pixel) const

    Returns a QColor for the \a pixel.

    \sa pixel()
*/

/*!
    \fn const QVector<QColor> QColormap::colormap() const

    Returns a vector of colors which represents the devices colormap
    for \c Indexed and \c Gray modes.  This function returns an empty
    vector for \c Direct mode.

    \sa size()
*/

/*! \since 4.2

    \fn QColormap &QColormap::operator=(const QColormap &colormap)

    Assigns the given \a colormap to \e this color map and returns
    a reference to \e this color map.
*/

/*!
   \fn void QColormap::initialize()
   \internal
*/

/*!
   \fn void QColormap::cleanup()
   \internal
*/
