QColor: move contents of qcolor_p.cpp into qcolor.cpp
The functions defined there are used almost exclusively in qcolor.cpp, so give the compiler the whole picture. Also fixes the non-standard naming of the files: qcolor_p.h should have been qcolor_p_p.h, since it declared functions defined in qcolor_p.cpp. Change-Id: I06e61232a906fd0d98d5adcfe4af5881985367d8 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
8cfac7fba6
commit
6e64008e69
@ -63,7 +63,6 @@ SOURCES += \
|
|||||||
painting/qblittable.cpp \
|
painting/qblittable.cpp \
|
||||||
painting/qbrush.cpp \
|
painting/qbrush.cpp \
|
||||||
painting/qcolor.cpp \
|
painting/qcolor.cpp \
|
||||||
painting/qcolor_p.cpp \
|
|
||||||
painting/qcompositionfunctions.cpp \
|
painting/qcompositionfunctions.cpp \
|
||||||
painting/qcosmeticstroker.cpp \
|
painting/qcosmeticstroker.cpp \
|
||||||
painting/qcssutil.cpp \
|
painting/qcssutil.cpp \
|
||||||
|
@ -43,12 +43,335 @@
|
|||||||
#include "qdatastream.h"
|
#include "qdatastream.h"
|
||||||
#include "qvariant.h"
|
#include "qvariant.h"
|
||||||
#include "qdebug.h"
|
#include "qdebug.h"
|
||||||
|
#include "private/qtools_p.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\internal
|
||||||
|
If s[0..1] is a valid hex number, returns its integer value,
|
||||||
|
otherwise returns -1.
|
||||||
|
*/
|
||||||
|
static inline int hex2int(const char *s)
|
||||||
|
{
|
||||||
|
const int hi = QtMiscUtils::fromHex(s[0]);
|
||||||
|
if (hi < 0)
|
||||||
|
return -1;
|
||||||
|
const int lo = QtMiscUtils::fromHex(s[1]);
|
||||||
|
if (lo < 0)
|
||||||
|
return -1;
|
||||||
|
return (hi << 4) | lo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\internal
|
||||||
|
If s is a valid hex digit, returns its integer value,
|
||||||
|
multiplied by 0x11, otherwise returns -1.
|
||||||
|
*/
|
||||||
|
static inline int hex2int(char s)
|
||||||
|
{
|
||||||
|
const int h = QtMiscUtils::fromHex(s);
|
||||||
|
return h < 0 ? h : (h << 4) | h;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool qt_get_hex_rgb(const char *name, QRgb *rgb)
|
||||||
|
{
|
||||||
|
if (name[0] != '#')
|
||||||
|
return false;
|
||||||
|
name++;
|
||||||
|
int len = qstrlen(name);
|
||||||
|
int a, r, g, b;
|
||||||
|
a = 255;
|
||||||
|
if (len == 12) {
|
||||||
|
r = hex2int(name);
|
||||||
|
g = hex2int(name + 4);
|
||||||
|
b = hex2int(name + 8);
|
||||||
|
} else if (len == 9) {
|
||||||
|
r = hex2int(name);
|
||||||
|
g = hex2int(name + 3);
|
||||||
|
b = hex2int(name + 6);
|
||||||
|
} else if (len == 8) {
|
||||||
|
a = hex2int(name);
|
||||||
|
r = hex2int(name + 2);
|
||||||
|
g = hex2int(name + 4);
|
||||||
|
b = hex2int(name + 6);
|
||||||
|
} else if (len == 6) {
|
||||||
|
r = hex2int(name);
|
||||||
|
g = hex2int(name + 2);
|
||||||
|
b = hex2int(name + 4);
|
||||||
|
} else if (len == 3) {
|
||||||
|
r = hex2int(name[0]);
|
||||||
|
g = hex2int(name[1]);
|
||||||
|
b = hex2int(name[2]);
|
||||||
|
} else {
|
||||||
|
r = g = b = -1;
|
||||||
|
}
|
||||||
|
if ((uint)r > 255 || (uint)g > 255 || (uint)b > 255 || (uint)a > 255) {
|
||||||
|
*rgb = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*rgb = qRgba(r, g ,b, a);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool qt_get_hex_rgb(const QChar *str, int len, QRgb *rgb)
|
||||||
|
{
|
||||||
|
if (len > 13)
|
||||||
|
return false;
|
||||||
|
char tmp[16];
|
||||||
|
for (int i = 0; i < len; ++i)
|
||||||
|
tmp[i] = str[i].toLatin1();
|
||||||
|
tmp[len] = 0;
|
||||||
|
return qt_get_hex_rgb(tmp, rgb);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef QT_NO_COLORNAMES
|
||||||
|
|
||||||
|
/*
|
||||||
|
CSS color names = SVG 1.0 color names + transparent (rgba(0,0,0,0))
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef rgb
|
||||||
|
# undef rgb
|
||||||
|
#endif
|
||||||
|
#define rgb(r,g,b) (0xff000000 | (r << 16) | (g << 8) | b)
|
||||||
|
|
||||||
|
static const struct RGBData {
|
||||||
|
const char name[21];
|
||||||
|
uint value;
|
||||||
|
} rgbTbl[] = {
|
||||||
|
{ "aliceblue", rgb(240, 248, 255) },
|
||||||
|
{ "antiquewhite", rgb(250, 235, 215) },
|
||||||
|
{ "aqua", rgb( 0, 255, 255) },
|
||||||
|
{ "aquamarine", rgb(127, 255, 212) },
|
||||||
|
{ "azure", rgb(240, 255, 255) },
|
||||||
|
{ "beige", rgb(245, 245, 220) },
|
||||||
|
{ "bisque", rgb(255, 228, 196) },
|
||||||
|
{ "black", rgb( 0, 0, 0) },
|
||||||
|
{ "blanchedalmond", rgb(255, 235, 205) },
|
||||||
|
{ "blue", rgb( 0, 0, 255) },
|
||||||
|
{ "blueviolet", rgb(138, 43, 226) },
|
||||||
|
{ "brown", rgb(165, 42, 42) },
|
||||||
|
{ "burlywood", rgb(222, 184, 135) },
|
||||||
|
{ "cadetblue", rgb( 95, 158, 160) },
|
||||||
|
{ "chartreuse", rgb(127, 255, 0) },
|
||||||
|
{ "chocolate", rgb(210, 105, 30) },
|
||||||
|
{ "coral", rgb(255, 127, 80) },
|
||||||
|
{ "cornflowerblue", rgb(100, 149, 237) },
|
||||||
|
{ "cornsilk", rgb(255, 248, 220) },
|
||||||
|
{ "crimson", rgb(220, 20, 60) },
|
||||||
|
{ "cyan", rgb( 0, 255, 255) },
|
||||||
|
{ "darkblue", rgb( 0, 0, 139) },
|
||||||
|
{ "darkcyan", rgb( 0, 139, 139) },
|
||||||
|
{ "darkgoldenrod", rgb(184, 134, 11) },
|
||||||
|
{ "darkgray", rgb(169, 169, 169) },
|
||||||
|
{ "darkgreen", rgb( 0, 100, 0) },
|
||||||
|
{ "darkgrey", rgb(169, 169, 169) },
|
||||||
|
{ "darkkhaki", rgb(189, 183, 107) },
|
||||||
|
{ "darkmagenta", rgb(139, 0, 139) },
|
||||||
|
{ "darkolivegreen", rgb( 85, 107, 47) },
|
||||||
|
{ "darkorange", rgb(255, 140, 0) },
|
||||||
|
{ "darkorchid", rgb(153, 50, 204) },
|
||||||
|
{ "darkred", rgb(139, 0, 0) },
|
||||||
|
{ "darksalmon", rgb(233, 150, 122) },
|
||||||
|
{ "darkseagreen", rgb(143, 188, 143) },
|
||||||
|
{ "darkslateblue", rgb( 72, 61, 139) },
|
||||||
|
{ "darkslategray", rgb( 47, 79, 79) },
|
||||||
|
{ "darkslategrey", rgb( 47, 79, 79) },
|
||||||
|
{ "darkturquoise", rgb( 0, 206, 209) },
|
||||||
|
{ "darkviolet", rgb(148, 0, 211) },
|
||||||
|
{ "deeppink", rgb(255, 20, 147) },
|
||||||
|
{ "deepskyblue", rgb( 0, 191, 255) },
|
||||||
|
{ "dimgray", rgb(105, 105, 105) },
|
||||||
|
{ "dimgrey", rgb(105, 105, 105) },
|
||||||
|
{ "dodgerblue", rgb( 30, 144, 255) },
|
||||||
|
{ "firebrick", rgb(178, 34, 34) },
|
||||||
|
{ "floralwhite", rgb(255, 250, 240) },
|
||||||
|
{ "forestgreen", rgb( 34, 139, 34) },
|
||||||
|
{ "fuchsia", rgb(255, 0, 255) },
|
||||||
|
{ "gainsboro", rgb(220, 220, 220) },
|
||||||
|
{ "ghostwhite", rgb(248, 248, 255) },
|
||||||
|
{ "gold", rgb(255, 215, 0) },
|
||||||
|
{ "goldenrod", rgb(218, 165, 32) },
|
||||||
|
{ "gray", rgb(128, 128, 128) },
|
||||||
|
{ "green", rgb( 0, 128, 0) },
|
||||||
|
{ "greenyellow", rgb(173, 255, 47) },
|
||||||
|
{ "grey", rgb(128, 128, 128) },
|
||||||
|
{ "honeydew", rgb(240, 255, 240) },
|
||||||
|
{ "hotpink", rgb(255, 105, 180) },
|
||||||
|
{ "indianred", rgb(205, 92, 92) },
|
||||||
|
{ "indigo", rgb( 75, 0, 130) },
|
||||||
|
{ "ivory", rgb(255, 255, 240) },
|
||||||
|
{ "khaki", rgb(240, 230, 140) },
|
||||||
|
{ "lavender", rgb(230, 230, 250) },
|
||||||
|
{ "lavenderblush", rgb(255, 240, 245) },
|
||||||
|
{ "lawngreen", rgb(124, 252, 0) },
|
||||||
|
{ "lemonchiffon", rgb(255, 250, 205) },
|
||||||
|
{ "lightblue", rgb(173, 216, 230) },
|
||||||
|
{ "lightcoral", rgb(240, 128, 128) },
|
||||||
|
{ "lightcyan", rgb(224, 255, 255) },
|
||||||
|
{ "lightgoldenrodyellow", rgb(250, 250, 210) },
|
||||||
|
{ "lightgray", rgb(211, 211, 211) },
|
||||||
|
{ "lightgreen", rgb(144, 238, 144) },
|
||||||
|
{ "lightgrey", rgb(211, 211, 211) },
|
||||||
|
{ "lightpink", rgb(255, 182, 193) },
|
||||||
|
{ "lightsalmon", rgb(255, 160, 122) },
|
||||||
|
{ "lightseagreen", rgb( 32, 178, 170) },
|
||||||
|
{ "lightskyblue", rgb(135, 206, 250) },
|
||||||
|
{ "lightslategray", rgb(119, 136, 153) },
|
||||||
|
{ "lightslategrey", rgb(119, 136, 153) },
|
||||||
|
{ "lightsteelblue", rgb(176, 196, 222) },
|
||||||
|
{ "lightyellow", rgb(255, 255, 224) },
|
||||||
|
{ "lime", rgb( 0, 255, 0) },
|
||||||
|
{ "limegreen", rgb( 50, 205, 50) },
|
||||||
|
{ "linen", rgb(250, 240, 230) },
|
||||||
|
{ "magenta", rgb(255, 0, 255) },
|
||||||
|
{ "maroon", rgb(128, 0, 0) },
|
||||||
|
{ "mediumaquamarine", rgb(102, 205, 170) },
|
||||||
|
{ "mediumblue", rgb( 0, 0, 205) },
|
||||||
|
{ "mediumorchid", rgb(186, 85, 211) },
|
||||||
|
{ "mediumpurple", rgb(147, 112, 219) },
|
||||||
|
{ "mediumseagreen", rgb( 60, 179, 113) },
|
||||||
|
{ "mediumslateblue", rgb(123, 104, 238) },
|
||||||
|
{ "mediumspringgreen", rgb( 0, 250, 154) },
|
||||||
|
{ "mediumturquoise", rgb( 72, 209, 204) },
|
||||||
|
{ "mediumvioletred", rgb(199, 21, 133) },
|
||||||
|
{ "midnightblue", rgb( 25, 25, 112) },
|
||||||
|
{ "mintcream", rgb(245, 255, 250) },
|
||||||
|
{ "mistyrose", rgb(255, 228, 225) },
|
||||||
|
{ "moccasin", rgb(255, 228, 181) },
|
||||||
|
{ "navajowhite", rgb(255, 222, 173) },
|
||||||
|
{ "navy", rgb( 0, 0, 128) },
|
||||||
|
{ "oldlace", rgb(253, 245, 230) },
|
||||||
|
{ "olive", rgb(128, 128, 0) },
|
||||||
|
{ "olivedrab", rgb(107, 142, 35) },
|
||||||
|
{ "orange", rgb(255, 165, 0) },
|
||||||
|
{ "orangered", rgb(255, 69, 0) },
|
||||||
|
{ "orchid", rgb(218, 112, 214) },
|
||||||
|
{ "palegoldenrod", rgb(238, 232, 170) },
|
||||||
|
{ "palegreen", rgb(152, 251, 152) },
|
||||||
|
{ "paleturquoise", rgb(175, 238, 238) },
|
||||||
|
{ "palevioletred", rgb(219, 112, 147) },
|
||||||
|
{ "papayawhip", rgb(255, 239, 213) },
|
||||||
|
{ "peachpuff", rgb(255, 218, 185) },
|
||||||
|
{ "peru", rgb(205, 133, 63) },
|
||||||
|
{ "pink", rgb(255, 192, 203) },
|
||||||
|
{ "plum", rgb(221, 160, 221) },
|
||||||
|
{ "powderblue", rgb(176, 224, 230) },
|
||||||
|
{ "purple", rgb(128, 0, 128) },
|
||||||
|
{ "red", rgb(255, 0, 0) },
|
||||||
|
{ "rosybrown", rgb(188, 143, 143) },
|
||||||
|
{ "royalblue", rgb( 65, 105, 225) },
|
||||||
|
{ "saddlebrown", rgb(139, 69, 19) },
|
||||||
|
{ "salmon", rgb(250, 128, 114) },
|
||||||
|
{ "sandybrown", rgb(244, 164, 96) },
|
||||||
|
{ "seagreen", rgb( 46, 139, 87) },
|
||||||
|
{ "seashell", rgb(255, 245, 238) },
|
||||||
|
{ "sienna", rgb(160, 82, 45) },
|
||||||
|
{ "silver", rgb(192, 192, 192) },
|
||||||
|
{ "skyblue", rgb(135, 206, 235) },
|
||||||
|
{ "slateblue", rgb(106, 90, 205) },
|
||||||
|
{ "slategray", rgb(112, 128, 144) },
|
||||||
|
{ "slategrey", rgb(112, 128, 144) },
|
||||||
|
{ "snow", rgb(255, 250, 250) },
|
||||||
|
{ "springgreen", rgb( 0, 255, 127) },
|
||||||
|
{ "steelblue", rgb( 70, 130, 180) },
|
||||||
|
{ "tan", rgb(210, 180, 140) },
|
||||||
|
{ "teal", rgb( 0, 128, 128) },
|
||||||
|
{ "thistle", rgb(216, 191, 216) },
|
||||||
|
{ "tomato", rgb(255, 99, 71) },
|
||||||
|
{ "transparent", 0 },
|
||||||
|
{ "turquoise", rgb( 64, 224, 208) },
|
||||||
|
{ "violet", rgb(238, 130, 238) },
|
||||||
|
{ "wheat", rgb(245, 222, 179) },
|
||||||
|
{ "white", rgb(255, 255, 255) },
|
||||||
|
{ "whitesmoke", rgb(245, 245, 245) },
|
||||||
|
{ "yellow", rgb(255, 255, 0) },
|
||||||
|
{ "yellowgreen", rgb(154, 205, 50) }
|
||||||
|
};
|
||||||
|
|
||||||
|
static const int rgbTblSize = sizeof(rgbTbl) / sizeof(RGBData);
|
||||||
|
|
||||||
|
#undef rgb
|
||||||
|
|
||||||
|
#if defined(Q_CC_MSVC) && _MSC_VER < 1600
|
||||||
|
inline bool operator<(const RGBData &data1, const RGBData &data2)
|
||||||
|
{ return qstrcmp(data1.name, data2.name) < 0; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
inline bool operator<(const char *name, const RGBData &data)
|
||||||
|
{ return qstrcmp(name, data.name) < 0; }
|
||||||
|
inline bool operator<(const RGBData &data, const char *name)
|
||||||
|
{ return qstrcmp(data.name, name) < 0; }
|
||||||
|
|
||||||
|
static bool get_named_rgb(const char *name_no_space, QRgb *rgb)
|
||||||
|
{
|
||||||
|
const RGBData *r = std::lower_bound(rgbTbl, rgbTbl + rgbTblSize, name_no_space);
|
||||||
|
if ((r != rgbTbl + rgbTblSize) && !(name_no_space < *r)) {
|
||||||
|
*rgb = r->value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool qt_get_named_rgb(const char *name, QRgb* rgb)
|
||||||
|
{
|
||||||
|
int len = int(strlen(name));
|
||||||
|
if (len > 255)
|
||||||
|
return false;
|
||||||
|
char name_no_space[256];
|
||||||
|
int pos = 0;
|
||||||
|
for (int i = 0; i < len; i++) {
|
||||||
|
if (name[i] != '\t' && name[i] != ' ')
|
||||||
|
name_no_space[pos++] = QChar::toLower(name[i]);
|
||||||
|
}
|
||||||
|
name_no_space[pos] = 0;
|
||||||
|
|
||||||
|
return get_named_rgb(name_no_space, rgb);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool qt_get_named_rgb(const QChar *name, int len, QRgb *rgb)
|
||||||
|
{
|
||||||
|
if (len > 255)
|
||||||
|
return false;
|
||||||
|
char name_no_space[256];
|
||||||
|
int pos = 0;
|
||||||
|
for (int i = 0; i < len; i++) {
|
||||||
|
if (name[i] != QLatin1Char('\t') && name[i] != QLatin1Char(' '))
|
||||||
|
name_no_space[pos++] = name[i].toLower().toLatin1();
|
||||||
|
}
|
||||||
|
name_no_space[pos] = 0;
|
||||||
|
return get_named_rgb(name_no_space, rgb);
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList qt_get_colornames()
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
QStringList lst;
|
||||||
|
lst.reserve(rgbTblSize);
|
||||||
|
for (i = 0; i < rgbTblSize; i++)
|
||||||
|
lst << QLatin1String(rgbTbl[i].name);
|
||||||
|
return lst;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
bool qt_get_named_rgb(const char *, QRgb*)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList qt_get_colornames()
|
||||||
|
{
|
||||||
|
return QStringList();
|
||||||
|
}
|
||||||
|
#endif // QT_NO_COLORNAMES
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class QColor
|
\class QColor
|
||||||
\brief The QColor class provides colors based on RGB, HSV or CMYK values.
|
\brief The QColor class provides colors based on RGB, HSV or CMYK values.
|
||||||
|
@ -1,369 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:LGPL$
|
|
||||||
** 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 Lesser General Public License Usage
|
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
|
||||||
** General Public License version 3 as published by the Free Software
|
|
||||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
|
||||||
** packaging of this file. Please review the following information to
|
|
||||||
** ensure the GNU Lesser General Public License version 3 requirements
|
|
||||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
|
||||||
**
|
|
||||||
** GNU General Public License Usage
|
|
||||||
** Alternatively, this file may be used under the terms of the GNU
|
|
||||||
** General Public License version 2.0 or (at your option) the GNU General
|
|
||||||
** Public license version 3 or any later version approved by the KDE Free
|
|
||||||
** Qt Foundation. The licenses are as published by the Free Software
|
|
||||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
|
||||||
** included in the packaging of this file. Please review the following
|
|
||||||
** information to ensure the GNU General Public License requirements will
|
|
||||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
|
||||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include "qglobal.h"
|
|
||||||
#include "qrgb.h"
|
|
||||||
#include "qstringlist.h"
|
|
||||||
#include "private/qtools_p.h"
|
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\internal
|
|
||||||
If s[0..1] is a valid hex number, returns its integer value,
|
|
||||||
otherwise returns -1.
|
|
||||||
*/
|
|
||||||
static inline int hex2int(const char *s)
|
|
||||||
{
|
|
||||||
const int hi = QtMiscUtils::fromHex(s[0]);
|
|
||||||
if (hi < 0)
|
|
||||||
return -1;
|
|
||||||
const int lo = QtMiscUtils::fromHex(s[1]);
|
|
||||||
if (lo < 0)
|
|
||||||
return -1;
|
|
||||||
return (hi << 4) | lo;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\internal
|
|
||||||
If s is a valid hex digit, returns its integer value,
|
|
||||||
multiplied by 0x11, otherwise returns -1.
|
|
||||||
*/
|
|
||||||
static inline int hex2int(char s)
|
|
||||||
{
|
|
||||||
const int h = QtMiscUtils::fromHex(s);
|
|
||||||
return h < 0 ? h : (h << 4) | h;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool qt_get_hex_rgb(const char *name, QRgb *rgb)
|
|
||||||
{
|
|
||||||
if(name[0] != '#')
|
|
||||||
return false;
|
|
||||||
name++;
|
|
||||||
int len = qstrlen(name);
|
|
||||||
int a, r, g, b;
|
|
||||||
a = 255;
|
|
||||||
if (len == 12) {
|
|
||||||
r = hex2int(name);
|
|
||||||
g = hex2int(name + 4);
|
|
||||||
b = hex2int(name + 8);
|
|
||||||
} else if (len == 9) {
|
|
||||||
r = hex2int(name);
|
|
||||||
g = hex2int(name + 3);
|
|
||||||
b = hex2int(name + 6);
|
|
||||||
} else if (len == 8) {
|
|
||||||
a = hex2int(name);
|
|
||||||
r = hex2int(name + 2);
|
|
||||||
g = hex2int(name + 4);
|
|
||||||
b = hex2int(name + 6);
|
|
||||||
} else if (len == 6) {
|
|
||||||
r = hex2int(name);
|
|
||||||
g = hex2int(name + 2);
|
|
||||||
b = hex2int(name + 4);
|
|
||||||
} else if (len == 3) {
|
|
||||||
r = hex2int(name[0]);
|
|
||||||
g = hex2int(name[1]);
|
|
||||||
b = hex2int(name[2]);
|
|
||||||
} else {
|
|
||||||
r = g = b = -1;
|
|
||||||
}
|
|
||||||
if ((uint)r > 255 || (uint)g > 255 || (uint)b > 255 || (uint)a > 255) {
|
|
||||||
*rgb = 0;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
*rgb = qRgba(r, g ,b, a);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool qt_get_hex_rgb(const QChar *str, int len, QRgb *rgb)
|
|
||||||
{
|
|
||||||
if (len > 13)
|
|
||||||
return false;
|
|
||||||
char tmp[16];
|
|
||||||
for(int i = 0; i < len; ++i)
|
|
||||||
tmp[i] = str[i].toLatin1();
|
|
||||||
tmp[len] = 0;
|
|
||||||
return qt_get_hex_rgb(tmp, rgb);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef QT_NO_COLORNAMES
|
|
||||||
|
|
||||||
/*
|
|
||||||
CSS color names = SVG 1.0 color names + transparent (rgba(0,0,0,0))
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef rgb
|
|
||||||
# undef rgb
|
|
||||||
#endif
|
|
||||||
#define rgb(r,g,b) (0xff000000 | (r << 16) | (g << 8) | b)
|
|
||||||
|
|
||||||
static const struct RGBData {
|
|
||||||
const char name[21];
|
|
||||||
uint value;
|
|
||||||
} rgbTbl[] = {
|
|
||||||
{ "aliceblue", rgb(240, 248, 255) },
|
|
||||||
{ "antiquewhite", rgb(250, 235, 215) },
|
|
||||||
{ "aqua", rgb( 0, 255, 255) },
|
|
||||||
{ "aquamarine", rgb(127, 255, 212) },
|
|
||||||
{ "azure", rgb(240, 255, 255) },
|
|
||||||
{ "beige", rgb(245, 245, 220) },
|
|
||||||
{ "bisque", rgb(255, 228, 196) },
|
|
||||||
{ "black", rgb( 0, 0, 0) },
|
|
||||||
{ "blanchedalmond", rgb(255, 235, 205) },
|
|
||||||
{ "blue", rgb( 0, 0, 255) },
|
|
||||||
{ "blueviolet", rgb(138, 43, 226) },
|
|
||||||
{ "brown", rgb(165, 42, 42) },
|
|
||||||
{ "burlywood", rgb(222, 184, 135) },
|
|
||||||
{ "cadetblue", rgb( 95, 158, 160) },
|
|
||||||
{ "chartreuse", rgb(127, 255, 0) },
|
|
||||||
{ "chocolate", rgb(210, 105, 30) },
|
|
||||||
{ "coral", rgb(255, 127, 80) },
|
|
||||||
{ "cornflowerblue", rgb(100, 149, 237) },
|
|
||||||
{ "cornsilk", rgb(255, 248, 220) },
|
|
||||||
{ "crimson", rgb(220, 20, 60) },
|
|
||||||
{ "cyan", rgb( 0, 255, 255) },
|
|
||||||
{ "darkblue", rgb( 0, 0, 139) },
|
|
||||||
{ "darkcyan", rgb( 0, 139, 139) },
|
|
||||||
{ "darkgoldenrod", rgb(184, 134, 11) },
|
|
||||||
{ "darkgray", rgb(169, 169, 169) },
|
|
||||||
{ "darkgreen", rgb( 0, 100, 0) },
|
|
||||||
{ "darkgrey", rgb(169, 169, 169) },
|
|
||||||
{ "darkkhaki", rgb(189, 183, 107) },
|
|
||||||
{ "darkmagenta", rgb(139, 0, 139) },
|
|
||||||
{ "darkolivegreen", rgb( 85, 107, 47) },
|
|
||||||
{ "darkorange", rgb(255, 140, 0) },
|
|
||||||
{ "darkorchid", rgb(153, 50, 204) },
|
|
||||||
{ "darkred", rgb(139, 0, 0) },
|
|
||||||
{ "darksalmon", rgb(233, 150, 122) },
|
|
||||||
{ "darkseagreen", rgb(143, 188, 143) },
|
|
||||||
{ "darkslateblue", rgb( 72, 61, 139) },
|
|
||||||
{ "darkslategray", rgb( 47, 79, 79) },
|
|
||||||
{ "darkslategrey", rgb( 47, 79, 79) },
|
|
||||||
{ "darkturquoise", rgb( 0, 206, 209) },
|
|
||||||
{ "darkviolet", rgb(148, 0, 211) },
|
|
||||||
{ "deeppink", rgb(255, 20, 147) },
|
|
||||||
{ "deepskyblue", rgb( 0, 191, 255) },
|
|
||||||
{ "dimgray", rgb(105, 105, 105) },
|
|
||||||
{ "dimgrey", rgb(105, 105, 105) },
|
|
||||||
{ "dodgerblue", rgb( 30, 144, 255) },
|
|
||||||
{ "firebrick", rgb(178, 34, 34) },
|
|
||||||
{ "floralwhite", rgb(255, 250, 240) },
|
|
||||||
{ "forestgreen", rgb( 34, 139, 34) },
|
|
||||||
{ "fuchsia", rgb(255, 0, 255) },
|
|
||||||
{ "gainsboro", rgb(220, 220, 220) },
|
|
||||||
{ "ghostwhite", rgb(248, 248, 255) },
|
|
||||||
{ "gold", rgb(255, 215, 0) },
|
|
||||||
{ "goldenrod", rgb(218, 165, 32) },
|
|
||||||
{ "gray", rgb(128, 128, 128) },
|
|
||||||
{ "green", rgb( 0, 128, 0) },
|
|
||||||
{ "greenyellow", rgb(173, 255, 47) },
|
|
||||||
{ "grey", rgb(128, 128, 128) },
|
|
||||||
{ "honeydew", rgb(240, 255, 240) },
|
|
||||||
{ "hotpink", rgb(255, 105, 180) },
|
|
||||||
{ "indianred", rgb(205, 92, 92) },
|
|
||||||
{ "indigo", rgb( 75, 0, 130) },
|
|
||||||
{ "ivory", rgb(255, 255, 240) },
|
|
||||||
{ "khaki", rgb(240, 230, 140) },
|
|
||||||
{ "lavender", rgb(230, 230, 250) },
|
|
||||||
{ "lavenderblush", rgb(255, 240, 245) },
|
|
||||||
{ "lawngreen", rgb(124, 252, 0) },
|
|
||||||
{ "lemonchiffon", rgb(255, 250, 205) },
|
|
||||||
{ "lightblue", rgb(173, 216, 230) },
|
|
||||||
{ "lightcoral", rgb(240, 128, 128) },
|
|
||||||
{ "lightcyan", rgb(224, 255, 255) },
|
|
||||||
{ "lightgoldenrodyellow", rgb(250, 250, 210) },
|
|
||||||
{ "lightgray", rgb(211, 211, 211) },
|
|
||||||
{ "lightgreen", rgb(144, 238, 144) },
|
|
||||||
{ "lightgrey", rgb(211, 211, 211) },
|
|
||||||
{ "lightpink", rgb(255, 182, 193) },
|
|
||||||
{ "lightsalmon", rgb(255, 160, 122) },
|
|
||||||
{ "lightseagreen", rgb( 32, 178, 170) },
|
|
||||||
{ "lightskyblue", rgb(135, 206, 250) },
|
|
||||||
{ "lightslategray", rgb(119, 136, 153) },
|
|
||||||
{ "lightslategrey", rgb(119, 136, 153) },
|
|
||||||
{ "lightsteelblue", rgb(176, 196, 222) },
|
|
||||||
{ "lightyellow", rgb(255, 255, 224) },
|
|
||||||
{ "lime", rgb( 0, 255, 0) },
|
|
||||||
{ "limegreen", rgb( 50, 205, 50) },
|
|
||||||
{ "linen", rgb(250, 240, 230) },
|
|
||||||
{ "magenta", rgb(255, 0, 255) },
|
|
||||||
{ "maroon", rgb(128, 0, 0) },
|
|
||||||
{ "mediumaquamarine", rgb(102, 205, 170) },
|
|
||||||
{ "mediumblue", rgb( 0, 0, 205) },
|
|
||||||
{ "mediumorchid", rgb(186, 85, 211) },
|
|
||||||
{ "mediumpurple", rgb(147, 112, 219) },
|
|
||||||
{ "mediumseagreen", rgb( 60, 179, 113) },
|
|
||||||
{ "mediumslateblue", rgb(123, 104, 238) },
|
|
||||||
{ "mediumspringgreen", rgb( 0, 250, 154) },
|
|
||||||
{ "mediumturquoise", rgb( 72, 209, 204) },
|
|
||||||
{ "mediumvioletred", rgb(199, 21, 133) },
|
|
||||||
{ "midnightblue", rgb( 25, 25, 112) },
|
|
||||||
{ "mintcream", rgb(245, 255, 250) },
|
|
||||||
{ "mistyrose", rgb(255, 228, 225) },
|
|
||||||
{ "moccasin", rgb(255, 228, 181) },
|
|
||||||
{ "navajowhite", rgb(255, 222, 173) },
|
|
||||||
{ "navy", rgb( 0, 0, 128) },
|
|
||||||
{ "oldlace", rgb(253, 245, 230) },
|
|
||||||
{ "olive", rgb(128, 128, 0) },
|
|
||||||
{ "olivedrab", rgb(107, 142, 35) },
|
|
||||||
{ "orange", rgb(255, 165, 0) },
|
|
||||||
{ "orangered", rgb(255, 69, 0) },
|
|
||||||
{ "orchid", rgb(218, 112, 214) },
|
|
||||||
{ "palegoldenrod", rgb(238, 232, 170) },
|
|
||||||
{ "palegreen", rgb(152, 251, 152) },
|
|
||||||
{ "paleturquoise", rgb(175, 238, 238) },
|
|
||||||
{ "palevioletred", rgb(219, 112, 147) },
|
|
||||||
{ "papayawhip", rgb(255, 239, 213) },
|
|
||||||
{ "peachpuff", rgb(255, 218, 185) },
|
|
||||||
{ "peru", rgb(205, 133, 63) },
|
|
||||||
{ "pink", rgb(255, 192, 203) },
|
|
||||||
{ "plum", rgb(221, 160, 221) },
|
|
||||||
{ "powderblue", rgb(176, 224, 230) },
|
|
||||||
{ "purple", rgb(128, 0, 128) },
|
|
||||||
{ "red", rgb(255, 0, 0) },
|
|
||||||
{ "rosybrown", rgb(188, 143, 143) },
|
|
||||||
{ "royalblue", rgb( 65, 105, 225) },
|
|
||||||
{ "saddlebrown", rgb(139, 69, 19) },
|
|
||||||
{ "salmon", rgb(250, 128, 114) },
|
|
||||||
{ "sandybrown", rgb(244, 164, 96) },
|
|
||||||
{ "seagreen", rgb( 46, 139, 87) },
|
|
||||||
{ "seashell", rgb(255, 245, 238) },
|
|
||||||
{ "sienna", rgb(160, 82, 45) },
|
|
||||||
{ "silver", rgb(192, 192, 192) },
|
|
||||||
{ "skyblue", rgb(135, 206, 235) },
|
|
||||||
{ "slateblue", rgb(106, 90, 205) },
|
|
||||||
{ "slategray", rgb(112, 128, 144) },
|
|
||||||
{ "slategrey", rgb(112, 128, 144) },
|
|
||||||
{ "snow", rgb(255, 250, 250) },
|
|
||||||
{ "springgreen", rgb( 0, 255, 127) },
|
|
||||||
{ "steelblue", rgb( 70, 130, 180) },
|
|
||||||
{ "tan", rgb(210, 180, 140) },
|
|
||||||
{ "teal", rgb( 0, 128, 128) },
|
|
||||||
{ "thistle", rgb(216, 191, 216) },
|
|
||||||
{ "tomato", rgb(255, 99, 71) },
|
|
||||||
{ "transparent", 0 },
|
|
||||||
{ "turquoise", rgb( 64, 224, 208) },
|
|
||||||
{ "violet", rgb(238, 130, 238) },
|
|
||||||
{ "wheat", rgb(245, 222, 179) },
|
|
||||||
{ "white", rgb(255, 255, 255) },
|
|
||||||
{ "whitesmoke", rgb(245, 245, 245) },
|
|
||||||
{ "yellow", rgb(255, 255, 0) },
|
|
||||||
{ "yellowgreen", rgb(154, 205, 50) }
|
|
||||||
};
|
|
||||||
|
|
||||||
static const int rgbTblSize = sizeof(rgbTbl) / sizeof(RGBData);
|
|
||||||
|
|
||||||
#undef rgb
|
|
||||||
|
|
||||||
#if defined(Q_CC_MSVC) && _MSC_VER < 1600
|
|
||||||
inline bool operator<(const RGBData &data1, const RGBData &data2)
|
|
||||||
{ return qstrcmp(data1.name, data2.name) < 0; }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
inline bool operator<(const char *name, const RGBData &data)
|
|
||||||
{ return qstrcmp(name, data.name) < 0; }
|
|
||||||
inline bool operator<(const RGBData &data, const char *name)
|
|
||||||
{ return qstrcmp(data.name, name) < 0; }
|
|
||||||
|
|
||||||
static bool get_named_rgb(const char *name_no_space, QRgb *rgb)
|
|
||||||
{
|
|
||||||
const RGBData *r = std::lower_bound(rgbTbl, rgbTbl + rgbTblSize, name_no_space);
|
|
||||||
if ((r != rgbTbl + rgbTblSize) && !(name_no_space < *r)) {
|
|
||||||
*rgb = r->value;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool qt_get_named_rgb(const char *name, QRgb* rgb)
|
|
||||||
{
|
|
||||||
int len = int(strlen(name));
|
|
||||||
if(len > 255)
|
|
||||||
return false;
|
|
||||||
char name_no_space[256];
|
|
||||||
int pos = 0;
|
|
||||||
for(int i = 0; i < len; i++) {
|
|
||||||
if(name[i] != '\t' && name[i] != ' ')
|
|
||||||
name_no_space[pos++] = QChar::toLower(name[i]);
|
|
||||||
}
|
|
||||||
name_no_space[pos] = 0;
|
|
||||||
|
|
||||||
return get_named_rgb(name_no_space, rgb);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool qt_get_named_rgb(const QChar *name, int len, QRgb *rgb)
|
|
||||||
{
|
|
||||||
if(len > 255)
|
|
||||||
return false;
|
|
||||||
char name_no_space[256];
|
|
||||||
int pos = 0;
|
|
||||||
for(int i = 0; i < len; i++) {
|
|
||||||
if(name[i] != QLatin1Char('\t') && name[i] != QLatin1Char(' '))
|
|
||||||
name_no_space[pos++] = name[i].toLower().toLatin1();
|
|
||||||
}
|
|
||||||
name_no_space[pos] = 0;
|
|
||||||
return get_named_rgb(name_no_space, rgb);
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList qt_get_colornames()
|
|
||||||
{
|
|
||||||
int i = 0;
|
|
||||||
QStringList lst;
|
|
||||||
lst.reserve(rgbTblSize);
|
|
||||||
for (i = 0; i < rgbTblSize; i++)
|
|
||||||
lst << QLatin1String(rgbTbl[i].name);
|
|
||||||
return lst;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
bool qt_get_named_rgb(const char *, QRgb*)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList qt_get_colornames()
|
|
||||||
{
|
|
||||||
return QStringList();
|
|
||||||
}
|
|
||||||
#endif // QT_NO_COLORNAMES
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
|
Loading…
Reference in New Issue
Block a user