]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/colour.h
Make storing non-trivial data in wxThreadSpecificInfo possible.
[wxWidgets.git] / interface / wx / colour.h
index a51c5a58502ace86e100af5f744f389eb2ee3f56..09c1c242a6ee48cf8a38a1c0e176283cd6d82a54 100644 (file)
@@ -2,10 +2,27 @@
 // Name:        colour.h
 // Purpose:     interface of wxColour
 // Author:      wxWidgets team
-// RCS-ID:      $Id$
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
+
+
+/**
+    Flags for wxColour -> wxString conversion (see wxColour::GetAsString).
+
+    @{
+*/
+enum {
+    wxC2S_NAME             = 1,   // return colour name, when possible
+    wxC2S_CSS_SYNTAX       = 2,   // return colour in rgb(r,g,b) syntax
+    wxC2S_HTML_SYNTAX      = 4    // return colour in #rrggbb syntax
+};
+
+//@}
+
+const unsigned char wxALPHA_TRANSPARENT = 0;
+const unsigned char wxALPHA_OPAQUE = 0xff;
+
 /**
     @class wxColour
 
 
     @stdobjects
     - ::wxNullColour - An empty, invalid colour.
+    - ::wxTransparentColour - Valid but fully transparent colour (new in 2.9.1).
     - ::wxBLACK
     - ::wxBLUE
     - ::wxCYAN
     - ::wxGREEN
+    - ::wxYELLOW
     - ::wxLIGHT_GREY
     - ::wxRED
     - ::wxWHITE
@@ -62,6 +81,12 @@ public:
     */
     wxColour(const wxString& colourName);
 
+    /**
+        @param colRGB
+            A packed RGB value.
+    */
+    wxColour(unsigned long colRGB);
+    
     /**
         Copy constructor.
     */
@@ -71,67 +96,102 @@ public:
         Returns the alpha value, on platforms where alpha is not yet supported, this
         always returns wxALPHA_OPAQUE.
     */
-    unsigned char Alpha() const;
+    virtual unsigned char Alpha() const;
 
     /**
         Returns the blue intensity.
     */
-    unsigned char Blue() const;
+    virtual unsigned char Blue() const;
 
     /**
         Converts this colour to a wxString using the given flags.
 
-        The supported flags are wxC2S_NAME, to obtain the colour name (e.g.
-        wxColour(255,0,0) == "red"), 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 wxC2S_HTML_SYNTAX,
-        to obtain the colour as "#" followed by 6 hexadecimal digits (e.g.
-        wxColour(255,0,0) == "#FF0000").
+        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").
 
         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
-        wxC2S_CSS_SYNTAX (which is the only one supporting alpha) is not
+        @c wxC2S_CSS_SYNTAX (which is the only one supporting alpha) is not
         specified in flags.
 
         @since 2.7.0
     */
-    wxString GetAsString(long flags);
+    virtual wxString GetAsString(long flags = wxC2S_NAME | wxC2S_CSS_SYNTAX) const;
 
+    //@{
     /**
-        Returns a pixel value which is platform-dependent. On Windows, a COLORREF is
-        returned.
+        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;
+    //@}
+
+    /**
+        Returns a pixel value which is platform-dependent.
+        On Windows, a COLORREF is returned.
         On X, an allocated pixel value is returned.
-        -1 is returned if the pixel is invalid (on X, unallocated).
+        If the pixel is invalid (on X, unallocated), @c -1 is returned.
     */
-    long GetPixel() const;
+    wxIntPtr GetPixel() const;
 
     /**
         Returns the green intensity.
     */
-    unsigned char Green() const;
+    virtual unsigned char Green() const;
 
     /**
         Returns @true if the colour object is valid (the colour has been initialised
         with RGB values).
     */
-    bool IsOk() const;
+    virtual bool IsOk() const;
 
     /**
         Returns the red intensity.
     */
-    unsigned char Red() const;
+    virtual unsigned char Red() const;
 
     //@{
     /**
         Sets the RGB intensity values using the given values (first overload),
         extracting them from the packed long (second overload), using the given
-        string (third overloard).
+        string (third overload).
 
         When using third form, Set() accepts: colour names (those listed in
-        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).
+        wxColourDatabase), the CSS-like @c "rgb(r,g,b)" or @c "rgba(r,g,b,a)" syntax 
+        (case insensitive) and the HTML-like syntax: @c "#" followed by 6 hexadecimal 
+        digits for red, green, blue components.
 
         Returns @true if the conversion was successful, @false otherwise.
 
@@ -148,33 +208,89 @@ public:
         Tests the inequality of two colours by comparing individual red, green, blue
         colours and alpha values.
     */
-    bool operator !=(const wxColour& colour);
+    bool operator !=(const wxColour& colour) const;
 
-    //@{
     /**
         Assignment operator, using a colour name to be found in the colour database.
 
         @see wxColourDatabase
     */
-    wxColour operator =(const wxColour& colour);
-    wxColour operator =(const wxString& colourName);
-    //@}
+    wxColour& operator=(const wxColour& colour);
 
     /**
         Tests the equality of two colours by comparing individual red, green, blue
         colours and alpha values.
     */
-    bool operator ==(const wxColour& colour);
+    bool operator ==(const wxColour& colour) const;
+
+    /**
+        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);
+
+    /**
+        Make a disabled version of this colour.
+
+        This method modifies the object in place and returns the object itself.
+
+        @since 2.9.5
+     */
+    wxColour& MakeDisabled(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;
 };
 
 
 /** @name Predefined colors. */
 //@{
 wxColour wxNullColour;
+wxColour wxTransparentColour;
 wxColour* wxBLACK;
 wxColour* wxBLUE;
 wxColour* wxCYAN;
 wxColour* wxGREEN;
+wxColour* wxYELLOW;
 wxColour* wxLIGHT_GREY;
 wxColour* wxRED;
 wxColour* wxWHITE;
@@ -186,7 +302,7 @@ wxColour* wxWHITE;
 // Global functions/macros
 // ============================================================================
 
-/** @ingroup group_funcmacro_misc */
+/** @addtogroup group_funcmacro_misc */
 //@{
 
 /**