2008-03-08 08:52:38 -05:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: colour.h
|
2008-03-10 11:24:38 -04:00
|
|
|
// Purpose: interface of wxColour
|
2008-03-08 08:52:38 -05:00
|
|
|
// Author: wxWidgets team
|
|
|
|
// RCS-ID: $Id$
|
2010-07-13 09:29:13 -04:00
|
|
|
// Licence: wxWindows licence
|
2008-03-08 08:52:38 -05:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2008-09-24 19:29:43 -04:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
Flags for wxColour -> wxString conversion (see wxColour::GetAsString).
|
|
|
|
|
|
|
|
@{
|
|
|
|
*/
|
|
|
|
#define wxC2S_NAME 1 //!< Return colour name, when possible.
|
2008-09-25 10:07:25 -04:00
|
|
|
#define wxC2S_CSS_SYNTAX 2 //!< Return colour in "rgb(r,g,b)" syntax.
|
|
|
|
#define wxC2S_HTML_SYNTAX 4 //!< Return colour in "#rrggbb" syntax.
|
2008-09-24 19:29:43 -04:00
|
|
|
|
|
|
|
//@}
|
|
|
|
|
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
/**
|
|
|
|
@class wxColour
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-23 14:24:32 -04:00
|
|
|
A colour is an object representing a combination of Red, Green, and Blue
|
|
|
|
(RGB) intensity values, and is used to determine drawing colours. See the
|
|
|
|
entry for wxColourDatabase for how a pointer to a predefined, named colour
|
|
|
|
may be returned instead of creating a new colour.
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
Valid RGB values are in the range 0 to 255.
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
You can retrieve the current system colour settings with wxSystemSettings.
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
@library{wxcore}
|
|
|
|
@category{gdi}
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
@stdobjects
|
2008-04-09 22:57:09 -04:00
|
|
|
- ::wxNullColour - An empty, invalid colour.
|
2010-04-05 07:44:33 -04:00
|
|
|
- ::wxTransparentColour - Valid but fully transparent colour (new in 2.9.1).
|
2008-04-09 22:57:09 -04:00
|
|
|
- ::wxBLACK
|
|
|
|
- ::wxBLUE
|
|
|
|
- ::wxCYAN
|
|
|
|
- ::wxGREEN
|
2009-05-09 08:40:09 -04:00
|
|
|
- ::wxYELLOW
|
2008-04-09 22:57:09 -04:00
|
|
|
- ::wxLIGHT_GREY
|
|
|
|
- ::wxRED
|
|
|
|
- ::wxWHITE
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-10 11:24:38 -04:00
|
|
|
@see wxColourDatabase, wxPen, wxBrush, wxColourDialog, wxSystemSettings
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
|
|
|
class wxColour : public wxObject
|
|
|
|
{
|
|
|
|
public:
|
2008-03-23 14:24:32 -04:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
/**
|
2008-03-23 14:24:32 -04:00
|
|
|
Default constructor.
|
|
|
|
*/
|
|
|
|
wxColour();
|
2008-03-20 09:45:17 -04:00
|
|
|
|
2008-03-23 14:24:32 -04:00
|
|
|
/**
|
2008-03-08 09:43:31 -05:00
|
|
|
@param red
|
2008-03-09 08:33:59 -04:00
|
|
|
The red value.
|
2008-03-08 09:43:31 -05:00
|
|
|
@param green
|
2008-03-09 08:33:59 -04:00
|
|
|
The green value.
|
2008-03-08 09:43:31 -05:00
|
|
|
@param blue
|
2008-03-09 08:33:59 -04:00
|
|
|
The blue value.
|
2008-03-08 09:43:31 -05:00
|
|
|
@param alpha
|
2008-03-23 14:24:32 -04:00
|
|
|
The alpha value. Alpha values range from 0 (wxALPHA_TRANSPARENT) to
|
|
|
|
255 (wxALPHA_OPAQUE).
|
|
|
|
*/
|
|
|
|
wxColour(unsigned char red, unsigned char green, unsigned char blue,
|
|
|
|
unsigned char alpha = wxALPHA_OPAQUE);
|
|
|
|
|
|
|
|
/**
|
2008-03-08 09:43:31 -05:00
|
|
|
@param colourName
|
2008-03-09 08:33:59 -04:00
|
|
|
The colour name.
|
2008-03-23 14:24:32 -04:00
|
|
|
*/
|
|
|
|
wxColour(const wxString& colourName);
|
2008-03-20 09:45:17 -04:00
|
|
|
|
2008-03-23 14:24:32 -04:00
|
|
|
/**
|
|
|
|
Copy constructor.
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
2008-03-08 09:43:31 -05:00
|
|
|
wxColour(const wxColour& colour);
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the alpha value, on platforms where alpha is not yet supported, this
|
|
|
|
always returns wxALPHA_OPAQUE.
|
|
|
|
*/
|
2008-09-22 15:01:17 -04:00
|
|
|
virtual unsigned char Alpha() const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the blue intensity.
|
|
|
|
*/
|
2008-09-22 15:01:17 -04:00
|
|
|
virtual unsigned char Blue() const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
2008-03-23 14:24:32 -04:00
|
|
|
Converts this colour to a wxString using the given flags.
|
|
|
|
|
2008-09-24 19:29:43 -04:00
|
|
|
The supported flags are @c wxC2S_NAME, to obtain the colour name
|
|
|
|
(e.g. wxColour(255,0,0) == "red"), @c wxC2S_CSS_SYNTAX, to obtain
|
|
|
|
the colour in the "rgb(r,g,b)" or "rgba(r,g,b,a)" syntax
|
|
|
|
(e.g. wxColour(255,0,0,85) == "rgba(255,0,0,0.333)"), and
|
|
|
|
@c wxC2S_HTML_SYNTAX, to obtain the colour as "#" followed by 6
|
|
|
|
hexadecimal digits (e.g. wxColour(255,0,0) == "#FF0000").
|
2008-03-23 14:24:32 -04:00
|
|
|
|
|
|
|
This function never fails and always returns a non-empty string but
|
|
|
|
asserts if the colour has alpha channel (i.e. is non opaque) but
|
2008-09-24 19:29:43 -04:00
|
|
|
@c wxC2S_CSS_SYNTAX (which is the only one supporting alpha) is not
|
2008-03-08 08:52:38 -05:00
|
|
|
specified in flags.
|
2008-03-20 09:45:17 -04:00
|
|
|
|
2008-04-21 06:34:23 -04:00
|
|
|
@since 2.7.0
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
2008-09-24 19:29:43 -04:00
|
|
|
virtual wxString GetAsString(long flags = wxC2S_NAME | wxC2S_CSS_SYNTAX) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
2009-09-19 12:29:50 -04:00
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Sets the RGB or RGBA colour values from a single 32 bit value.
|
|
|
|
|
|
|
|
The arguments @a colRGB and @a colRGBA should be of the form 0x00BBGGRR
|
|
|
|
and 0xAABBGGRR respectively where @c 0xRR, @c 0xGG, @c 0xBB and @c 0xAA
|
|
|
|
are the values of the red, blue, green and alpha components.
|
|
|
|
|
|
|
|
Notice the right-to-left order of components!
|
|
|
|
|
|
|
|
@see GetRGB(), GetRGBA()
|
|
|
|
|
|
|
|
@since 2.9.1
|
|
|
|
*/
|
|
|
|
void SetRGB(wxUint32 colRGB);
|
|
|
|
void SetRGBA(wxUint32 colRGBA);
|
|
|
|
//@}
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Gets the RGB or RGBA colour values as a single 32 bit value.
|
|
|
|
|
|
|
|
The returned value is of the same form as expected by SetRGB() and
|
|
|
|
SetRGBA().
|
|
|
|
|
|
|
|
Notice that GetRGB() returns the value with 0 as its highest byte
|
|
|
|
independently of the value actually returned by Alpha(). So for a fully
|
|
|
|
opaque colour, the return value of GetRGBA() is @c 0xFFBBGGRR while
|
|
|
|
that of GetRGB() is @c 0x00BBGGRR.
|
|
|
|
|
|
|
|
@since 2.9.1
|
|
|
|
*/
|
|
|
|
wxUint32 GetRGB() const;
|
|
|
|
wxUint32 GetRGBA() const;
|
|
|
|
//@}
|
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
/**
|
2008-09-24 19:29:43 -04:00
|
|
|
Returns a pixel value which is platform-dependent.
|
|
|
|
On Windows, a COLORREF is returned.
|
2008-03-08 08:52:38 -05:00
|
|
|
On X, an allocated pixel value is returned.
|
2008-09-24 19:29:43 -04:00
|
|
|
If the pixel is invalid (on X, unallocated), @c -1 is returned.
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
2008-09-24 19:29:43 -04:00
|
|
|
int GetPixel() const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the green intensity.
|
|
|
|
*/
|
2008-09-22 15:01:17 -04:00
|
|
|
virtual unsigned char Green() const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Returns @true if the colour object is valid (the colour has been initialised
|
|
|
|
with RGB values).
|
|
|
|
*/
|
2008-10-13 07:09:56 -04:00
|
|
|
virtual bool IsOk() const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the red intensity.
|
|
|
|
*/
|
2008-09-22 15:01:17 -04:00
|
|
|
virtual unsigned char Red() const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Sets the RGB intensity values using the given values (first overload),
|
2008-03-23 14:24:32 -04:00
|
|
|
extracting them from the packed long (second overload), using the given
|
|
|
|
string (third overloard).
|
|
|
|
|
2008-03-08 09:43:31 -05:00
|
|
|
When using third form, Set() accepts: colour names (those listed in
|
2008-03-23 14:24:32 -04:00
|
|
|
wxTheColourDatabase()), the CSS-like @c "rgb(r,g,b)" or
|
|
|
|
@c "rgba(r,g,b,a)" syntax (case insensitive) and the HTML-like syntax
|
|
|
|
(i.e. @c "#" followed by 6 hexadecimal digits for red, green, blue
|
|
|
|
components).
|
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
Returns @true if the conversion was successful, @false otherwise.
|
2008-03-20 09:45:17 -04:00
|
|
|
|
2008-04-21 06:34:23 -04:00
|
|
|
@since 2.7.0
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
|
|
|
void Set(unsigned char red, unsigned char green,
|
|
|
|
unsigned char blue,
|
2008-03-09 08:33:59 -04:00
|
|
|
unsigned char alpha = wxALPHA_OPAQUE);
|
2008-03-08 09:43:31 -05:00
|
|
|
void Set(unsigned long RGB);
|
2008-03-09 08:33:59 -04:00
|
|
|
bool Set(const wxString& str);
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Tests the inequality of two colours by comparing individual red, green, blue
|
|
|
|
colours and alpha values.
|
|
|
|
*/
|
2008-09-24 19:29:43 -04:00
|
|
|
bool operator !=(const wxColour& colour) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Assignment operator, using a colour name to be found in the colour database.
|
2008-03-20 09:45:17 -04:00
|
|
|
|
2008-03-09 08:33:59 -04:00
|
|
|
@see wxColourDatabase
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
2009-01-10 17:42:09 -05:00
|
|
|
wxColour& operator=(const wxColour& colour);
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Tests the equality of two colours by comparing individual red, green, blue
|
|
|
|
colours and alpha values.
|
|
|
|
*/
|
2008-09-24 19:29:43 -04:00
|
|
|
bool operator ==(const wxColour& colour) const;
|
2009-09-24 16:05:33 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
Assign 0 or 255 to rgb out parameters.
|
|
|
|
@since 2.9.0
|
|
|
|
*/
|
|
|
|
static void MakeMono(unsigned char* r, unsigned char* g, unsigned char* b, bool on);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Create a disabled (dimmed) colour from (in/out) rgb parameters.
|
|
|
|
@since 2.9.0
|
|
|
|
*/
|
|
|
|
static void MakeDisabled(unsigned char* r, unsigned char* g, unsigned char* b, unsigned char brightness = 255);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Create a grey colour from (in/out) rgb parameters using integer arithmetic.
|
|
|
|
@since 2.9.0
|
|
|
|
*/
|
|
|
|
static void MakeGrey(unsigned char* r, unsigned char* g, unsigned char* b);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Create a grey colour from (in/out) rgb parameters using floating point arithmetic.
|
|
|
|
Defaults to using the standard ITU-T BT.601 when converting to YUV, where every pixel equals
|
|
|
|
(R * @a weight_r) + (G * @a weight_g) + (B * @a weight_b).
|
|
|
|
@since 2.9.0
|
|
|
|
*/
|
|
|
|
static void MakeGrey(unsigned char* r, unsigned char* g, unsigned char* b,
|
|
|
|
double weight_r, double weight_g, double weight_b);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Blend colour, taking alpha into account.
|
|
|
|
@since 2.9.0
|
|
|
|
*/
|
|
|
|
static unsigned char AlphaBlend(unsigned char fg, unsigned char bg, double alpha);
|
|
|
|
|
|
|
|
/**
|
|
|
|
ChangeLightness() is a utility function that simply darkens
|
|
|
|
or lightens a color, based on the specified percentage
|
|
|
|
ialpha of 0 would be completely black, 200 completely white
|
|
|
|
an ialpha of 100 returns the same colour
|
|
|
|
@since 2.9.0
|
|
|
|
*/
|
|
|
|
static void ChangeLightness(unsigned char* r, unsigned char* g, unsigned char* b, int ialpha);
|
|
|
|
|
|
|
|
/**
|
|
|
|
wxColour wrapper for ChangeLightness(r,g,b,ialpha).
|
|
|
|
@since 2.9.0
|
|
|
|
*/
|
|
|
|
wxColour ChangeLightness(int ialpha) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
};
|
2008-03-10 11:24:38 -04:00
|
|
|
|
|
|
|
|
2008-04-09 22:57:09 -04:00
|
|
|
/** @name Predefined colors. */
|
|
|
|
//@{
|
2008-03-10 11:24:38 -04:00
|
|
|
wxColour wxNullColour;
|
2010-06-06 07:35:11 -04:00
|
|
|
wxColour wxTransparentColour;
|
2008-04-09 22:57:09 -04:00
|
|
|
wxColour* wxBLACK;
|
|
|
|
wxColour* wxBLUE;
|
|
|
|
wxColour* wxCYAN;
|
|
|
|
wxColour* wxGREEN;
|
2009-05-09 08:40:09 -04:00
|
|
|
wxColour* wxYELLOW;
|
2008-04-09 22:57:09 -04:00
|
|
|
wxColour* wxLIGHT_GREY;
|
|
|
|
wxColour* wxRED;
|
|
|
|
wxColour* wxWHITE;
|
|
|
|
//@}
|
2008-03-10 11:24:38 -04:00
|
|
|
|
|
|
|
|
2008-03-23 14:24:32 -04:00
|
|
|
|
|
|
|
// ============================================================================
|
|
|
|
// Global functions/macros
|
|
|
|
// ============================================================================
|
|
|
|
|
2009-01-05 15:48:06 -05:00
|
|
|
/** @addtogroup group_funcmacro_misc */
|
2008-03-23 14:24:32 -04:00
|
|
|
//@{
|
|
|
|
|
|
|
|
/**
|
|
|
|
Converts string to a wxColour best represented by the given string. Returns
|
|
|
|
@true on success.
|
|
|
|
|
|
|
|
@see wxToString(const wxColour&)
|
|
|
|
|
|
|
|
@header{wx/colour.h}
|
|
|
|
*/
|
|
|
|
bool wxFromString(const wxString& string, wxColour* colour);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Converts the given wxColour into a string.
|
|
|
|
|
|
|
|
@see wxFromString(const wxString&, wxColour*)
|
|
|
|
|
|
|
|
@header{wx/colour.h}
|
|
|
|
*/
|
|
|
|
wxString wxToString(const wxColour& colour);
|
|
|
|
|
|
|
|
//@}
|
|
|
|
|