| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/colour.h
- // Purpose: wxColourBase definition
- // Author: Julian Smart
- // Modified by: Francesco Montorsi
- // Created:
- // Copyright: Julian Smart
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_COLOUR_H_BASE_
- #define _WX_COLOUR_H_BASE_
- #include "wx/defs.h"
- #include "wx/gdiobj.h"
- class WXDLLIMPEXP_FWD_CORE wxColour;
- // A macro to define the standard wxColour constructors:
- //
- // It avoids the need to repeat these lines across all colour.h files, since
- // Set() is a virtual function and thus cannot be called by wxColourBase ctors
- #define DEFINE_STD_WXCOLOUR_CONSTRUCTORS \
- wxColour() { Init(); } \
- wxColour(ChannelType red, \
- ChannelType green, \
- ChannelType blue, \
- ChannelType alpha = wxALPHA_OPAQUE) \
- { Init(); Set(red, green, blue, alpha); } \
- wxColour(unsigned long colRGB) { Init(); Set(colRGB ); } \
- wxColour(const wxString& colourName) { Init(); Set(colourName); } \
- wxColour(const char *colourName) { Init(); Set(colourName); } \
- wxColour(const wchar_t *colourName) { Init(); Set(colourName); }
- // 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;
- // a valid but fully transparent colour
- #define wxTransparentColour wxColour(0, 0, 0, wxALPHA_TRANSPARENT)
- #define wxTransparentColor wxTransparentColour
- // ----------------------------------------------------------------------------
- // wxVariant support
- // ----------------------------------------------------------------------------
- #if wxUSE_VARIANT
- #include "wx/variant.h"
- DECLARE_VARIANT_OBJECT_EXPORTED(wxColour,WXDLLIMPEXP_CORE)
- #endif
- //-----------------------------------------------------------------------------
- // wxColourBase: this class has no data members, just some functions to avoid
- // code redundancy in all native wxColour implementations
- //-----------------------------------------------------------------------------
- /* Transition from wxGDIObject to wxObject is incomplete. If your port does
- not need the wxGDIObject machinery to handle colors, please add it to the
- list of ports which do not need it.
- */
- #if defined( __WXMAC__ ) || defined( __WXMSW__ ) || defined( __WXPM__ ) || defined( __WXCOCOA__ )
- #define wxCOLOUR_IS_GDIOBJECT 0
- #else
- #define wxCOLOUR_IS_GDIOBJECT 1
- #endif
- class WXDLLIMPEXP_CORE wxColourBase : public
- #if wxCOLOUR_IS_GDIOBJECT
- wxGDIObject
- #else
- wxObject
- #endif
- {
- public:
- // type of a single colour component
- typedef unsigned char ChannelType;
- wxColourBase() {}
- virtual ~wxColourBase() {}
- // Set() functions
- // ---------------
- void Set(ChannelType red,
- ChannelType green,
- ChannelType blue,
- ChannelType alpha = wxALPHA_OPAQUE)
- { InitRGBA(red, green, blue, alpha); }
- // implemented in colourcmn.cpp
- bool Set(const wxString &str)
- { return FromString(str); }
- void Set(unsigned long colRGB)
- {
- // we don't need to know sizeof(long) here because we assume that the three
- // least significant bytes contain the R, G and B values
- Set((ChannelType)(0xFF & colRGB),
- (ChannelType)(0xFF & (colRGB >> 8)),
- (ChannelType)(0xFF & (colRGB >> 16)));
- }
- // accessors
- // ---------
- virtual ChannelType Red() const = 0;
- virtual ChannelType Green() const = 0;
- virtual ChannelType Blue() const = 0;
- virtual ChannelType Alpha() const
- { return wxALPHA_OPAQUE ; }
- // implemented in colourcmn.cpp
- virtual wxString GetAsString(long flags = wxC2S_NAME | wxC2S_CSS_SYNTAX) const;
- void SetRGB(wxUint32 colRGB)
- {
- Set((ChannelType)(0xFF & colRGB),
- (ChannelType)(0xFF & (colRGB >> 8)),
- (ChannelType)(0xFF & (colRGB >> 16)));
- }
- void SetRGBA(wxUint32 colRGBA)
- {
- Set((ChannelType)(0xFF & colRGBA),
- (ChannelType)(0xFF & (colRGBA >> 8)),
- (ChannelType)(0xFF & (colRGBA >> 16)),
- (ChannelType)(0xFF & (colRGBA >> 24)));
- }
- wxUint32 GetRGB() const
- { return Red() | (Green() << 8) | (Blue() << 16); }
- wxUint32 GetRGBA() const
- { return Red() | (Green() << 8) | (Blue() << 16) | (Alpha() << 24); }
- #if !wxCOLOUR_IS_GDIOBJECT
- virtual bool IsOk() const= 0;
- // older version, for backwards compatibility only (but not deprecated
- // because it's still widely used)
- bool Ok() const { return IsOk(); }
- #endif
- // manipulation
- // ------------
- // These methods are static because they are mostly used
- // within tight loops (where we don't want to instantiate wxColour's)
- static void MakeMono (unsigned char* r, unsigned char* g, unsigned char* b, bool on);
- static void MakeDisabled(unsigned char* r, unsigned char* g, unsigned char* b, unsigned char brightness = 255);
- static void MakeGrey (unsigned char* r, unsigned char* g, unsigned char* b); // integer version
- static void MakeGrey (unsigned char* r, unsigned char* g, unsigned char* b,
- double weight_r, double weight_g, double weight_b); // floating point version
- static unsigned char AlphaBlend (unsigned char fg, unsigned char bg, double alpha);
- static void ChangeLightness(unsigned char* r, unsigned char* g, unsigned char* b, int ialpha);
- wxColour ChangeLightness(int ialpha) const;
- wxColour& MakeDisabled(unsigned char brightness = 255);
- // old, deprecated
- // ---------------
- #if WXWIN_COMPATIBILITY_2_6
- static wxDEPRECATED( wxColour CreateByName(const wxString& name) );
- wxDEPRECATED( void InitFromName(const wxString& col) );
- #endif
- protected:
- // Some ports need Init() and while we don't, provide a stub so that the
- // ports which don't need it are not forced to define it
- void Init() { }
- virtual void
- InitRGBA(ChannelType r, ChannelType g, ChannelType b, ChannelType a) = 0;
- virtual bool FromString(const wxString& s);
- #if wxCOLOUR_IS_GDIOBJECT
- // wxColour doesn't use reference counted data (at least not in all ports)
- // so provide stubs for the functions which need to be defined if we do use
- // them
- virtual wxGDIRefData *CreateGDIRefData() const
- {
- wxFAIL_MSG( "must be overridden if used" );
- return NULL;
- }
- virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *WXUNUSED(data)) const
- {
- wxFAIL_MSG( "must be overridden if used" );
- return NULL;
- }
- #endif
- };
- // wxColour <-> wxString utilities, used by wxConfig, defined in colourcmn.cpp
- WXDLLIMPEXP_CORE wxString wxToString(const wxColourBase& col);
- WXDLLIMPEXP_CORE bool wxFromString(const wxString& str, wxColourBase* col);
- #if defined(__WXMSW__)
- #include "wx/msw/colour.h"
- #elif defined(__WXMOTIF__)
- #include "wx/motif/colour.h"
- #elif defined(__WXGTK20__)
- #include "wx/gtk/colour.h"
- #elif defined(__WXGTK__)
- #include "wx/gtk1/colour.h"
- #elif defined(__WXDFB__)
- #include "wx/generic/colour.h"
- #elif defined(__WXX11__)
- #include "wx/x11/colour.h"
- #elif defined(__WXMAC__)
- #include "wx/osx/colour.h"
- #elif defined(__WXCOCOA__)
- #include "wx/cocoa/colour.h"
- #elif defined(__WXPM__)
- #include "wx/os2/colour.h"
- #endif
- #define wxColor wxColour
- #endif // _WX_COLOUR_H_BASE_
|