X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7b162e540e98415f8ac6bc1fd5b880e143aa85e5..14619f10b0bdb630206607abd0ce0319d45e095a:/include/wx/fontutil.h?ds=sidebyside diff --git a/include/wx/fontutil.h b/include/wx/fontutil.h index 1f4f5c3c34..106205f24c 100644 --- a/include/wx/fontutil.h +++ b/include/wx/fontutil.h @@ -5,21 +5,17 @@ // Modified by: // Created: 05.11.99 // RCS-ID: $Id$ -// Copyright: (c) wxWindows team +// 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_ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma interface "fontutil.h" -#endif - // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- @@ -30,7 +26,8 @@ #include "wx/msw/wrapwin.h" #endif -struct WXDLLEXPORT wxNativeEncodingInfo; +class WXDLLIMPEXP_FWD_BASE wxArrayString; +struct WXDLLIMPEXP_FWD_CORE wxNativeEncodingInfo; #if defined(_WX_X_FONTLIKE) @@ -68,13 +65,17 @@ enum wxXLFDField // 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()) -// -// 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 + +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 @@ -92,7 +93,7 @@ private: inline bool HasElements() const; public: - // init the elements from an XLFD, return TRUE if ok + // 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 @@ -110,12 +111,76 @@ public: // 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; + } + +#if wxOSX_USE_CORE_TEXT + void Init(CTFontDescriptorRef descr); +#endif + 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(); + + 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 @@ -128,6 +193,7 @@ public: wxFontStyle style; wxFontWeight weight; bool underlined; + bool strikethrough; wxString faceName; wxFontEncoding encoding; #endif // platforms @@ -135,6 +201,26 @@ public: // 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(); @@ -145,7 +231,15 @@ public: 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()); @@ -162,21 +256,32 @@ public: // 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 SetFaceName(wxString facename); + 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); @@ -194,14 +299,14 @@ public: // ---------------------------------------------------------------------------- // 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); +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 -extern bool wxTestFontEncoding(const wxNativeEncodingInfo& info); +// return true if such font(s) exist, false otherwise +WXDLLIMPEXP_CORE bool wxTestFontEncoding(const wxNativeEncodingInfo& info); // ---------------------------------------------------------------------------- // font-related functions (X and GTK) @@ -211,12 +316,4 @@ 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_