1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxColourBase definition
4 // Author: Julian Smart
5 // Modified by: Francesco Montorsi
8 // Copyright: Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #ifndef _WX_COLOUR_H_BASE_
13 #define _WX_COLOUR_H_BASE_
16 #include "wx/gdiobj.h"
19 class WXDLLIMPEXP_FWD_CORE wxColour
;
21 // A macro to define the standard wxColour constructors:
23 // It avoids the need to repeat these lines across all colour.h files, since
24 // Set() is a virtual function and thus cannot be called by wxColourBase ctors
25 #define DEFINE_STD_WXCOLOUR_CONSTRUCTORS \
26 wxColour() { Init(); } \
27 wxColour(ChannelType red, \
30 ChannelType alpha = wxALPHA_OPAQUE) \
31 { Init(); Set(red, green, blue, alpha); } \
32 wxColour(unsigned long colRGB) { Init(); Set(colRGB ); } \
33 wxColour(const wxString& colourName) { Init(); Set(colourName); } \
34 wxColour(const char *colourName) { Init(); Set(colourName); } \
35 wxColour(const wchar_t *colourName) { Init(); Set(colourName); }
38 // flags for wxColour -> wxString conversion (see wxColour::GetAsString)
39 #define wxC2S_NAME 1 // return colour name, when possible
40 #define wxC2S_CSS_SYNTAX 2 // return colour in rgb(r,g,b) syntax
41 #define wxC2S_HTML_SYNTAX 4 // return colour in #rrggbb syntax
44 const unsigned char wxALPHA_TRANSPARENT
= 0;
45 const unsigned char wxALPHA_OPAQUE
= 0xff;
47 // ----------------------------------------------------------------------------
49 // ----------------------------------------------------------------------------
52 #include "wx/variant.h"
53 DECLARE_VARIANT_OBJECT_EXPORTED(wxColour
,WXDLLIMPEXP_CORE
)
56 //-----------------------------------------------------------------------------
57 // wxColourBase: this class has no data members, just some functions to avoid
58 // code redundancy in all native wxColour implementations
59 //-----------------------------------------------------------------------------
61 /* Transition from wxGDIObject to wxObject is incomplete. If your port does
62 not need the wxGDIObject machinery to handle colors, please add it to the
63 list of ports which do not need it.
65 #if defined( __WXMAC__ ) || defined( __WXMSW__ ) || defined( __WXPM__ ) || defined( __WXCOCOA__ )
66 #define wxCOLOUR_IS_GDIOBJECT 0
68 #define wxCOLOUR_IS_GDIOBJECT 1
71 class WXDLLIMPEXP_CORE wxColourBase
: public
72 #if wxCOLOUR_IS_GDIOBJECT
79 // type of a single colour component
80 typedef unsigned char ChannelType
;
83 virtual ~wxColourBase() {}
89 void Set(ChannelType red
,
92 ChannelType alpha
= wxALPHA_OPAQUE
)
93 { InitRGBA(red
,green
,blue
, alpha
); }
95 // implemented in colourcmn.cpp
96 bool Set(const wxString
&str
)
97 { return FromString(str
); }
99 void Set(unsigned long colRGB
)
101 // we don't need to know sizeof(long) here because we assume that the three
102 // least significant bytes contain the R, G and B values
103 Set((ChannelType
)(0xFF & colRGB
),
104 (ChannelType
)(0xFF & (colRGB
>> 8)),
105 (ChannelType
)(0xFF & (colRGB
>> 16)));
113 virtual ChannelType
Red() const = 0;
114 virtual ChannelType
Green() const = 0;
115 virtual ChannelType
Blue() const = 0;
116 virtual ChannelType
Alpha() const
117 { return wxALPHA_OPAQUE
; }
119 // implemented in colourcmn.cpp
120 virtual wxString
GetAsString(long flags
= wxC2S_NAME
| wxC2S_CSS_SYNTAX
) const;
122 #if !wxCOLOUR_IS_GDIOBJECT
123 virtual bool IsOk() const= 0;
125 // older version, for backwards compatibility only (but not deprecated
126 // because it's still widely used)
127 bool Ok() const { return IsOk(); }
133 #if WXWIN_COMPATIBILITY_2_6
134 wxDEPRECATED( static wxColour
CreateByName(const wxString
& name
) );
135 wxDEPRECATED( void InitFromName(const wxString
& col
) );
139 // Some ports need Init() and while we don't, provide a stub so that the
140 // ports which don't need it are not forced to define it
144 InitRGBA(ChannelType r
, ChannelType g
, ChannelType b
, ChannelType a
) = 0;
146 virtual bool FromString(const wxString
& s
);
148 #if wxCOLOUR_IS_GDIOBJECT
149 // wxColour doesn't use reference counted data (at least not in all ports)
150 // so provide stubs for the functions which need to be defined if we do use
152 virtual wxGDIRefData
*CreateGDIRefData() const
154 wxFAIL_MSG( "must be overridden if used" );
159 virtual wxGDIRefData
*CloneGDIRefData(const wxGDIRefData
*WXUNUSED(data
)) const
161 wxFAIL_MSG( "must be overridden if used" );
169 // wxColour <-> wxString utilities, used by wxConfig, defined in colourcmn.cpp
170 WXDLLIMPEXP_CORE wxString
wxToString(const wxColourBase
& col
);
171 WXDLLIMPEXP_CORE
bool wxFromString(const wxString
& str
, wxColourBase
* col
);
175 #if defined(__WXPALMOS__)
176 #include "wx/generic/colour.h"
177 #elif defined(__WXMSW__)
178 #include "wx/msw/colour.h"
179 #elif defined(__WXMOTIF__)
180 #include "wx/motif/colour.h"
181 #elif defined(__WXGTK20__)
182 #include "wx/gtk/colour.h"
183 #elif defined(__WXGTK__)
184 #include "wx/gtk1/colour.h"
185 #elif defined(__WXMGL__)
186 #include "wx/generic/colour.h"
187 #elif defined(__WXDFB__)
188 #include "wx/generic/colour.h"
189 #elif defined(__WXX11__)
190 #include "wx/x11/colour.h"
191 #elif defined(__WXMAC__)
192 #include "wx/mac/colour.h"
193 #elif defined(__WXCOCOA__)
194 #include "wx/cocoa/colour.h"
195 #elif defined(__WXPM__)
196 #include "wx/os2/colour.h"
199 #define wxColor wxColour
201 #endif // _WX_COLOUR_H_BASE_