diff options
Diffstat (limited to 'tqtinterface/qt4/src/kernel/tqcolor.cpp')
-rw-r--r-- | tqtinterface/qt4/src/kernel/tqcolor.cpp | 1174 |
1 files changed, 0 insertions, 1174 deletions
diff --git a/tqtinterface/qt4/src/kernel/tqcolor.cpp b/tqtinterface/qt4/src/kernel/tqcolor.cpp deleted file mode 100644 index e307663..0000000 --- a/tqtinterface/qt4/src/kernel/tqcolor.cpp +++ /dev/null @@ -1,1174 +0,0 @@ -/**************************************************************************** -** -** Implementation of TQColor class -** -** Created : 940112 -** -** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA. -** -** This file is part of the kernel module of the TQt GUI Toolkit. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at sales@trolltech.com. -** -** This file may be used under the terms of the Q Public License as -** defined by Trolltech ASA and appearing in the file LICENSE.TQPL -** included in the packaging of this file. Licensees holding valid TQt -** Commercial licenses may use this file in accordance with the TQt -** Commercial License Agreement provided with the Software. -** -** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, -** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "tqcolor.h" -#include "tqnamespace.h" -#include "tqdatastream.h" - -#include <stdio.h> - -#ifdef USE_QT4 - -#include "Qt/qcolormap.h" - -/***************************************************************************** - Global colors - *****************************************************************************/ - -#if defined(TQ_WS_WIN) -#define COLOR0_PIX 0x00ffffff -#define COLOR1_PIX 0 -#else -#define COLOR0_PIX 0 -#define COLOR1_PIX 1 -#endif - -#if (defined(TQ_CC_GNU) && defined(TQ_OS_WIN)) -// workaround - bug in mingw -static TQColor stdcol[19] = { - TQColor( 255, 255, 255 ), - TQColor( 0, 0, 0 ), - TQColor( 0, 0, 0 ), - TQColor( 255, 255, 255 ), - TQColor( 128, 128, 128 ), - TQColor( 160, 160, 164 ), - TQColor( 192, 192, 192 ), - TQColor( 255, 0, 0 ), - TQColor( 0, 255, 0 ), - TQColor( 0, 0, 255 ), - TQColor( 0, 255, 255 ), - TQColor( 255, 0, 255 ), - TQColor( 255, 255, 0 ), - TQColor( 128, 0, 0 ), - TQColor( 0, 128, 0 ), - TQColor( 0, 0, 128 ), - TQColor( 0, 128, 128 ), - TQColor( 128, 0, 128 ), - TQColor( 128, 128, 0 ) }; -#else - static TQColor stdcol[19]; -#endif - -TQT_STATIC_CONST_IMPL TQColor & TQt::color0 = stdcol[0]; -TQT_STATIC_CONST_IMPL TQColor & TQt::color1 = stdcol[1]; -TQT_STATIC_CONST_IMPL TQColor & TQt::black = stdcol[2]; -TQT_STATIC_CONST_IMPL TQColor & TQt::white = stdcol[3]; -TQT_STATIC_CONST_IMPL TQColor & TQt::darkGray = stdcol[4]; -TQT_STATIC_CONST_IMPL TQColor & TQt::gray = stdcol[5]; -TQT_STATIC_CONST_IMPL TQColor & TQt::lightGray = stdcol[6]; -TQT_STATIC_CONST_IMPL TQColor & TQt::red = stdcol[7]; -TQT_STATIC_CONST_IMPL TQColor & TQt::green = stdcol[8]; -TQT_STATIC_CONST_IMPL TQColor & TQt::blue = stdcol[9]; -TQT_STATIC_CONST_IMPL TQColor & TQt::cyan = stdcol[10]; -TQT_STATIC_CONST_IMPL TQColor & TQt::magenta = stdcol[11]; -TQT_STATIC_CONST_IMPL TQColor & TQt::yellow = stdcol[12]; -TQT_STATIC_CONST_IMPL TQColor & TQt::darkRed = stdcol[13]; -TQT_STATIC_CONST_IMPL TQColor & TQt::darkGreen = stdcol[14]; -TQT_STATIC_CONST_IMPL TQColor & TQt::darkBlue = stdcol[15]; -TQT_STATIC_CONST_IMPL TQColor & TQt::darkCyan = stdcol[16]; -TQT_STATIC_CONST_IMPL TQColor & TQt::darkMagenta = stdcol[17]; -TQT_STATIC_CONST_IMPL TQColor & TQt::darkYellow = stdcol[18]; - -/***************************************************************************** - TQColor member functions - *****************************************************************************/ - -bool TQColor::color_init = FALSE; // color system not initialized -bool TQColor::globals_init = FALSE; // global color not initialized -TQColor::ColorModel TQColor::colormodel = d32; - -/*! - Returns the pixel value used by the underlying window system to refer to a - color. - - Use QColormap::pixel() instead. - - \oldcode - QColor myColor; - uint pixel = myColor.pixel(screen); - \newcode - QColormap cmap = QColormap::instance(screen); - uint pixel = cmap.pixel(*this); - \endcode -*/ -uint TQColor::pixel(int screen) const -{ - QColormap cmap = QColormap::instance(screen); - return cmap.pixel(*this); -} - -void TQColor::initGlobalColors() -{ - globals_init = TRUE; - -// #ifdef TQ_WS_X11 -// // HACK: we need a way to recognize color0 and color1 uniquely, so -// // that we can use color0 and color1 with fixed pixel values on -// // all screens -// stdcol[ 0].d.argb = tqRgba(255, 255, 255, 1); -// stdcol[ 1].d.argb = tqRgba( 0, 0, 0, 1); -// #else -// stdcol[ 0].d.argb = tqRgb(255,255,255); -// stdcol[ 1].d.argb = 0; -// #endif // TQ_WS_X11 -// stdcol[ 0].setPixel( COLOR0_PIX ); -// stdcol[ 1].setPixel( COLOR1_PIX ); - stdcol[ 0] = Qt::color0; - stdcol[ 1] = Qt::color1; - - // From the "The Palette Manager: How and Why" by Ron Gery, March 23, - // 1992, archived on MSDN: - // The Windows system palette is broken up into two sections, - // one with fixed colors and one with colors that can be changed - // by applications. The system palette predefines 20 entries; - // these colors are known as the static or reserved colors and - // consist of the 16 colors found in the Windows version 3.0 VGA - // driver and 4 additional colors chosen for their visual appeal. - // The DEFAULT_PALETTE stock object is, as the name implies, the - // default palette selected into a tqdevice context (DC) and consists - // of these static colors. Applications can set the remaining 236 - // colors using the Palette Manager. - // The 20 reserved entries have indices in [0,9] and [246,255]. We - // reuse 17 of them. - stdcol[ 2].setRgb( 0, 0, 0 ); // index 0 black - stdcol[ 3].setRgb( 255, 255, 255 ); // index 255 white - stdcol[ 4].setRgb( 128, 128, 128 ); // index 248 medium gray - stdcol[ 5].setRgb( 160, 160, 164 ); // index 247 light gray - stdcol[ 6].setRgb( 192, 192, 192 ); // index 7 light gray - stdcol[ 7].setRgb( 255, 0, 0 ); // index 249 red - stdcol[ 8].setRgb( 0, 255, 0 ); // index 250 green - stdcol[ 9].setRgb( 0, 0, 255 ); // index 252 blue - stdcol[10].setRgb( 0, 255, 255 ); // index 254 cyan - stdcol[11].setRgb( 255, 0, 255 ); // index 253 magenta - stdcol[12].setRgb( 255, 255, 0 ); // index 251 yellow - stdcol[13].setRgb( 128, 0, 0 ); // index 1 dark red - stdcol[14].setRgb( 0, 128, 0 ); // index 2 dark green - stdcol[15].setRgb( 0, 0, 128 ); // index 4 dark blue - stdcol[16].setRgb( 0, 128, 128 ); // index 6 dark cyan - stdcol[17].setRgb( 128, 0, 128 ); // index 5 dark magenta - stdcol[18].setRgb( 128, 128, 0 ); // index 3 dark yellow -} - -#else // USE_QT4 - -/*! - \class TQColor tqcolor.h - \brief The TQColor class provides colors based on RGB or HSV values. - - \ingroup images - \ingroup graphics - \ingroup appearance - - A color is normally specified in terms of RGB (red, green and blue) - components, but it is also possible to specify HSV (hue, saturation - and value) or set a color name (the names are copied from from the - X11 color database). - - In addition to the RGB value, a TQColor also has a pixel value and a - validity. The pixel value is used by the underlying window system - to refer to a color. It can be thought of as an index into the - display hardware's color table. - - The validity (isValid()) indicates whether the color is legal at - all. For example, a RGB color with RGB values out of range is - illegal. For performance reasons, TQColor mostly disregards illegal - colors. The result of using an invalid color is unspecified and - will usually be surprising. - - There are 19 predefined TQColor objects: \c white, \c black, \c - red, \c darkRed, \c green, \c darkGreen, \c blue, \c darkBlue, \c - cyan, \c darkCyan, \c magenta, \c darkMagenta, \c yellow, \c - darkYellow, \c gray, \c darkGray, \c lightGray, \c color0 and \c - color1, accessible as members of the TQt namespace (ie. \c TQt::red). - - \img qt-colors.png TQt Colors - - The colors \c color0 (zero pixel value) and \c color1 (non-zero - pixel value) are special colors for drawing in \link TQBitmap - bitmaps\endlink. Painting with \c color0 sets the bitmap bits to 0 - (transparent, i.e. background), and painting with \c color1 sets the - bits to 1 (opaque, i.e. foreground). - - The TQColor class has an efficient, dynamic color allocation - strategy. A color is normally allocated the first time it is used - (lazy allocation), that is, whenever the pixel() function is called. - The following steps are taken to allocate a color. If, at any point, - a suitable color is found then the appropriate pixel value is - returned and the subsequent steps are not taken: - - \list 1 - \i Is the pixel value valid? If it is, just return it; otherwise, - allocate a pixel value. - \i Check an internal hash table to see if we allocated an equal RGB - value earlier. If we did, set the corresponding pixel value for the - color and return it. - \i Try to allocate the RGB value. If we succeed, we get a pixel value - that we save in the internal table with the RGB value. - Return the pixel value. - \i The color could not be allocated. Find the closest matching - color, save it in the internal table, and return it. - \endlist - - A color can be set by passing setNamedColor() an RGB string like - "#112233", or a color name, e.g. "blue". The names are taken from - X11's rgb.txt database but can also be used under Windows. To get - a lighter or darker color use light() and dark() respectively. - Colors can also be set using setRgb() and setHsv(). The color - components can be accessed in one go with rgb() and hsv(), or - individually with red(), green() and blue(). - - Use maxColors() and numBitPlanes() to determine the maximum number - of colors and the number of bit planes supported by the underlying - window system, - - If you need to allocate many colors temporarily, for example in an - image viewer application, enterAllocContext(), leaveAllocContext() and - destroyAllocContext() will prove useful. - - \section1 HSV Colors - - Because many people don't know the HSV color model very well, we'll - cover it briefly here. - - The RGB model is hardware-oriented. Its representation is close to - what most monitors show. In contrast, HSV represents color in a way - more suited to the human perception of color. For example, the - relationships "stronger than", "darker than" and "the opposite of" - are easily expressed in HSV but are much harder to express in RGB. - - HSV, like RGB, has three components: - - \list - - \i H, for hue, is either 0-359 if the color is chromatic (not - gray), or meaningless if it is gray. It represents degrees on the - color wheel familiar to most people. Red is 0 (degrees), green is - 120 and blue is 240. - - \i S, for saturation, is 0-255, and the bigger it is, the - stronger the color is. Grayish colors have saturation near 0; very - strong colors have saturation near 255. - - \i V, for value, is 0-255 and represents lightness or brightness - of the color. 0 is black; 255 is as far from black as possible. - - \endlist - - Here are some examples: Pure red is H=0, S=255, V=255. A dark red, - moving slightly towards the magenta, could be H=350 (equivalent to - -10), S=255, V=180. A grayish light red could have H about 0 (say - 350-359 or 0-10), S about 50-100, and S=255. - - TQt returns a hue value of -1 for achromatic colors. If you pass a - too-big hue value, TQt forces it into range. Hue 360 or 720 is - treated as 0; hue 540 is treated as 180. - - \sa TQPalette, TQColorGroup, TQApplication::setColorSpec(), - \link http://www.poynton.com/ColorFAQ.html Color FAQ\endlink -*/ - -/***************************************************************************** - Global colors - *****************************************************************************/ - -#if defined(TQ_WS_WIN) -#define COLOR0_PIX 0x00ffffff -#define COLOR1_PIX 0 -#else -#define COLOR0_PIX 0 -#define COLOR1_PIX 1 -#endif - -#if (defined(TQ_CC_GNU) && defined(TQ_OS_WIN)) -// workaround - bug in mingw -static TQColor stdcol[19] = { - TQColor( 255, 255, 255 ), - TQColor( 0, 0, 0 ), - TQColor( 0, 0, 0 ), - TQColor( 255, 255, 255 ), - TQColor( 128, 128, 128 ), - TQColor( 160, 160, 164 ), - TQColor( 192, 192, 192 ), - TQColor( 255, 0, 0 ), - TQColor( 0, 255, 0 ), - TQColor( 0, 0, 255 ), - TQColor( 0, 255, 255 ), - TQColor( 255, 0, 255 ), - TQColor( 255, 255, 0 ), - TQColor( 128, 0, 0 ), - TQColor( 0, 128, 0 ), - TQColor( 0, 0, 128 ), - TQColor( 0, 128, 128 ), - TQColor( 128, 0, 128 ), - TQColor( 128, 128, 0 ) }; -#else - static TQColor stdcol[19]; -#endif - -TQT_STATIC_CONST_IMPL TQColor & TQt::color0 = stdcol[0]; -TQT_STATIC_CONST_IMPL TQColor & TQt::color1 = stdcol[1]; -TQT_STATIC_CONST_IMPL TQColor & TQt::black = stdcol[2]; -TQT_STATIC_CONST_IMPL TQColor & TQt::white = stdcol[3]; -TQT_STATIC_CONST_IMPL TQColor & TQt::darkGray = stdcol[4]; -TQT_STATIC_CONST_IMPL TQColor & TQt::gray = stdcol[5]; -TQT_STATIC_CONST_IMPL TQColor & TQt::lightGray = stdcol[6]; -TQT_STATIC_CONST_IMPL TQColor & TQt::red = stdcol[7]; -TQT_STATIC_CONST_IMPL TQColor & TQt::green = stdcol[8]; -TQT_STATIC_CONST_IMPL TQColor & TQt::blue = stdcol[9]; -TQT_STATIC_CONST_IMPL TQColor & TQt::cyan = stdcol[10]; -TQT_STATIC_CONST_IMPL TQColor & TQt::magenta = stdcol[11]; -TQT_STATIC_CONST_IMPL TQColor & TQt::yellow = stdcol[12]; -TQT_STATIC_CONST_IMPL TQColor & TQt::darkRed = stdcol[13]; -TQT_STATIC_CONST_IMPL TQColor & TQt::darkGreen = stdcol[14]; -TQT_STATIC_CONST_IMPL TQColor & TQt::darkBlue = stdcol[15]; -TQT_STATIC_CONST_IMPL TQColor & TQt::darkCyan = stdcol[16]; -TQT_STATIC_CONST_IMPL TQColor & TQt::darkMagenta = stdcol[17]; -TQT_STATIC_CONST_IMPL TQColor & TQt::darkYellow = stdcol[18]; - - -/***************************************************************************** - TQColor member functions - *****************************************************************************/ - -bool TQColor::color_init = FALSE; // color system not initialized -bool TQColor::globals_init = FALSE; // global color not initialized -TQColor::ColorModel TQColor::colormodel = d32; - - -TQColor* TQColor::globalColors() -{ - return stdcol; -} - - -/*! - Initializes the global colors. This function is called if a global - color variable is initialized before the constructors for our - global color objects are executed. Without this mechanism, - assigning a color might assign an uninitialized value. - - Example: - \code - TQColor myColor = red; // will initialize red etc. - - int main( int argc, char **argc ) - { - } - \endcode -*/ - -void TQColor::initGlobalColors() -{ - globals_init = TRUE; - - #ifdef TQ_WS_X11 - // HACK: we need a way to recognize color0 and color1 uniquely, so - // that we can use color0 and color1 with fixed pixel values on - // all screens - stdcol[ 0].d.argb = tqRgba(255, 255, 255, 1); - stdcol[ 1].d.argb = tqRgba( 0, 0, 0, 1); - #else - stdcol[ 0].d.argb = tqRgb(255,255,255); - stdcol[ 1].d.argb = 0; - #endif // TQ_WS_X11 - stdcol[ 0].setPixel( COLOR0_PIX ); - stdcol[ 1].setPixel( COLOR1_PIX ); - - // From the "The Palette Manager: How and Why" by Ron Gery, March 23, - // 1992, archived on MSDN: - // The Windows system palette is broken up into two sections, - // one with fixed colors and one with colors that can be changed - // by applications. The system palette predefines 20 entries; - // these colors are known as the static or reserved colors and - // consist of the 16 colors found in the Windows version 3.0 VGA - // driver and 4 additional colors chosen for their visual appeal. - // The DEFAULT_PALETTE stock object is, as the name implies, the - // default palette selected into a tqdevice context (DC) and consists - // of these static colors. Applications can set the remaining 236 - // colors using the Palette Manager. - // The 20 reserved entries have indices in [0,9] and [246,255]. We - // reuse 17 of them. - stdcol[ 2].setRgb( 0, 0, 0 ); // index 0 black - stdcol[ 3].setRgb( 255, 255, 255 ); // index 255 white - stdcol[ 4].setRgb( 128, 128, 128 ); // index 248 medium gray - stdcol[ 5].setRgb( 160, 160, 164 ); // index 247 light gray - stdcol[ 6].setRgb( 192, 192, 192 ); // index 7 light gray - stdcol[ 7].setRgb( 255, 0, 0 ); // index 249 red - stdcol[ 8].setRgb( 0, 255, 0 ); // index 250 green - stdcol[ 9].setRgb( 0, 0, 255 ); // index 252 blue - stdcol[10].setRgb( 0, 255, 255 ); // index 254 cyan - stdcol[11].setRgb( 255, 0, 255 ); // index 253 magenta - stdcol[12].setRgb( 255, 255, 0 ); // index 251 yellow - stdcol[13].setRgb( 128, 0, 0 ); // index 1 dark red - stdcol[14].setRgb( 0, 128, 0 ); // index 2 dark green - stdcol[15].setRgb( 0, 0, 128 ); // index 4 dark blue - stdcol[16].setRgb( 0, 128, 128 ); // index 6 dark cyan - stdcol[17].setRgb( 128, 0, 128 ); // index 5 dark magenta - stdcol[18].setRgb( 128, 128, 0 ); // index 3 dark yellow -} - -/*! - \enum TQColor::Spec - - The type of color specified, either RGB or HSV, e.g. in the - \c{TQColor::TQColor( x, y, z, colorSpec)} constructor. - - \value Rgb - \value Hsv -*/ - - -/*! - \fn TQColor::TQColor() - - Constructs an invalid color with the RGB value (0, 0, 0). An - invalid color is a color that is not properly set up for the - underlying window system. - - The alpha value of an invalid color is unspecified. - - \sa isValid() -*/ - - -/*! - \fn TQColor::TQColor( int r, int g, int b ) - - Constructs a color with the RGB value \a r, \a g, \a b, in the - same way as setRgb(). - - The color is left invalid if any or the arguments are illegal. - - \sa setRgb() -*/ - - -/*! - Constructs a color with the RGB value \a rgb and a custom pixel - value \a pixel. - - If \a pixel == 0xffffffff (the default), then the color uses the - RGB value in a standard way. If \a pixel is something else, then - the pixel value is set directly to \a pixel, skipping the normal - allocation procedure. -*/ - -TQColor::TQColor( TQRgb rgb, uint pixel ) -{ - if ( pixel == 0xffffffff ) { - setRgb( rgb ); - } else { - d.argb = rgb; - setPixel( pixel ); - } -} - -void TQColor::setPixel( uint pixel ) -{ - switch ( colormodel ) { - case d8: - d.d8.direct = TRUE; - d.d8.invalid = FALSE; - d.d8.dirty = FALSE; - d.d8.pix = pixel; - break; - case d32: - d.d32.pix = pixel; - break; - } -} - - -/*! - Constructs a color with the RGB or HSV value \a x, \a y, \a z. - - The arguments are an RGB value if \a colorSpec is TQColor::Rgb. \a - x (red), \a y (green), and \a z (blue). All of them must be in the - range 0-255. - - The arguments are an HSV value if \a colorSpec is TQColor::Hsv. \a - x (hue) must be -1 for achromatic colors and 0-359 for chromatic - colors; \a y (saturation) and \a z (value) must both be in the - range 0-255. - - \sa setRgb(), setHsv() -*/ - -TQColor::TQColor( int x, int y, int z, Spec colorSpec ) -{ - d.d32.argb = Invalid; - d.d32.pix = Dirt; - if ( colorSpec == Hsv ) - setHsv( x, y, z ); - else - setRgb( x, y, z ); -} - - -/*! - Constructs a named color in the same way as setNamedColor() using - name \a name. - - The color is left invalid if \a name cannot be parsed. - - \sa setNamedColor() -*/ - -TQColor::TQColor( const TQString& name ) -{ - setNamedColor( name ); -} - - -/*! - Constructs a named color in the same way as setNamedColor() using - name \a name. - - The color is left invalid if \a name cannot be parsed. - - \sa setNamedColor() -*/ - -TQColor::TQColor( const char *name ) -{ - setNamedColor( TQString(name) ); -} - - - -/*! - Constructs a color that is a copy of \a c. -*/ - -TQColor::TQColor( const TQColor &c ) -{ - if ( !globals_init ) - initGlobalColors(); - d.argb = c.d.argb; - d.d32.pix = c.d.d32.pix; -} - - -/*! - Assigns a copy of the color \a c and returns a reference to this - color. -*/ - -TQColor &TQColor::operator=( const TQColor &c ) -{ - if ( !globals_init ) - initGlobalColors(); - d.argb = c.d.argb; - d.d32.pix = c.d.d32.pix; - return *this; -} - - -/*! - \fn bool TQColor::isValid() const - - Returns FALSE if the color is invalid, i.e. it was constructed using the - default constructor; otherwise returns TRUE. -*/ - -/*! - \internal -*/ -bool TQColor::isDirty() const -{ - if ( colormodel == d8 ) { - return d.d8.dirty; - } else { - return d.d32.probablyDirty(); - } -} - -/*! - Returns the name of the color in the format "#RRGGBB", i.e. a "#" - character followed by three two-digit hexadecimal numbers. - - \sa setNamedColor() -*/ - -TQString TQColor::name() const -{ -#ifndef TQT_NO_SPRINTF - TQString s; - s.sprintf( "#%02x%02x%02x", red(), green(), blue() ); - return s; -#else - char s[20]; - sprintf( s, "#%02x%02x%02x", red(), green(), blue() ); - return TQString(s); -#endif -} - -static int hex2int( TQChar hexchar ) -{ - int v; - if ( hexchar.isDigit() ) - v = hexchar.digitValue(); - else if ( hexchar >= 'A' && hexchar <= 'F' ) - v = hexchar.cell() - 'A' + 10; - else if ( hexchar >= 'a' && hexchar <= 'f' ) - v = hexchar.cell() - 'a' + 10; - else - v = -1; - return v; -} - - -/*! - Sets the RGB value to \a name, which may be in one of these - formats: - \list - \i #RGB (each of R, G and B is a single hex digit) - \i #RRGGBB - \i #RRRGGGBBB - \i #RRRRGGGGBBBB - \i A name from the X color database (rgb.txt) (e.g. - "steelblue" or "gainsboro"). These color names also work - under Windows. - \endlist - - The color is invalid if \a name cannot be parsed. -*/ - -void TQColor::setNamedColor( const TQString &name ) -{ - if ( name.isEmpty() ) { - d.argb = 0; - if ( colormodel == d8 ) { - d.d8.invalid = TRUE; - } else { - d.d32.argb = Invalid; - } - } else if ( name[0] == '#' ) { - const TQChar *p = name.tqunicode()+1; - int len = name.length()-1; - int r, g, b; - if ( len == 12 ) { - r = (hex2int(p[0]) << 4) + hex2int(p[1]); - g = (hex2int(p[4]) << 4) + hex2int(p[5]); - b = (hex2int(p[8]) << 4) + hex2int(p[9]); - } else if ( len == 9 ) { - r = (hex2int(p[0]) << 4) + hex2int(p[1]); - g = (hex2int(p[3]) << 4) + hex2int(p[4]); - b = (hex2int(p[6]) << 4) + hex2int(p[7]); - } else if ( len == 6 ) { - r = (hex2int(p[0]) << 4) + hex2int(p[1]); - g = (hex2int(p[2]) << 4) + hex2int(p[3]); - b = (hex2int(p[4]) << 4) + hex2int(p[5]); - } else if ( len == 3 ) { - r = (hex2int(p[0]) << 4) + hex2int(p[0]); - g = (hex2int(p[1]) << 4) + hex2int(p[1]); - b = (hex2int(p[2]) << 4) + hex2int(p[2]); - } else { - r = g = b = -1; - } - if ( (uint)r > 255 || (uint)g > 255 || (uint)b > 255 ) { - d.d32.argb = Invalid; - d.d32.pix = Dirt; -#if defined(TQT_CHECK_RANGE) - qWarning( "TQColor::setNamedColor: could not parse color '%s'", - name.local8Bit().data() ); -#endif - } else { - setRgb( r, g, b ); - } - } else { - setSystemNamedColor( name ); - } -} - - -#undef max -#undef min - -/*! - \fn void TQColor::getHsv( int &h, int &s, int &v ) const - \obsolete -*/ - -/*! \fn void TQColor::getHsv( int *h, int *s, int *v ) const - - Returns the current RGB value as HSV. The contents of the \a h, \a - s and \a v pointers are set to the HSV values. If any of the three - pointers are null, the function does nothing. - - The hue (which \a h points to) is set to -1 if the color is - achromatic. - - \warning Colors are stored internally as RGB values, so getHSv() - may return slightly different values to those set by setHsv(). - - \sa setHsv(), rgb() -*/ - -/*! \obsolete Use getHsv() instead. - */ -void TQColor::hsv( int *h, int *s, int *v ) const -{ - if ( !h || !s || !v ) - return; - int r = tqRed(d.argb); - int g = tqGreen(d.argb); - int b = tqBlue(d.argb); - uint max = r; // maximum RGB component - int whatmax = 0; // r=>0, g=>1, b=>2 - if ( (uint)g > max ) { - max = g; - whatmax = 1; - } - if ( (uint)b > max ) { - max = b; - whatmax = 2; - } - uint min = r; // find minimum value - if ( (uint)g < min ) min = g; - if ( (uint)b < min ) min = b; - int delta = max-min; - *v = max; // calc value - *s = max ? (510*delta+max)/(2*max) : 0; - if ( *s == 0 ) { - *h = -1; // undefined hue - } else { - switch ( whatmax ) { - case 0: // red is max component - if ( g >= b ) - *h = (120*(g-b)+delta)/(2*delta); - else - *h = (120*(g-b+delta)+delta)/(2*delta) + 300; - break; - case 1: // green is max component - if ( b > r ) - *h = 120 + (120*(b-r)+delta)/(2*delta); - else - *h = 60 + (120*(b-r+delta)+delta)/(2*delta); - break; - case 2: // blue is max component - if ( r > g ) - *h = 240 + (120*(r-g)+delta)/(2*delta); - else - *h = 180 + (120*(r-g+delta)+delta)/(2*delta); - break; - } - } -} - - -/*! - Sets a HSV color value. \a h is the hue, \a s is the saturation - and \a v is the value of the HSV color. - - If \a s or \a v are not in the range 0-255, or \a h is < -1, the - color is not changed. - - \warning Colors are stored internally as RGB values, so getHSv() - may return slightly different values to those set by setHsv(). - - \sa hsv(), setRgb() -*/ - -void TQColor::setHsv( int h, int s, int v ) -{ - if ( h < -1 || (uint)s > 255 || (uint)v > 255 ) { -#if defined(TQT_CHECK_RANGE) - qWarning( "TQColor::setHsv: HSV parameters out of range" ); -#endif - return; - } - int r=v, g=v, b=v; - if ( s == 0 || h == -1 ) { // achromatic case - // Ignore - } else { // chromatic case - if ( (uint)h >= 360 ) - h %= 360; - uint f = h%60; - h /= 60; - uint p = (uint)(2*v*(255-s)+255)/510; - uint q, t; - if ( h&1 ) { - q = (uint)(2*v*(15300-s*f)+15300)/30600; - switch( h ) { - case 1: r=(int)q; g=(int)v, b=(int)p; break; - case 3: r=(int)p; g=(int)q, b=(int)v; break; - case 5: r=(int)v; g=(int)p, b=(int)q; break; - } - } else { - t = (uint)(2*v*(15300-(s*(60-f)))+15300)/30600; - switch( h ) { - case 0: r=(int)v; g=(int)t, b=(int)p; break; - case 2: r=(int)p; g=(int)v, b=(int)t; break; - case 4: r=(int)t; g=(int)p, b=(int)v; break; - } - } - } - setRgb( r, g, b ); -} - - -/*! - \fn TQRgb TQColor::rgb() const - - Returns the RGB value. - - The return type \e TQRgb is equivalent to \c unsigned \c int. - - For an invalid color, the alpha value of the returned color is - unspecified. - - \sa setRgb(), hsv(), tqRed(), tqBlue(), tqGreen(), isValid() -*/ - -/*! \fn void TQColor::getRgb( int *r, int *g, int *b ) const - - Sets the contents pointed to by \a r, \a g and \a b to the red, - green and blue components of the RGB value respectively. The value - range for a component is 0..255. - - \sa rgb(), setRgb(), getHsv() -*/ - -/*! \obsolete Use getRgb() instead */ -void TQColor::rgb( int *r, int *g, int *b ) const -{ - *r = tqRed(d.argb); - *g = tqGreen(d.argb); - *b = tqBlue(d.argb); -} - - -/*! - Sets the RGB value to \a r, \a g, \a b. The arguments, \a r, \a g - and \a b must all be in the range 0..255. If any of them are - outside the legal range, the color is not changed. - - \sa rgb(), setHsv() -*/ - -void TQColor::setRgb( int r, int g, int b ) -{ - if ( (uint)r > 255 || (uint)g > 255 || (uint)b > 255 ) { -#if defined(TQT_CHECK_RANGE) - qWarning( "TQColor::setRgb: RGB parameter(s) out of range" ); -#endif - return; - } - d.argb = tqRgb( r, g, b ); - if ( colormodel == d8 ) { - d.d8.invalid = FALSE; - d.d8.direct = FALSE; - d.d8.dirty = TRUE; - } else { - d.d32.pix = Dirt; - } -} - - -/*! - \overload - Sets the RGB value to \a rgb. - - The type \e TQRgb is equivalent to \c unsigned \c int. - - \sa rgb(), setHsv() -*/ - -void TQColor::setRgb( TQRgb rgb ) -{ - d.argb = rgb; - if ( colormodel == d8 ) { - d.d8.invalid = FALSE; - d.d8.direct = FALSE; - d.d8.dirty = TRUE; - } else { - d.d32.pix = Dirt; - } -} - -/*! - \fn int TQColor::red() const - - Returns the R (red) component of the RGB value. -*/ - - -/*! - \fn int TQColor::green() const - - Returns the G (green) component of the RGB value. -*/ - -/*! - \fn int TQColor::blue() const - - Returns the B (blue) component of the RGB value. -*/ - - -/*! - Returns a lighter (or darker) color, but does not change this - object. - - Returns a lighter color if \a factor is greater than 100. Setting - \a factor to 150 returns a color that is 50% brighter. - - Returns a darker color if \a factor is less than 100. We recommend - using dark() for this purpose. If \a factor is 0 or negative, the - return value is unspecified. - - (This function converts the current RGB color to HSV, multiplies V - by \a factor, and converts the result back to RGB.) - - \sa dark() -*/ - -TQColor TQColor::light( int factor ) const -{ - if ( factor <= 0 ) // invalid lightness factor - return *this; - else if ( factor < 100 ) // makes color darker - return dark( 10000/factor ); - - int h, s, v; - hsv( &h, &s, &v ); - v = (factor*v)/100; - if ( v > 255 ) { // overflow - s -= v-255; // adjust saturation - if ( s < 0 ) - s = 0; - v = 255; - } - TQColor c; - c.setHsv( h, s, v ); - return c; -} - - -/*! - Returns a darker (or lighter) color, but does not change this - object. - - Returns a darker color if \a factor is greater than 100. Setting - \a factor to 300 returns a color that has one-third the - brightness. - - Returns a lighter color if \a factor is less than 100. We - recommend using lighter() for this purpose. If \a factor is 0 or - negative, the return value is unspecified. - - (This function converts the current RGB color to HSV, divides V by - \a factor and converts back to RGB.) - - \sa light() -*/ - -TQColor TQColor::dark( int factor ) const -{ - if ( factor <= 0 ) // invalid darkness factor - return *this; - else if ( factor < 100 ) // makes color lighter - return light( 10000/factor ); - int h, s, v; - hsv( &h, &s, &v ); - v = (v*100)/factor; - TQColor c; - c.setHsv( h, s, v ); - return c; -} - - -/*! - \fn bool TQColor::operator==( const TQColor &c ) const - - Returns TRUE if this color has the same RGB value as \a c; - otherwise returns FALSE. -*/ - -/*! - \fn bool TQColor::operator!=( const TQColor &c ) const - Returns TRUE if this color has a different RGB value from \a c; - otherwise returns FALSE. -*/ - -/*! - Returns the pixel value. - - This value is used by the underlying window system to refer to a - color. It can be thought of as an index into the display - hardware's color table, but the value is an arbitrary 32-bit - value. - - \sa alloc() -*/ -uint TQColor::pixel() const -{ - if ( isDirty() ) - return ((TQColor*)this)->alloc(); - else if ( colormodel == d8 ) -#ifdef TQ_WS_WIN - // since d.d8.pix is uchar we have to use the PALETTEINDEX - // macro to get the respective palette entry index. - return (0x01000000 | (int)(short)(d.d8.pix)); -#else - return d.d8.pix; -#endif - else - return d.d32.pix; -} - -/*! - \fn TQStringList TQColor::colorNames() - Returns a TQStringList containing the color names TQt knows about. -*/ - -/***************************************************************************** - TQColor stream functions - *****************************************************************************/ -#ifndef TQT_NO_DATASTREAM -/*! - \relates TQColor - Writes a color object, \a c to the stream, \a s. - - \sa \link datastreamformat.html Format of the TQDataStream operators \endlink -*/ - -TQDataStream &operator<<( TQDataStream &s, const TQColor &c ) -{ - TQ_UINT32 p = (TQ_UINT32)c.rgb(); - if ( s.version() == 1 ) // Swap red and blue - p = ((p << 16) & 0xff0000) | ((p >> 16) & 0xff) | (p & 0xff00ff00); - return s << p; -} - -/*! - \relates TQColor - Reads a color object, \a c, from the stream, \a s. - - \sa \link datastreamformat.html Format of the TQDataStream operators \endlink -*/ - -TQDataStream &operator>>( TQDataStream &s, TQColor &c ) -{ - TQ_UINT32 p; - s >> p; - if ( s.version() == 1 ) // Swap red and blue - p = ((p << 16) & 0xff0000) | ((p >> 16) & 0xff) | (p & 0xff00ff00); - c.setRgb( p ); - return s; -} -#endif - -/***************************************************************************** - TQColor global functions (documentation only) - *****************************************************************************/ - -/*! - \fn int tqRed( TQRgb rgb ) - \relates TQColor - - Returns the red component of the RGB triplet \a rgb. - \sa tqRgb(), TQColor::red() -*/ - -/*! - \fn int tqGreen( TQRgb rgb ) - \relates TQColor - - Returns the green component of the RGB triplet \a rgb. - \sa tqRgb(), TQColor::green() -*/ - -/*! - \fn int tqBlue( TQRgb rgb ) - \relates TQColor - - Returns the blue component of the RGB triplet \a rgb. - \sa tqRgb(), TQColor::blue() -*/ - -/*! - \fn int tqAlpha( TQRgb rgba ) - \relates TQColor - - Returns the alpha component of the RGBA quadruplet \a rgba. - */ - -/*! - \fn TQRgb tqRgb( int r, int g, int b ) - \relates TQColor - - Returns the RGB triplet \a (r,g,b). - - The return type TQRgb is equivalent to \c unsigned \c int. - - \sa tqRgba(), tqRed(), tqGreen(), tqBlue() -*/ - -/*! - \fn TQRgb tqRgba( int r, int g, int b, int a ) - \relates TQColor - - Returns the RGBA quadruplet \a (r,g,b,a). - - The return type TQRgba is equivalent to \c unsigned \c int. - - \sa tqRgb(), tqRed(), tqGreen(), tqBlue() -*/ - -/*! - \fn int tqGray( int r, int g, int b ) - \relates TQColor - - Returns a gray value 0..255 from the (\a r, \a g, \a b) triplet. - - The gray value is calculated using the formula (r*11 + g*16 + - b*5)/32. -*/ - -/*! - \overload int tqGray( tqRgb rgb ) - \relates TQColor - - Returns a gray value 0..255 from the given \a rgb colour. -*/ - -#endif // USE_QT4
\ No newline at end of file |