X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ab5fe83396c13f9fbf01630c52adf4df7607cbfe..682214d5c6ec3e56dbdfd0c97d70d87e614b38c2:/include/wx/fontutil.h?ds=sidebyside diff --git a/include/wx/fontutil.h b/include/wx/fontutil.h index c8df0749ca..1a1b917ba1 100644 --- a/include/wx/fontutil.h +++ b/include/wx/fontutil.h @@ -5,18 +5,18 @@ // Modified by: // Created: 05.11.99 // RCS-ID: $Id$ -// Copyright: (c) wxWindows team -// Licence: wxWindows license +// Copyright: (c) wxWidgets team +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -// General note: this header is private to wxWindows and is not supposed to be +// General note: this header is private to wxWidgets and is not supposed to be // included by user code. The functions declared here are implemented in // msw/fontutil.cpp for Windows, unix/fontutil.cpp for GTK/Motif &c. #ifndef _WX_FONTUTIL_H_ #define _WX_FONTUTIL_H_ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma interface "fontutil.h" #endif @@ -27,10 +27,38 @@ #include "wx/font.h" // for wxFont and wxFontEncoding #if defined(__WXMSW__) - #include - #include "wx/msw/winundef.h" + #include "wx/msw/wrapwin.h" #endif +struct WXDLLEXPORT wxNativeEncodingInfo; + +#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 // ---------------------------------------------------------------------------- @@ -45,29 +73,58 @@ // further it might make sense to make it a real class with virtual methods struct WXDLLEXPORT wxNativeFontInfo { -#if defined(__WXGTK__) || defined(__WXMOTIF__) +#if wxUSE_PANGO + PangoFontDescription *description; +#elif 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[14]; + wxString fontElements[wxXLFD_MAX]; // the full XLFD wxString xFontName; - // init the elements from an XLFD, return TRUE if ok + // 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); - // generate an XLFD using the fontElements + // 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 wNO_NATIVE_FONTINFO + #define wxNO_NATIVE_FONTINFO int pointSize; - int family; + wxFontFamily family; wxFontStyle style; wxFontWeight weight; bool underlined; @@ -78,24 +135,72 @@ struct WXDLLEXPORT wxNativeFontInfo // default ctor (default copy ctor is ok) wxNativeFontInfo() { Init(); } +#if wxUSE_PANGO +private: + void Init(const wxNativeFontInfo& info); + void Free(); + +public: + wxNativeFontInfo(const wxNativeFontInfo& info) { Init(info); } + ~wxNativeFontInfo() { Free(); } + + wxNativeFontInfo& operator=(const wxNativeFontInfo& info) + { + Free(); + Init(info); + return *this; + } +#endif // wxUSE_PANGO + // reset to the default state void Init(); - // accessors and modifiers for the font elements: note that there is no - // GetFamily() because in general it is impossible to get the family for an - // arbitrary native font + // init with the parameters of the given font + void InitFromFont(const wxFont& font) + { + // translate all font parameters + SetStyle((wxFontStyle)font.GetStyle()); + SetWeight((wxFontWeight)font.GetWeight()); + SetUnderlined(font.GetUnderlined()); +#if defined(__WXMSW__) + if ( font.IsUsingSizeInPixels() ) + SetPixelSize(font.GetPixelSize()); + else + SetPointSize(font.GetPointSize()); +#else + SetPointSize(font.GetPointSize()); +#endif + + // set the family/facename + SetFamily((wxFontFamily)font.GetFamily()); + const wxString& facename = font.GetFaceName(); + if ( !facename.empty() ) + { + SetFaceName(facename); + } + + // deal with encoding now (it may override the font family and facename + // so do it after setting them) + SetEncoding(font.GetEncoding()); + } + + // accessors and modifiers for the font elements int GetPointSize() const; + wxSize GetPixelSize() const; wxFontStyle GetStyle() const; wxFontWeight GetWeight() const; bool GetUnderlined() const; wxString GetFaceName() const; + wxFontFamily GetFamily() const; wxFontEncoding GetEncoding() const; void SetPointSize(int pointsize); + void SetPixelSize(const wxSize& pixelSize); 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 @@ -115,13 +220,13 @@ struct WXDLLEXPORT wxNativeFontInfo // ---------------------------------------------------------------------------- // translate a wxFontEncoding into native encoding parameter (defined above), -// returning TRUE if an (exact) macth could be found, FALSE otherwise (without +// returning true if an (exact) macth could be found, false otherwise (without // attempting any substitutions) extern bool wxGetNativeFontEncoding(wxFontEncoding encoding, wxNativeEncodingInfo *info); // test for the existence of the font described by this facename/encoding, -// return TRUE if such font(s) exist, FALSE otherwise +// return true if such font(s) exist, false otherwise extern bool wxTestFontEncoding(const wxNativeEncodingInfo& info); // ----------------------------------------------------------------------------