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: colour.h 53135 2008-04-12 02:31:04Z VZ $
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
19class WXDLLIMPEXP_FWD_CORE wxColour;
20
21// the standard wxColour constructors;
22// this macro avoids to repeat these lines across all colour.h files, since
23// Set() is a virtual function and thus cannot be called by wxColourBase
24// constructors
25#define DEFINE_STD_WXCOLOUR_CONSTRUCTORS                                      \
26    wxColour( ChannelType red, ChannelType green, ChannelType blue,           \
27              ChannelType alpha = wxALPHA_OPAQUE )                            \
28        { Set(red, green, blue, alpha); }                                     \
29    wxColour( unsigned long colRGB ) { Set(colRGB); }                         \
30    wxColour(const wxString &colourName) { Set(colourName); }                 \
31    wxColour(const wxChar *colourName) { Set(colourName); }
32
33
34// flags for wxColour -> wxString conversion (see wxColour::GetAsString)
35#define wxC2S_NAME              1   // return colour name, when possible
36#define wxC2S_CSS_SYNTAX        2   // return colour in rgb(r,g,b) syntax
37#define wxC2S_HTML_SYNTAX       4   // return colour in #rrggbb syntax
38
39
40const unsigned char wxALPHA_TRANSPARENT = 0;
41const unsigned char wxALPHA_OPAQUE = 0xff;
42
43// ----------------------------------------------------------------------------
44// wxVariant support
45// ----------------------------------------------------------------------------
46
47#if wxUSE_VARIANT
48#include "wx/variant.h"
49DECLARE_VARIANT_OBJECT_EXPORTED(wxColour,WXDLLEXPORT)
50#endif
51
52//-----------------------------------------------------------------------------
53// wxColourBase: this class has no data members, just some functions to avoid
54//               code redundancy in all native wxColour implementations
55//-----------------------------------------------------------------------------
56
57class WXDLLEXPORT wxColourBase : public wxGDIObject
58{
59public:
60    // type of a single colour component
61    typedef unsigned char ChannelType;
62
63    wxColourBase() {}
64    virtual ~wxColourBase() {}
65
66
67    // Set() functions
68    // ---------------
69
70    void Set(ChannelType red,
71             ChannelType green,
72             ChannelType blue,
73             ChannelType alpha = wxALPHA_OPAQUE)
74        { InitRGBA(red,green,blue, alpha); }
75
76    // implemented in colourcmn.cpp
77    bool Set(const wxChar *str)
78        { return FromString(str); }
79
80    bool Set(const wxString &str)
81        { return FromString(str); }
82
83    void Set(unsigned long colRGB)
84    {
85        // we don't need to know sizeof(long) here because we assume that the three
86        // least significant bytes contain the R, G and B values
87        Set((ChannelType)(0xFF & colRGB),
88            (ChannelType)(0xFF & (colRGB >> 8)),
89            (ChannelType)(0xFF & (colRGB >> 16)));
90    }
91
92
93
94    // accessors
95    // ---------
96
97    virtual bool Ok() const { return IsOk(); }
98    virtual bool IsOk() const = 0;
99
100    virtual ChannelType Red() const = 0;
101    virtual ChannelType Green() const = 0;
102    virtual ChannelType Blue() const = 0;
103    virtual ChannelType Alpha() const
104        { return wxALPHA_OPAQUE ; }
105
106    // implemented in colourcmn.cpp
107    virtual wxString GetAsString(long flags = wxC2S_NAME | wxC2S_CSS_SYNTAX) const;
108
109
110
111    // old, deprecated
112    // ---------------
113
114#if WXWIN_COMPATIBILITY_2_6
115    wxDEPRECATED( static wxColour CreateByName(const wxString& name) );
116    wxDEPRECATED( void InitFromName(const wxString& col) );
117#endif
118
119protected:
120    virtual void
121    InitRGBA(ChannelType r, ChannelType g, ChannelType b, ChannelType a) = 0;
122
123    virtual bool FromString(const wxChar *s);
124};
125
126
127
128#if defined(__WXPALMOS__)
129    #include "wx/generic/colour.h"
130#elif defined(__WXMSW__)
131    #include "wx/msw/colour.h"
132#elif defined(__WXMOTIF__)
133    #include "wx/motif/colour.h"
134#elif defined(__WXGTK20__)
135    #include "wx/gtk/colour.h"
136#elif defined(__WXGTK__)
137    #include "wx/gtk1/colour.h"
138#elif defined(__WXMGL__)
139    #include "wx/generic/colour.h"
140#elif defined(__WXDFB__)
141    #include "wx/generic/colour.h"
142#elif defined(__WXX11__)
143    #include "wx/x11/colour.h"
144#elif defined(__WXMAC__)
145    #include "wx/mac/colour.h"
146#elif defined(__WXCOCOA__)
147    #include "wx/cocoa/colour.h"
148#elif defined(__WXPM__)
149    #include "wx/os2/colour.h"
150#endif
151
152#define wxColor wxColour
153
154#endif // _WX_COLOUR_H_BASE_
155