| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/fontutil.h
- // Purpose: font-related helper functions
- // Author: Vadim Zeitlin
- // Modified by:
- // Created: 05.11.99
- // Copyright: (c) wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- // 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_
- // ----------------------------------------------------------------------------
- // headers
- // ----------------------------------------------------------------------------
- #include "wx/font.h" // for wxFont and wxFontEncoding
- #if defined(__WXMSW__)
- #include "wx/msw/wrapwin.h"
- #endif
- class WXDLLIMPEXP_FWD_BASE wxArrayString;
- struct WXDLLIMPEXP_FWD_CORE 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
- // ----------------------------------------------------------------------------
- // 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())
- class WXDLLIMPEXP_CORE wxNativeFontInfo
- {
- public:
- #if wxUSE_PANGO
- PangoFontDescription *description;
- // Pango font description doesn't have these attributes, so we store them
- // separately and handle them ourselves in {To,From}String() methods.
- bool m_underlined;
- bool m_strikethrough;
- #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[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__)
- wxNativeFontInfo(const LOGFONT& lf_) : lf(lf_) { }
- LOGFONT lf;
- #elif defined(__WXPM__)
- // OS/2 native structures that define a font
- FATTRS fa;
- FONTMETRICS fm;
- FACENAMEDESC fn;
- #elif defined(__WXOSX__)
- public:
- wxNativeFontInfo(const wxNativeFontInfo& info) { Init(info); }
- wxNativeFontInfo( int size,
- wxFontFamily family,
- wxFontStyle style,
- wxFontWeight weight,
- bool underlined,
- const wxString& faceName,
- wxFontEncoding encoding)
- { Init(size,family,style,weight,underlined,faceName,encoding); }
- ~wxNativeFontInfo() { Free(); }
- wxNativeFontInfo& operator=(const wxNativeFontInfo& info)
- {
- if (this != &info)
- {
- Free();
- Init(info);
- }
- return *this;
- }
- void Init(CTFontDescriptorRef descr);
- void Init(const wxNativeFontInfo& info);
- void Init(int size,
- wxFontFamily family,
- wxFontStyle style,
- wxFontWeight weight,
- bool underlined,
- const wxString& faceName ,
- wxFontEncoding encoding);
- void Free();
- void EnsureValid();
- static void UpdateNamesMap(const wxString& familyname, CTFontDescriptorRef descr);
- static void UpdateNamesMap(const wxString& familyname, CTFontRef font);
- bool m_descriptorValid;
- #if wxOSX_USE_ATSU_TEXT
- bool m_atsuFontValid;
- // the atsu font ID
- wxUint32 m_atsuFontID;
- // the qd styles that are not intrinsic to the font above
- wxInt16 m_atsuAdditionalQDStyles;
- #if wxOSX_USE_CARBON
- wxInt16 m_qdFontFamily;
- wxInt16 m_qdFontStyle;
- #endif
- #endif
- int m_pointSize;
- wxFontFamily m_family;
- wxFontStyle m_style;
- wxFontWeight m_weight;
- bool m_underlined;
- bool m_strikethrough;
- wxString m_faceName;
- wxFontEncoding m_encoding;
- public :
- #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;
- bool strikethrough;
- wxString faceName;
- wxFontEncoding encoding;
- #endif // platforms
- // 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)
- {
- if (this != &info)
- {
- Free();
- Init(info);
- }
- return *this;
- }
- #endif // wxUSE_PANGO
- // reset to the default state
- void Init();
- // 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());
- SetStrikethrough(font.GetStrikethrough());
- #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;
- bool GetStrikethrough() 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 SetStrikethrough(bool strikethrough);
- bool SetFaceName(const wxString& facename);
- void SetFamily(wxFontFamily family);
- void SetEncoding(wxFontEncoding encoding);
- // sets the first facename in the given array which is found
- // to be valid. If no valid facename is given, sets the
- // first valid facename returned by wxFontEnumerator::GetFacenames().
- // Does not return a bool since it cannot fail.
- void SetFaceName(const wxArrayString &facenames);
- // 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;
- };
- // ----------------------------------------------------------------------------
- // font-related functions (common)
- // ----------------------------------------------------------------------------
- // translate a wxFontEncoding into native encoding parameter (defined above),
- // returning true if an (exact) macth could be found, false otherwise (without
- // attempting any substitutions)
- WXDLLIMPEXP_CORE 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
- WXDLLIMPEXP_CORE bool wxTestFontEncoding(const wxNativeEncodingInfo& info);
- // ----------------------------------------------------------------------------
- // font-related functions (X and GTK)
- // ----------------------------------------------------------------------------
- #ifdef _WX_X_FONTLIKE
- #include "wx/unix/fontutil.h"
- #endif // X || GDK
- #endif // _WX_FONTUTIL_H_
|