]> git.saurik.com Git - wxWidgets.git/blob - include/wx/colour.h
build fixes for wxUSE_VALIDATORS==0
[wxWidgets.git] / include / wx / colour.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/colour.h
3 // Purpose: wxColourBase definition
4 // Author: Julian Smart
5 // Modified by: Francesco Montorsi
6 // Created:
7 // RCS-ID: $Id$
8 // Copyright: Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_COLOUR_H_BASE_
13 #define _WX_COLOUR_H_BASE_
14
15 #include "wx/defs.h"
16 #include "wx/gdiobj.h"
17
18
19 class WXDLLIMPEXP_FWD_CORE wxColour;
20
21 // A macro to define the standard wxColour constructors:
22 //
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, \
28 ChannelType green, \
29 ChannelType blue, \
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); }
36
37
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
42
43
44 const unsigned char wxALPHA_TRANSPARENT = 0;
45 const unsigned char wxALPHA_OPAQUE = 0xff;
46
47 // ----------------------------------------------------------------------------
48 // wxVariant support
49 // ----------------------------------------------------------------------------
50
51 #if wxUSE_VARIANT
52 #include "wx/variant.h"
53 DECLARE_VARIANT_OBJECT_EXPORTED(wxColour,WXDLLIMPEXP_CORE)
54 #endif
55
56 //-----------------------------------------------------------------------------
57 // wxColourBase: this class has no data members, just some functions to avoid
58 // code redundancy in all native wxColour implementations
59 //-----------------------------------------------------------------------------
60
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.
64 */
65 #if defined( __WXMAC__ ) || defined( __WXMSW__ ) || defined( __WXPM__ ) || defined( __WXCOCOA__ )
66 #define wxCOLOUR_IS_GDIOBJECT 0
67 #else
68 #define wxCOLOUR_IS_GDIOBJECT 1
69 #endif
70
71 class WXDLLIMPEXP_CORE wxColourBase : public
72 #if wxCOLOUR_IS_GDIOBJECT
73 wxGDIObject
74 #else
75 wxObject
76 #endif
77 {
78 public:
79 // type of a single colour component
80 typedef unsigned char ChannelType;
81
82 wxColourBase() {}
83 virtual ~wxColourBase() {}
84
85
86 // Set() functions
87 // ---------------
88
89 void Set(ChannelType red,
90 ChannelType green,
91 ChannelType blue,
92 ChannelType alpha = wxALPHA_OPAQUE)
93 { InitRGBA(red, green, blue, alpha); }
94
95 // implemented in colourcmn.cpp
96 bool Set(const wxString &str)
97 { return FromString(str); }
98
99 void Set(unsigned long colRGB)
100 {
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)));
106 }
107
108
109
110 // accessors
111 // ---------
112
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 ; }
118
119 // implemented in colourcmn.cpp
120 virtual wxString GetAsString(long flags = wxC2S_NAME | wxC2S_CSS_SYNTAX) const;
121
122 void SetRGB(wxUint32 colRGB)
123 {
124 Set((ChannelType)(0xFF & colRGB),
125 (ChannelType)(0xFF & (colRGB >> 8)),
126 (ChannelType)(0xFF & (colRGB >> 16)));
127 }
128
129 void SetRGBA(wxUint32 colRGBA)
130 {
131 Set((ChannelType)(0xFF & colRGBA),
132 (ChannelType)(0xFF & (colRGBA >> 8)),
133 (ChannelType)(0xFF & (colRGBA >> 16)),
134 (ChannelType)(0xFF & (colRGBA >> 24)));
135 }
136
137 wxUint32 GetRGB() const
138 { return Red() | (Green() << 8) | (Blue() << 16); }
139
140 wxUint32 GetRGBA() const
141 { return Red() | (Green() << 8) | (Blue() << 16) | (Alpha() << 24); }
142
143 #if !wxCOLOUR_IS_GDIOBJECT
144 virtual bool IsOk() const= 0;
145
146 // older version, for backwards compatibility only (but not deprecated
147 // because it's still widely used)
148 bool Ok() const { return IsOk(); }
149 #endif
150
151 // old, deprecated
152 // ---------------
153
154 #if WXWIN_COMPATIBILITY_2_6
155 wxDEPRECATED( static wxColour CreateByName(const wxString& name) );
156 wxDEPRECATED( void InitFromName(const wxString& col) );
157 #endif
158
159 protected:
160 // Some ports need Init() and while we don't, provide a stub so that the
161 // ports which don't need it are not forced to define it
162 void Init() { }
163
164 virtual void
165 InitRGBA(ChannelType r, ChannelType g, ChannelType b, ChannelType a) = 0;
166
167 virtual bool FromString(const wxString& s);
168
169 #if wxCOLOUR_IS_GDIOBJECT
170 // wxColour doesn't use reference counted data (at least not in all ports)
171 // so provide stubs for the functions which need to be defined if we do use
172 // them
173 virtual wxGDIRefData *CreateGDIRefData() const
174 {
175 wxFAIL_MSG( "must be overridden if used" );
176
177 return NULL;
178 }
179
180 virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *WXUNUSED(data)) const
181 {
182 wxFAIL_MSG( "must be overridden if used" );
183
184 return NULL;
185 }
186 #endif
187 };
188
189
190 // wxColour <-> wxString utilities, used by wxConfig, defined in colourcmn.cpp
191 WXDLLIMPEXP_CORE wxString wxToString(const wxColourBase& col);
192 WXDLLIMPEXP_CORE bool wxFromString(const wxString& str, wxColourBase* col);
193
194
195
196 #if defined(__WXPALMOS__)
197 #include "wx/generic/colour.h"
198 #elif defined(__WXMSW__)
199 #include "wx/msw/colour.h"
200 #elif defined(__WXMOTIF__)
201 #include "wx/motif/colour.h"
202 #elif defined(__WXGTK20__)
203 #include "wx/gtk/colour.h"
204 #elif defined(__WXGTK__)
205 #include "wx/gtk1/colour.h"
206 #elif defined(__WXMGL__)
207 #include "wx/generic/colour.h"
208 #elif defined(__WXDFB__)
209 #include "wx/generic/colour.h"
210 #elif defined(__WXX11__)
211 #include "wx/x11/colour.h"
212 #elif defined(__WXMAC__)
213 #include "wx/osx/colour.h"
214 #elif defined(__WXCOCOA__)
215 #include "wx/cocoa/colour.h"
216 #elif defined(__WXPM__)
217 #include "wx/os2/colour.h"
218 #endif
219
220 #define wxColor wxColour
221
222 #endif // _WX_COLOUR_H_BASE_