X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5f287fcf1dc14c3db75220ee7f6b492b182f6fd4..1a6a6043f79b8b12958e6cb09d443213a969507d:/include/wx/fontutil.h diff --git a/include/wx/fontutil.h b/include/wx/fontutil.h index 3f439b2c0c..0fba847731 100644 --- a/include/wx/fontutil.h +++ b/include/wx/fontutil.h @@ -26,48 +26,142 @@ #include "wx/font.h" // for wxFont and wxFontEncoding -// for our purposes here, GDK and X are identical -#if defined(__WXGTK__) || defined(__X__) - #define _WX_X_FONTLIKE +#if defined(__WXMSW__) + #include + #include "wx/msw/winundef.h" #endif +#if defined(_WX_X_FONTLIKE) + +// the symbolic names for the XLFD fields (with examples for their value) +// +// NB: we suppose that the font always starts with the empty token (font name +// registry field) as we never use nor generate it anyhow +enum wxXLFDField +{ + wxXLFD_FOUNDRY, // adobe + wxXLFD_FAMILY, // courier, times, ... + wxXLFD_WEIGHT, // black, bold, demibold, medium, regular, light + wxXLFD_SLANT, // r/i/o (roman/italique/oblique) + wxXLFD_SETWIDTH, // condensed, expanded, ... + wxXLFD_ADDSTYLE, // whatever - usually nothing + wxXLFD_PIXELSIZE, // size in pixels + wxXLFD_POINTSIZE, // size in points + wxXLFD_RESX, // 72, 75, 100, ... + wxXLFD_RESY, + wxXLFD_SPACING, // m/p/c (monospaced/proportional/character cell) + wxXLFD_AVGWIDTH, // average width in 1/10 pixels + wxXLFD_REGISTRY, // iso8859, rawin, koi8, ... + wxXLFD_ENCODING, // 1, r, r, ... + wxXLFD_MAX +}; + +#endif // _WX_X_FONTLIKE + // ---------------------------------------------------------------------------- // types // ---------------------------------------------------------------------------- -// This private structure specifies all the parameters needed to create a font -// with the given encoding on this platform. -// -// Under X, it contains the last 2 elements of the font specifications -// (registry and encoding). +// wxNativeFontInfo is platform-specific font representation: this struct +// should be considered as opaque font description only used by the native +// functions, the user code can only get the objects of this type from +// somewhere and pass it somewhere else (possibly save them somewhere using +// ToString() and restore them using FromString()) // -// Under Windows, it contains a number which is one of predefined CHARSET_XXX -// values. -// -// Under all platforms it also contains a facename string which should be -// used, if not empty, to create fonts in this encoding (this is the only way -// to create a font of non-standard encoding (like KOI8) under Windows - the -// facename specifies the encoding then) - -struct WXDLLEXPORT wxNativeEncodingInfo +// NB: it is a POD currently for max efficiency but if it continues to grow +// further it might make sense to make it a real class with virtual methods +struct WXDLLEXPORT wxNativeFontInfo { - wxString facename; // may be empty meaning "any" - -#if defined(__WXMSW__) - wxNativeEncodingInfo() { charset = 0; /* ANSI_CHARSET */ } - - int charset; -#elif defined(_WX_X_FONTLIKE) - wxString xregistry, - xencoding; -#else - #error "Unsupported toolkit" -#endif - - // this struct is saved in config by wxFontMapper, so it should know to - // serialise itself (implemented in platform-specific code) +#if defined(_WX_X_FONTLIKE) + // the members can't be accessed directly as we only parse the + // xFontName on demand +private: + // the components of the XLFD + wxString fontElements[wxXLFD_MAX]; + + // the full XLFD + wxString xFontName; + + // true until SetXFontName() is called + bool m_isDefault; + + // return true if we have already initialized fontElements + inline bool HasElements() const; + +public: + // init the elements from an XLFD, return TRUE if ok + bool FromXFontName(const wxString& xFontName); + + // return false if we were never initialized with a valid XLFD + bool IsDefault() const { return m_isDefault; } + + // return the XLFD (using the fontElements if necessary) + wxString GetXFontName() const; + + // get the given XFLD component + wxString GetXFontComponent(wxXLFDField field) const; + + // change the font component + void SetXFontComponent(wxXLFDField field, const wxString& value); + + // set the XFLD + void SetXFontName(const wxString& xFontName); +#elif defined(__WXMSW__) + LOGFONT lf; +#elif defined(__WXPM__) + // OS/2 native structures that define a font + FATTRS fa; + FONTMETRICS fm; + FACENAMEDESC fn; +#else // other platforms + // + // This is a generic implementation that should work on all ports + // without specific support by the port. + // + #define wxNO_NATIVE_FONTINFO + + int pointSize; + wxFontFamily family; + wxFontStyle style; + wxFontWeight weight; + bool underlined; + wxString faceName; + wxFontEncoding encoding; +#endif // platforms + + // default ctor (default copy ctor is ok) + wxNativeFontInfo() { Init(); } + + // reset to the default state + void Init(); + + // accessors and modifiers for the font elements + int GetPointSize() const; + wxFontStyle GetStyle() const; + wxFontWeight GetWeight() const; + bool GetUnderlined() const; + wxString GetFaceName() const; + wxFontFamily GetFamily() const; + wxFontEncoding GetEncoding() const; + + void SetPointSize(int pointsize); + void SetStyle(wxFontStyle style); + void SetWeight(wxFontWeight weight); + void SetUnderlined(bool underlined); + void SetFaceName(wxString facename); + void SetFamily(wxFontFamily family); + void SetEncoding(wxFontEncoding encoding); + + // it is important to be able to serialize wxNativeFontInfo objects to be + // able to store them (in config file, for example) bool FromString(const wxString& s); wxString ToString() const; + + // we also want to present the native font descriptions to the user in some + // human-readable form (it is not platform independent neither, but can + // hopefully be understood by the user) + bool FromUserString(const wxString& s); + wxString ToUserString() const; }; // ---------------------------------------------------------------------------- @@ -92,4 +186,12 @@ extern bool wxTestFontEncoding(const wxNativeEncodingInfo& info); #include "wx/unix/fontutil.h" #endif // X || GDK +// ---------------------------------------------------------------------------- +// font-related functions (MGL) +// ---------------------------------------------------------------------------- + +#ifdef __WXMGL__ + #include "wx/mgl/fontutil.h" +#endif // __WXMGL__ + #endif // _WX_FONTUTIL_H_