Removed src/gui/opengl/qopenglcolormap.*
The QGLColormap API was used by QGLWidget, not very relevant in the Qt 5 core API. Change-Id: I3c75ac09cbc292e707aea62759c09277f834de8d Reviewed-on: http://codereview.qt-project.org/6333 Sanity-Review: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
This commit is contained in:
parent
d45502c2aa
commit
ac03f59ccc
@ -24,7 +24,6 @@ HEADERS += opengl/qopengl.h \
|
|||||||
opengl/qopengltextureglyphcache_p.h \
|
opengl/qopengltextureglyphcache_p.h \
|
||||||
opengl/qopenglshadercache_p.h \
|
opengl/qopenglshadercache_p.h \
|
||||||
opengl/qopenglshadercache_meego_p.h \
|
opengl/qopenglshadercache_meego_p.h \
|
||||||
opengl/qopenglcolormap.h \
|
|
||||||
opengl/qtriangulator_p.h \
|
opengl/qtriangulator_p.h \
|
||||||
opengl/qrbtree_p.h
|
opengl/qrbtree_p.h
|
||||||
|
|
||||||
@ -42,7 +41,6 @@ SOURCES += opengl/qopengl.cpp \
|
|||||||
opengl/qopenglcustomshaderstage.cpp \
|
opengl/qopenglcustomshaderstage.cpp \
|
||||||
opengl/qopengltriangulatingstroker.cpp \
|
opengl/qopengltriangulatingstroker.cpp \
|
||||||
opengl/qopengltextureglyphcache.cpp \
|
opengl/qopengltextureglyphcache.cpp \
|
||||||
opengl/qopenglcolormap.cpp \
|
|
||||||
opengl/qtriangulator.cpp
|
opengl/qtriangulator.cpp
|
||||||
|
|
||||||
#INCLUDEPATH += ../3rdparty/harfbuzz/src
|
#INCLUDEPATH += ../3rdparty/harfbuzz/src
|
||||||
|
@ -1,297 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 QtGui module of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:LGPL$
|
|
||||||
** GNU Lesser General Public License Usage
|
|
||||||
** This file may be used under the terms of the GNU Lesser General Public
|
|
||||||
** License version 2.1 as published by the Free Software Foundation and
|
|
||||||
** appearing in the file LICENSE.LGPL included in the packaging of this
|
|
||||||
** file. Please review the following information to ensure the GNU Lesser
|
|
||||||
** General Public License version 2.1 requirements will be met:
|
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
|
||||||
** In addition, as a special exception, Nokia gives you certain additional
|
|
||||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
||||||
**
|
|
||||||
** GNU General Public License Usage
|
|
||||||
** Alternatively, this file may be used under the terms of the GNU General
|
|
||||||
** Public License version 3.0 as published by the Free Software Foundation
|
|
||||||
** and appearing in the file LICENSE.GPL included in the packaging of this
|
|
||||||
** file. Please review the following information to ensure the GNU General
|
|
||||||
** Public License version 3.0 requirements will be met:
|
|
||||||
** http://www.gnu.org/copyleft/gpl.html.
|
|
||||||
**
|
|
||||||
** 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 QOpenGLColormap
|
|
||||||
\brief The QOpenGLColormap class is used for installing custom colormaps into
|
|
||||||
a QOpenGLWidget.
|
|
||||||
|
|
||||||
\module OpenGL
|
|
||||||
\ingroup painting-3D
|
|
||||||
\ingroup shared
|
|
||||||
|
|
||||||
QOpenGLColormap provides a platform independent way of specifying and
|
|
||||||
installing indexed colormaps for a QOpenGLWidget. QOpenGLColormap is
|
|
||||||
especially useful when using the OpenGL color-index mode.
|
|
||||||
|
|
||||||
Under X11 you must use an X server that supports either a \c
|
|
||||||
PseudoColor or \c DirectColor visual class. If your X server
|
|
||||||
currently only provides a \c GrayScale, \c TrueColor, \c
|
|
||||||
StaticColor or \c StaticGray visual, you will not be able to
|
|
||||||
allocate colorcells for writing. If this is the case, try setting
|
|
||||||
your X server to 8 bit mode. It should then provide you with at
|
|
||||||
least a \c PseudoColor visual. Note that you may experience
|
|
||||||
colormap flashing if your X server is running in 8 bit mode.
|
|
||||||
|
|
||||||
The size() of the colormap is always set to 256
|
|
||||||
colors. Note that under Windows you can also install colormaps
|
|
||||||
in child widgets.
|
|
||||||
|
|
||||||
This class uses \l{implicit sharing} as a memory and speed
|
|
||||||
optimization.
|
|
||||||
|
|
||||||
Example of use:
|
|
||||||
\snippet doc/src/snippets/code/src_opengl_qopenglcolormap.cpp 0
|
|
||||||
|
|
||||||
\sa QOpenGLWidget::setColormap(), QOpenGLWidget::colormap()
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\fn Qt::HANDLE QOpenGLColormap::handle()
|
|
||||||
|
|
||||||
\internal
|
|
||||||
|
|
||||||
Returns the handle for this color map.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\fn void QOpenGLColormap::setHandle(Qt::HANDLE handle)
|
|
||||||
|
|
||||||
\internal
|
|
||||||
|
|
||||||
Sets the handle for this color map to \a handle.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "qopenglcolormap.h"
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
|
|
||||||
QOpenGLColormap::QOpenGLColormapData QOpenGLColormap::shared_null = { Q_BASIC_ATOMIC_INITIALIZER(1), 0, 0 };
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Construct a QOpenGLColormap.
|
|
||||||
*/
|
|
||||||
QOpenGLColormap::QOpenGLColormap()
|
|
||||||
: d(&shared_null)
|
|
||||||
{
|
|
||||||
d->ref.ref();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Construct a shallow copy of \a map.
|
|
||||||
*/
|
|
||||||
QOpenGLColormap::QOpenGLColormap(const QOpenGLColormap &map)
|
|
||||||
: d(map.d)
|
|
||||||
{
|
|
||||||
d->ref.ref();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Dereferences the QOpenGLColormap and deletes it if this was the last
|
|
||||||
reference to it.
|
|
||||||
*/
|
|
||||||
QOpenGLColormap::~QOpenGLColormap()
|
|
||||||
{
|
|
||||||
if (!d->ref.deref())
|
|
||||||
cleanup(d);
|
|
||||||
}
|
|
||||||
|
|
||||||
void QOpenGLColormap::cleanup(QOpenGLColormap::QOpenGLColormapData *x)
|
|
||||||
{
|
|
||||||
delete x->cells;
|
|
||||||
x->cells = 0;
|
|
||||||
delete x;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Assign a shallow copy of \a map to this QOpenGLColormap.
|
|
||||||
*/
|
|
||||||
QOpenGLColormap & QOpenGLColormap::operator=(const QOpenGLColormap &map)
|
|
||||||
{
|
|
||||||
map.d->ref.ref();
|
|
||||||
if (!d->ref.deref())
|
|
||||||
cleanup(d);
|
|
||||||
d = map.d;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\fn void QOpenGLColormap::detach()
|
|
||||||
\internal
|
|
||||||
|
|
||||||
Detaches this QOpenGLColormap from the shared block.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void QOpenGLColormap::detach_helper()
|
|
||||||
{
|
|
||||||
QOpenGLColormapData *x = new QOpenGLColormapData;
|
|
||||||
x->ref = 1;
|
|
||||||
x->cmapHandle = 0;
|
|
||||||
x->cells = 0;
|
|
||||||
if (d->cells) {
|
|
||||||
x->cells = new QVector<QRgb>(256);
|
|
||||||
*x->cells = *d->cells;
|
|
||||||
}
|
|
||||||
if (!d->ref.deref())
|
|
||||||
cleanup(d);
|
|
||||||
d = x;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Set cell at index \a idx in the colormap to color \a color.
|
|
||||||
*/
|
|
||||||
void QOpenGLColormap::setEntry(int idx, QRgb color)
|
|
||||||
{
|
|
||||||
detach();
|
|
||||||
if (!d->cells)
|
|
||||||
d->cells = new QVector<QRgb>(256);
|
|
||||||
d->cells->replace(idx, color);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Set an array of cells in this colormap. \a count is the number of
|
|
||||||
colors that should be set, \a colors is the array of colors, and
|
|
||||||
\a base is the starting index. The first element in \a colors
|
|
||||||
is set at \a base in the colormap.
|
|
||||||
*/
|
|
||||||
void QOpenGLColormap::setEntries(int count, const QRgb *colors, int base)
|
|
||||||
{
|
|
||||||
detach();
|
|
||||||
if (!d->cells)
|
|
||||||
d->cells = new QVector<QRgb>(256);
|
|
||||||
|
|
||||||
Q_ASSERT_X(colors && base >= 0 && (base + count) <= d->cells->size(), "QOpenGLColormap::setEntries",
|
|
||||||
"preconditions not met");
|
|
||||||
for (int i = 0; i < count; ++i)
|
|
||||||
setEntry(base + i, colors[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Returns the QRgb value in the colorcell with index \a idx.
|
|
||||||
*/
|
|
||||||
QRgb QOpenGLColormap::entryRgb(int idx) const
|
|
||||||
{
|
|
||||||
if (d == &shared_null || !d->cells)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return d->cells->at(idx);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\overload
|
|
||||||
|
|
||||||
Set the cell with index \a idx in the colormap to color \a color.
|
|
||||||
*/
|
|
||||||
void QOpenGLColormap::setEntry(int idx, const QColor &color)
|
|
||||||
{
|
|
||||||
setEntry(idx, color.rgb());
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Returns the QRgb value in the colorcell with index \a idx.
|
|
||||||
*/
|
|
||||||
QColor QOpenGLColormap::entryColor(int idx) const
|
|
||||||
{
|
|
||||||
if (d == &shared_null || !d->cells)
|
|
||||||
return QColor();
|
|
||||||
else
|
|
||||||
return QColor(d->cells->at(idx));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Returns true if the colormap is empty or it is not in use
|
|
||||||
by a QOpenGLWidget; otherwise returns false.
|
|
||||||
|
|
||||||
A colormap with no color values set is considered to be empty.
|
|
||||||
For historical reasons, a colormap that has color values set
|
|
||||||
but which is not in use by a QOpenGLWidget is also considered empty.
|
|
||||||
|
|
||||||
Compare size() with zero to determine if the colormap is empty
|
|
||||||
regardless of whether it is in use by a QOpenGLWidget or not.
|
|
||||||
|
|
||||||
\sa size()
|
|
||||||
*/
|
|
||||||
bool QOpenGLColormap::isEmpty() const
|
|
||||||
{
|
|
||||||
return d == &shared_null || d->cells == 0 || d->cells->size() == 0 || d->cmapHandle == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Returns the number of colorcells in the colormap.
|
|
||||||
*/
|
|
||||||
int QOpenGLColormap::size() const
|
|
||||||
{
|
|
||||||
return d->cells ? d->cells->size() : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Returns the index of the color \a color. If \a color is not in the
|
|
||||||
map, -1 is returned.
|
|
||||||
*/
|
|
||||||
int QOpenGLColormap::find(QRgb color) const
|
|
||||||
{
|
|
||||||
if (d->cells)
|
|
||||||
return d->cells->indexOf(color);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
Returns the index of the color that is the closest match to color
|
|
||||||
\a color.
|
|
||||||
*/
|
|
||||||
int QOpenGLColormap::findNearest(QRgb color) const
|
|
||||||
{
|
|
||||||
int idx = find(color);
|
|
||||||
if (idx >= 0)
|
|
||||||
return idx;
|
|
||||||
int mapSize = size();
|
|
||||||
int mindist = 200000;
|
|
||||||
int r = qRed(color);
|
|
||||||
int g = qGreen(color);
|
|
||||||
int b = qBlue(color);
|
|
||||||
int rx, gx, bx, dist;
|
|
||||||
for (int i = 0; i < mapSize; ++i) {
|
|
||||||
QRgb ci = d->cells->at(i);
|
|
||||||
rx = r - qRed(ci);
|
|
||||||
gx = g - qGreen(ci);
|
|
||||||
bx = b - qBlue(ci);
|
|
||||||
dist = rx * rx + gx * gx + bx * bx; // calculate distance
|
|
||||||
if (dist < mindist) { // minimal?
|
|
||||||
mindist = dist;
|
|
||||||
idx = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
|
@ -1,105 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** 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 QtGui module of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:LGPL$
|
|
||||||
** GNU Lesser General Public License Usage
|
|
||||||
** This file may be used under the terms of the GNU Lesser General Public
|
|
||||||
** License version 2.1 as published by the Free Software Foundation and
|
|
||||||
** appearing in the file LICENSE.LGPL included in the packaging of this
|
|
||||||
** file. Please review the following information to ensure the GNU Lesser
|
|
||||||
** General Public License version 2.1 requirements will be met:
|
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
|
||||||
** In addition, as a special exception, Nokia gives you certain additional
|
|
||||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
||||||
**
|
|
||||||
** GNU General Public License Usage
|
|
||||||
** Alternatively, this file may be used under the terms of the GNU General
|
|
||||||
** Public License version 3.0 as published by the Free Software Foundation
|
|
||||||
** and appearing in the file LICENSE.GPL included in the packaging of this
|
|
||||||
** file. Please review the following information to ensure the GNU General
|
|
||||||
** Public License version 3.0 requirements will be met:
|
|
||||||
** http://www.gnu.org/copyleft/gpl.html.
|
|
||||||
**
|
|
||||||
** 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$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#ifndef QOPENGLCOLORMAP_H
|
|
||||||
#define QOPENGLCOLORMAP_H
|
|
||||||
|
|
||||||
#include <QtGui/qcolor.h>
|
|
||||||
#include <QtCore/qvector.h>
|
|
||||||
|
|
||||||
QT_BEGIN_HEADER
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
|
|
||||||
QT_MODULE(Gui)
|
|
||||||
|
|
||||||
class Q_GUI_EXPORT QOpenGLColormap
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
QOpenGLColormap();
|
|
||||||
QOpenGLColormap(const QOpenGLColormap &);
|
|
||||||
~QOpenGLColormap();
|
|
||||||
|
|
||||||
QOpenGLColormap &operator=(const QOpenGLColormap &);
|
|
||||||
|
|
||||||
bool isEmpty() const;
|
|
||||||
int size() const;
|
|
||||||
void detach();
|
|
||||||
|
|
||||||
void setEntries(int count, const QRgb * colors, int base = 0);
|
|
||||||
void setEntry(int idx, QRgb color);
|
|
||||||
void setEntry(int idx, const QColor & color);
|
|
||||||
QRgb entryRgb(int idx) const;
|
|
||||||
QColor entryColor(int idx) const;
|
|
||||||
int find(QRgb color) const;
|
|
||||||
int findNearest(QRgb color) const;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
Qt::HANDLE handle() { return d ? d->cmapHandle : 0; }
|
|
||||||
void setHandle(Qt::HANDLE ahandle) { d->cmapHandle = ahandle; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
struct QOpenGLColormapData {
|
|
||||||
QBasicAtomicInt ref;
|
|
||||||
QVector<QRgb> *cells;
|
|
||||||
Qt::HANDLE cmapHandle;
|
|
||||||
};
|
|
||||||
|
|
||||||
QOpenGLColormapData *d;
|
|
||||||
static struct QOpenGLColormapData shared_null;
|
|
||||||
static void cleanup(QOpenGLColormapData *x);
|
|
||||||
void detach_helper();
|
|
||||||
|
|
||||||
friend class QOpenGLWidget;
|
|
||||||
friend class QOpenGLWidgetPrivate;
|
|
||||||
};
|
|
||||||
|
|
||||||
inline void QOpenGLColormap::detach()
|
|
||||||
{
|
|
||||||
if (d->ref != 1)
|
|
||||||
detach_helper();
|
|
||||||
}
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
|
||||||
|
|
||||||
QT_END_HEADER
|
|
||||||
|
|
||||||
#endif // QOPENGLCOLORMAP_H
|
|
Loading…
Reference in New Issue
Block a user