1///////////////////////////////////////////////////////////////////////////// 2// Name: wx/fontutil.h 3// Purpose: font-related helper functions 4// Author: Vadim Zeitlin 5// Modified by: 6// Created: 05.11.99 7// RCS-ID: $Id: fontutil.h 49563 2007-10-31 20:46:21Z VZ $ 8// Copyright: (c) wxWidgets team 9// Licence: wxWindows licence 10///////////////////////////////////////////////////////////////////////////// 11 12// General note: this header is private to wxWidgets and is not supposed to be 13// included by user code. The functions declared here are implemented in 14// msw/fontutil.cpp for Windows, unix/fontutil.cpp for GTK/Motif &c. 15 16#ifndef _WX_FONTUTIL_H_ 17#define _WX_FONTUTIL_H_ 18 19// ---------------------------------------------------------------------------- 20// headers 21// ---------------------------------------------------------------------------- 22 23#include "wx/font.h" // for wxFont and wxFontEncoding 24 25#if defined(__WXMSW__) 26 #include "wx/msw/wrapwin.h" 27#endif 28 29class WXDLLIMPEXP_FWD_BASE wxArrayString; 30struct WXDLLIMPEXP_FWD_CORE wxNativeEncodingInfo; 31 32#if defined(_WX_X_FONTLIKE) 33 34// the symbolic names for the XLFD fields (with examples for their value) 35// 36// NB: we suppose that the font always starts with the empty token (font name 37// registry field) as we never use nor generate it anyhow 38enum wxXLFDField 39{ 40 wxXLFD_FOUNDRY, // adobe 41 wxXLFD_FAMILY, // courier, times, ... 42 wxXLFD_WEIGHT, // black, bold, demibold, medium, regular, light 43 wxXLFD_SLANT, // r/i/o (roman/italique/oblique) 44 wxXLFD_SETWIDTH, // condensed, expanded, ... 45 wxXLFD_ADDSTYLE, // whatever - usually nothing 46 wxXLFD_PIXELSIZE, // size in pixels 47 wxXLFD_POINTSIZE, // size in points 48 wxXLFD_RESX, // 72, 75, 100, ... 49 wxXLFD_RESY, 50 wxXLFD_SPACING, // m/p/c (monospaced/proportional/character cell) 51 wxXLFD_AVGWIDTH, // average width in 1/10 pixels 52 wxXLFD_REGISTRY, // iso8859, rawin, koi8, ... 53 wxXLFD_ENCODING, // 1, r, r, ... 54 wxXLFD_MAX 55}; 56 57#endif // _WX_X_FONTLIKE 58 59// ---------------------------------------------------------------------------- 60// types 61// ---------------------------------------------------------------------------- 62 63// wxNativeFontInfo is platform-specific font representation: this struct 64// should be considered as opaque font description only used by the native 65// functions, the user code can only get the objects of this type from 66// somewhere and pass it somewhere else (possibly save them somewhere using 67// ToString() and restore them using FromString()) 68class WXDLLEXPORT wxNativeFontInfo 69{ 70public: 71#if wxUSE_PANGO 72 PangoFontDescription *description; 73#elif defined(_WX_X_FONTLIKE) 74 // the members can't be accessed directly as we only parse the 75 // xFontName on demand 76private: 77 // the components of the XLFD 78 wxString fontElements[wxXLFD_MAX]; 79 80 // the full XLFD 81 wxString xFontName; 82 83 // true until SetXFontName() is called 84 bool m_isDefault; 85 86 // return true if we have already initialized fontElements 87 inline bool HasElements() const; 88 89public: 90 // init the elements from an XLFD, return true if ok 91 bool FromXFontName(const wxString& xFontName); 92 93 // return false if we were never initialized with a valid XLFD 94 bool IsDefault() const { return m_isDefault; } 95 96 // return the XLFD (using the fontElements if necessary) 97 wxString GetXFontName() const; 98 99 // get the given XFLD component 100 wxString GetXFontComponent(wxXLFDField field) const; 101 102 // change the font component 103 void SetXFontComponent(wxXLFDField field, const wxString& value); 104 105 // set the XFLD 106 void SetXFontName(const wxString& xFontName); 107#elif defined(__WXMSW__) 108 LOGFONT lf; 109#elif defined(__WXPM__) 110 // OS/2 native structures that define a font 111 FATTRS fa; 112 FONTMETRICS fm; 113 FACENAMEDESC fn; 114#else // other platforms 115 // 116 // This is a generic implementation that should work on all ports 117 // without specific support by the port. 118 // 119 #define wxNO_NATIVE_FONTINFO 120 121 int pointSize; 122 wxFontFamily family; 123 wxFontStyle style; 124 wxFontWeight weight; 125 bool underlined; 126 wxString faceName; 127 wxFontEncoding encoding; 128#endif // platforms 129 130 // default ctor (default copy ctor is ok) 131 wxNativeFontInfo() { Init(); } 132 133#if wxUSE_PANGO 134private: 135 void Init(const wxNativeFontInfo& info); 136 void Free(); 137 138public: 139 wxNativeFontInfo(const wxNativeFontInfo& info) { Init(info); } 140 ~wxNativeFontInfo() { Free(); } 141 142 wxNativeFontInfo& operator=(const wxNativeFontInfo& info) 143 { 144 Free(); 145 Init(info); 146 return *this; 147 } 148#endif // wxUSE_PANGO 149 150 // reset to the default state 151 void Init(); 152 153 // init with the parameters of the given font 154 void InitFromFont(const wxFont& font) 155 { 156 // translate all font parameters 157 SetStyle((wxFontStyle)font.GetStyle()); 158 SetWeight((wxFontWeight)font.GetWeight()); 159 SetUnderlined(font.GetUnderlined()); 160#if defined(__WXMSW__) 161 if ( font.IsUsingSizeInPixels() ) 162 SetPixelSize(font.GetPixelSize()); 163 else 164 SetPointSize(font.GetPointSize()); 165#else 166 SetPointSize(font.GetPointSize()); 167#endif 168 169 // set the family/facename 170 SetFamily((wxFontFamily)font.GetFamily()); 171 const wxString& facename = font.GetFaceName(); 172 if ( !facename.empty() ) 173 { 174 SetFaceName(facename); 175 } 176 177 // deal with encoding now (it may override the font family and facename 178 // so do it after setting them) 179 SetEncoding(font.GetEncoding()); 180 } 181 182 // accessors and modifiers for the font elements 183 int GetPointSize() const; 184 wxSize GetPixelSize() const; 185 wxFontStyle GetStyle() const; 186 wxFontWeight GetWeight() const; 187 bool GetUnderlined() const; 188 wxString GetFaceName() const; 189 wxFontFamily GetFamily() const; 190 wxFontEncoding GetEncoding() const; 191 192 void SetPointSize(int pointsize); 193 void SetPixelSize(const wxSize& pixelSize); 194 void SetStyle(wxFontStyle style); 195 void SetWeight(wxFontWeight weight); 196 void SetUnderlined(bool underlined); 197 bool SetFaceName(const wxString& facename); 198 void SetFamily(wxFontFamily family); 199 void SetEncoding(wxFontEncoding encoding); 200 201 // sets the first facename in the given array which is found 202 // to be valid. If no valid facename is given, sets the 203 // first valid facename returned by wxFontEnumerator::GetFacenames(). 204 // Does not return a bool since it cannot fail. 205 void SetFaceName(const wxArrayString &facenames); 206 207 208 // it is important to be able to serialize wxNativeFontInfo objects to be 209 // able to store them (in config file, for example) 210 bool FromString(const wxString& s); 211 wxString ToString() const; 212 213 // we also want to present the native font descriptions to the user in some 214 // human-readable form (it is not platform independent neither, but can 215 // hopefully be understood by the user) 216 bool FromUserString(const wxString& s); 217 wxString ToUserString() const; 218}; 219 220// ---------------------------------------------------------------------------- 221// font-related functions (common) 222// ---------------------------------------------------------------------------- 223 224// translate a wxFontEncoding into native encoding parameter (defined above), 225// returning true if an (exact) macth could be found, false otherwise (without 226// attempting any substitutions) 227extern bool wxGetNativeFontEncoding(wxFontEncoding encoding, 228 wxNativeEncodingInfo *info); 229 230// test for the existence of the font described by this facename/encoding, 231// return true if such font(s) exist, false otherwise 232extern bool wxTestFontEncoding(const wxNativeEncodingInfo& info); 233 234// ---------------------------------------------------------------------------- 235// font-related functions (X and GTK) 236// ---------------------------------------------------------------------------- 237 238#ifdef _WX_X_FONTLIKE 239 #include "wx/unix/fontutil.h" 240#endif // X || GDK 241 242#endif // _WX_FONTUTIL_H_ 243