/****************************************************************************
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** GNU Free Documentation License
** 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.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms
** and conditions contained in a signed written agreement between you
** and Nokia.
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \class QColormap
    \ingroup painting

    \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()
*/

/*! \fn HPALETTE QColormap::hPal()

    This function is only available on Windows.

    Returns an handle to the HPALETTE used by this colormap.  If no
    HPALETTE is being used, this function returns zero.
*/

/*! \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
*/
