1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/font.h
3 // Purpose:     wxFontBase class: the interface of wxFont
4 // Author:      Vadim Zeitlin
5 // Modified by:
6 // Created:     20.09.99
7 // RCS-ID:      $Id: font.h 53135 2008-04-12 02:31:04Z VZ $
8 // Copyright:   (c) wxWidgets team
9 // Licence:     wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _WX_FONT_H_BASE_
13 #define _WX_FONT_H_BASE_
14 
15 // ----------------------------------------------------------------------------
16 // headers
17 // ----------------------------------------------------------------------------
18 
19 #include "wx/defs.h"        // for wxDEFAULT &c
20 #include "wx/fontenc.h"     // the font encoding constants
21 #include "wx/gdiobj.h"      // the base class
22 
23 // ----------------------------------------------------------------------------
24 // forward declarations
25 // ----------------------------------------------------------------------------
26 
27 class WXDLLIMPEXP_FWD_CORE wxFontData;
28 class WXDLLIMPEXP_FWD_CORE wxFontBase;
29 class WXDLLIMPEXP_FWD_CORE wxFont;
30 class WXDLLIMPEXP_FWD_CORE wxSize;
31 
32 // ----------------------------------------------------------------------------
33 // font constants
34 // ----------------------------------------------------------------------------
35 
36 // standard font families: these may be used only for the font creation, it
37 // doesn't make sense to query an existing font for its font family as,
38 // especially if the font had been created from a native font description, it
39 // may be unknown
40 enum wxFontFamily
41 {
42     wxFONTFAMILY_DEFAULT = wxDEFAULT,
43     wxFONTFAMILY_DECORATIVE = wxDECORATIVE,
44     wxFONTFAMILY_ROMAN = wxROMAN,
45     wxFONTFAMILY_SCRIPT = wxSCRIPT,
46     wxFONTFAMILY_SWISS = wxSWISS,
47     wxFONTFAMILY_MODERN = wxMODERN,
48     wxFONTFAMILY_TELETYPE = wxTELETYPE,
49     wxFONTFAMILY_MAX,
50     wxFONTFAMILY_UNKNOWN = wxFONTFAMILY_MAX
51 };
52 
53 // font styles
54 enum wxFontStyle
55 {
56     wxFONTSTYLE_NORMAL = wxNORMAL,
57     wxFONTSTYLE_ITALIC = wxITALIC,
58     wxFONTSTYLE_SLANT = wxSLANT,
59     wxFONTSTYLE_MAX
60 };
61 
62 // font weights
63 enum wxFontWeight
64 {
65     wxFONTWEIGHT_NORMAL = wxNORMAL,
66     wxFONTWEIGHT_LIGHT = wxLIGHT,
67     wxFONTWEIGHT_BOLD = wxBOLD,
68     wxFONTWEIGHT_MAX
69 };
70 
71 // the font flag bits for the new font ctor accepting one combined flags word
72 enum
73 {
74     // no special flags: font with default weight/slant/anti-aliasing
75     wxFONTFLAG_DEFAULT          = 0,
76 
77     // slant flags (default: no slant)
78     wxFONTFLAG_ITALIC           = 1 << 0,
79     wxFONTFLAG_SLANT            = 1 << 1,
80 
81     // weight flags (default: medium)
82     wxFONTFLAG_LIGHT            = 1 << 2,
83     wxFONTFLAG_BOLD             = 1 << 3,
84 
85     // anti-aliasing flag: force on or off (default: the current system default)
86     wxFONTFLAG_ANTIALIASED      = 1 << 4,
87     wxFONTFLAG_NOT_ANTIALIASED  = 1 << 5,
88 
89     // underlined/strikethrough flags (default: no lines)
90     wxFONTFLAG_UNDERLINED       = 1 << 6,
91     wxFONTFLAG_STRIKETHROUGH    = 1 << 7,
92 
93     // the mask of all currently used flags
94     wxFONTFLAG_MASK = wxFONTFLAG_ITALIC             |
95                       wxFONTFLAG_SLANT              |
96                       wxFONTFLAG_LIGHT              |
97                       wxFONTFLAG_BOLD               |
98                       wxFONTFLAG_ANTIALIASED        |
99                       wxFONTFLAG_NOT_ANTIALIASED    |
100                       wxFONTFLAG_UNDERLINED         |
101                       wxFONTFLAG_STRIKETHROUGH
102 };
103 
104 // ----------------------------------------------------------------------------
105 // wxFontBase represents a font object
106 // ----------------------------------------------------------------------------
107 
108 class WXDLLIMPEXP_FWD_CORE wxNativeFontInfo;
109 
110 class WXDLLEXPORT wxFontBase : public wxGDIObject
111 {
112 public:
113     // creator function
114     virtual ~wxFontBase();
115 
116     // from the font components
117     static wxFont *New(
118         int pointSize,              // size of the font in points
119         int family,                 // see wxFontFamily enum
120         int style,                  // see wxFontStyle enum
121         int weight,                 // see wxFontWeight enum
122         bool underlined = false,    // not underlined by default
123         const wxString& face = wxEmptyString,              // facename
124         wxFontEncoding encoding = wxFONTENCODING_DEFAULT); // ISO8859-X, ...
125 
126     // from the font components but using the font flags instead of separate
127     // parameters for each flag
128     static wxFont *New(int pointSize,
129                        wxFontFamily family,
130                        int flags = wxFONTFLAG_DEFAULT,
131                        const wxString& face = wxEmptyString,
132                        wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
133 
134     // from the font components
135     static wxFont *New(
136         const wxSize& pixelSize,    // size of the font in pixels
137         int family,                 // see wxFontFamily enum
138         int style,                  // see wxFontStyle enum
139         int weight,                 // see wxFontWeight enum
140         bool underlined = false,    // not underlined by default
141         const wxString& face = wxEmptyString,              // facename
142         wxFontEncoding encoding = wxFONTENCODING_DEFAULT); // ISO8859-X, ...
143 
144     // from the font components but using the font flags instead of separate
145     // parameters for each flag
146     static wxFont *New(const wxSize& pixelSize,
147                        wxFontFamily family,
148                        int flags = wxFONTFLAG_DEFAULT,
149                        const wxString& face = wxEmptyString,
150                        wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
151 
152     // from the (opaque) native font description object
153     static wxFont *New(const wxNativeFontInfo& nativeFontDesc);
154 
155     // from the string representation of wxNativeFontInfo
156     static wxFont *New(const wxString& strNativeFontDesc);
157 
158     // was the font successfully created?
Ok()159     bool Ok() const { return IsOk(); }
IsOk()160     bool IsOk() const { return m_refData != NULL; }
161 
162     // comparison
163     bool operator == (const wxFont& font) const;
164     bool operator != (const wxFont& font) const;
165 
166     // accessors: get the font characteristics
167     virtual int GetPointSize() const = 0;
168     virtual wxSize GetPixelSize() const;
169     virtual bool IsUsingSizeInPixels() const;
170     virtual int GetFamily() const = 0;
171     virtual int GetStyle() const = 0;
172     virtual int GetWeight() const = 0;
173     virtual bool GetUnderlined() const = 0;
174     virtual wxString GetFaceName() const = 0;
175     virtual wxFontEncoding GetEncoding() const = 0;
176     virtual const wxNativeFontInfo *GetNativeFontInfo() const = 0;
177 
178     virtual bool IsFixedWidth() const;
179 
180     wxString GetNativeFontInfoDesc() const;
181     wxString GetNativeFontInfoUserDesc() const;
182 
183     // change the font characteristics
184     virtual void SetPointSize( int pointSize ) = 0;
185     virtual void SetPixelSize( const wxSize& pixelSize );
186     virtual void SetFamily( int family ) = 0;
187     virtual void SetStyle( int style ) = 0;
188     virtual void SetWeight( int weight ) = 0;
189     virtual void SetUnderlined( bool underlined ) = 0;
190     virtual void SetEncoding(wxFontEncoding encoding) = 0;
191     virtual bool SetFaceName( const wxString& faceName );
SetNativeFontInfo(const wxNativeFontInfo & info)192     void SetNativeFontInfo(const wxNativeFontInfo& info)
193         { DoSetNativeFontInfo(info); }
194 
195     bool SetNativeFontInfo(const wxString& info);
196     bool SetNativeFontInfoUserDesc(const wxString& info);
197 
198     // translate the fonts into human-readable string (i.e. GetStyleString()
199     // will return "wxITALIC" for an italic font, ...)
200     wxString GetFamilyString() const;
201     wxString GetStyleString() const;
202     wxString GetWeightString() const;
203 
204     // Unofficial API, don't use
WXUNUSED(no)205     virtual void SetNoAntiAliasing( bool WXUNUSED(no) = true ) {  }
GetNoAntiAliasing()206     virtual bool GetNoAntiAliasing() const { return false; }
207 
208     // the default encoding is used for creating all fonts with default
209     // encoding parameter
GetDefaultEncoding()210     static wxFontEncoding GetDefaultEncoding() { return ms_encodingDefault; }
211     static void SetDefaultEncoding(wxFontEncoding encoding);
212 
213 protected:
214     // the function called by both overloads of SetNativeFontInfo()
215     virtual void DoSetNativeFontInfo(const wxNativeFontInfo& info);
216 
217 private:
218     // the currently default encoding: by default, it's the default system
219     // encoding, but may be changed by the application using
220     // SetDefaultEncoding() to make all subsequent fonts created without
221     // specifying encoding parameter using this encoding
222     static wxFontEncoding ms_encodingDefault;
223 };
224 
225 // include the real class declaration
226 #if defined(__WXPALMOS__)
227     #include "wx/palmos/font.h"
228 #elif defined(__WXMSW__)
229     #include "wx/msw/font.h"
230 #elif defined(__WXMOTIF__)
231     #include "wx/motif/font.h"
232 #elif defined(__WXGTK20__)
233     #include "wx/gtk/font.h"
234 #elif defined(__WXGTK__)
235     #include "wx/gtk1/font.h"
236 #elif defined(__WXX11__)
237     #include "wx/x11/font.h"
238 #elif defined(__WXMGL__)
239     #include "wx/mgl/font.h"
240 #elif defined(__WXDFB__)
241     #include "wx/dfb/font.h"
242 #elif defined(__WXMAC__)
243     #include "wx/mac/font.h"
244 #elif defined(__WXCOCOA__)
245     #include "wx/cocoa/font.h"
246 #elif defined(__WXPM__)
247     #include "wx/os2/font.h"
248 #endif
249 
250 #endif
251     // _WX_FONT_H_BASE_
252