X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f97c985452b20a8c2f0bbfb1d0275298bf09fb45..db51298a741c46719a70884f750befc3b5749036:/include/wx/motif/font.h diff --git a/include/wx/motif/font.h b/include/wx/motif/font.h index 769b4d6352..935581f2e4 100644 --- a/include/wx/motif/font.h +++ b/include/wx/motif/font.h @@ -1,134 +1,163 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: font.h +// Name: wx/motif/font.h // Purpose: wxFont class // Author: Julian Smart // Modified by: // Created: 17/09/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_FONT_H_ #define _WX_FONT_H_ -#ifdef __GNUG__ -#pragma interface "font.h" +#if __WXMOTIF20__ && !__WXLESSTIF__ + #define wxMOTIF_USE_RENDER_TABLE 1 +#else + #define wxMOTIF_USE_RENDER_TABLE 0 #endif +#define wxMOTIF_NEW_FONT_HANDLING wxMOTIF_USE_RENDER_TABLE -#include "wx/gdiobj.h" -#include "wx/list.h" +class wxXFont; -class WXDLLEXPORT wxFont; - -// For every wxFont, there must be a font for each display and scale requested. -// So these objects are stored in wxFontRefData::m_fonts -class WXDLLEXPORT wxXFont: public wxObject +// Font +class WXDLLIMPEXP_CORE wxFont : public wxFontBase { public: - wxXFont(); - ~wxXFont(); + // ctors and such + wxFont() { } + + wxFont(const wxNativeFontInfo& info); + +#if FUTURE_WXWIN_COMPATIBILITY_3_0 + wxFont(int size, + int family, + int style, + int weight, + bool underlined = false, + const wxString& face = wxEmptyString, + wxFontEncoding encoding = wxFONTENCODING_DEFAULT) + { + (void)Create(size, (wxFontFamily)family, (wxFontStyle)style, (wxFontWeight)weight, underlined, face, encoding); + } +#endif - WXFontStructPtr m_fontStruct; // XFontStruct - WXFontList m_fontList; // Motif XmFontList - WXDisplay* m_display; // XDisplay - int m_scale; // Scale * 100 -}; + wxFont(int size, + wxFontFamily family, + wxFontStyle style, + wxFontWeight weight, + bool underlined = false, + const wxString& face = wxEmptyString, + wxFontEncoding encoding = wxFONTENCODING_DEFAULT) + { + Create(size, family, style, weight, underlined, face, encoding); + } + + wxFont(const wxSize& pixelSize, + wxFontFamily family, + wxFontStyle style, + wxFontWeight weight, + bool underlined = false, + const wxString& face = wxEmptyString, + wxFontEncoding encoding = wxFONTENCODING_DEFAULT) + { + Create(10, family, style, weight, underlined, face, encoding); + SetPixelSize(pixelSize); + } + + wxFont(int pointSize, + wxFontFamily family, + int flags = wxFONTFLAG_DEFAULT, + const wxString& face = wxEmptyString, + wxFontEncoding encoding = wxFONTENCODING_DEFAULT) + { + Create(pointSize, family, + GetStyleFromFlags(flags), + GetWeightFromFlags(flags), + GetUnderlinedFromFlags(flags), + face, encoding); + } + + bool Create(int size, + wxFontFamily family, + wxFontStyle style, + wxFontWeight weight, + bool underlined = false, + const wxString& face = wxEmptyString, + wxFontEncoding encoding = wxFONTENCODING_DEFAULT); + + // wxMOTIF-specific + bool Create(const wxString& fontname, + wxFontEncoding fontenc = wxFONTENCODING_DEFAULT); + bool Create(const wxNativeFontInfo& fontinfo); + + virtual ~wxFont(); + + // implement base class pure virtuals + virtual int GetPointSize() const; + virtual wxFontStyle GetStyle() const; + virtual wxFontWeight GetWeight() const; + virtual bool GetUnderlined() const; + virtual wxString GetFaceName() const; + virtual wxFontEncoding GetEncoding() const; + virtual const wxNativeFontInfo *GetNativeFontInfo() const; + + virtual void SetPointSize(int pointSize); + virtual void SetFamily(wxFontFamily family); + virtual void SetStyle(wxFontStyle style); + virtual void SetWeight(wxFontWeight weight); + virtual bool SetFaceName(const wxString& faceName); + virtual void SetUnderlined(bool underlined); + virtual void SetEncoding(wxFontEncoding encoding); + + wxDECLARE_COMMON_FONT_METHODS(); + + // Implementation + + // Find an existing, or create a new, XFontStruct + // based on this wxFont and the given scale. Append the + // font to list in the private data for future reference. + + // TODO This is a fairly basic implementation, that doesn't + // allow for different facenames, and also doesn't do a mapping + // between 'standard' facenames (e.g. Arial, Helvetica, Times Roman etc.) + // and the fonts that are available on a particular system. + // Maybe we need to scan the user's machine to build up a profile + // of the fonts and a mapping file. + + // Return font struct, and optionally the Motif font list + wxXFont *GetInternalFont(double scale = 1.0, + WXDisplay* display = NULL) const; + + // These two are helper functions for convenient access of the above. +#if wxMOTIF_USE_RENDER_TABLE + WXFontSet GetFontSet(double scale, WXDisplay* display = NULL) const; + WXRenderTable GetRenderTable(WXDisplay* display) const; +#else // if !wxMOTIF_USE_RENDER_TABLE + WXFontStructPtr GetFontStruct(double scale = 1.0, + WXDisplay* display = NULL) const; + WXFontList GetFontList(double scale = 1.0, + WXDisplay* display = NULL) const; +#endif // !wxMOTIF_USE_RENDER_TABLE + // returns either a XmFontList or XmRenderTable, depending + // on Motif version + WXFontType GetFontType(WXDisplay* display) const; + // like the function above but does a copy for XmFontList + WXFontType GetFontTypeC(WXDisplay* display) const; + static WXString GetFontTag(); -class WXDLLEXPORT wxFontRefData: public wxGDIRefData -{ - friend class WXDLLEXPORT wxFont; -public: - wxFontRefData(); - wxFontRefData(const wxFontRefData& data); - ~wxFontRefData(); protected: - int m_pointSize; - int m_family; - int m_style; - int m_weight; - bool m_underlined; - wxString m_faceName; - - // A list of wxXFonts - wxList m_fonts; -}; + virtual wxGDIRefData *CreateGDIRefData() const; + virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const; -#define M_FONTDATA ((wxFontRefData *)m_refData) + virtual void DoSetNativeFontInfo( const wxNativeFontInfo& info ); + virtual wxFontFamily DoGetFamily() const; -WXDLLEXPORT_DATA(extern const char*) wxEmptyString; + void Unshare(); -// Font -class WXDLLEXPORT wxFont: public wxGDIObject -{ - DECLARE_DYNAMIC_CLASS(wxFont) -public: - wxFont(); - wxFont(int pointSize, int family, int style, int weight, bool underlined = FALSE, const wxString& faceName = wxEmptyString); - inline wxFont(const wxFont& font) { Ref(font); } - inline wxFont(const wxFont* font) { if (font) Ref(*font); } - - ~wxFont(); - - bool Create(int pointSize, int family, int style, int weight, bool underlined = FALSE, const wxString& faceName = wxEmptyString); - - virtual bool Ok() const { return (m_refData != NULL) ; } - - inline int GetPointSize() const { return M_FONTDATA->m_pointSize; } - inline int GetFamily() const { return M_FONTDATA->m_family; } - inline int GetStyle() const { return M_FONTDATA->m_style; } - inline int GetWeight() const { return M_FONTDATA->m_weight; } - wxString GetFamilyString() const ; - wxString GetFaceName() const ; - wxString GetStyleString() const ; - wxString GetWeightString() const ; - inline bool GetUnderlined() const { return M_FONTDATA->m_underlined; } - - void SetPointSize(int pointSize); - void SetFamily(int family); - void SetStyle(int style); - void SetWeight(int weight); - void SetFaceName(const wxString& faceName); - void SetUnderlined(bool underlined); - - inline wxFont& operator = (const wxFont& font) { if (*this == font) return (*this); Ref(font); return *this; } - inline bool operator == (const wxFont& font) { return m_refData == font.m_refData; } - inline bool operator != (const wxFont& font) { return m_refData != font.m_refData; } - -// Implementation - - // Find an existing, or create a new, XFontStruct - // based on this wxFont and the given scale. Append the - // font to list in the private data for future reference. - - // TODO This is a fairly basic implementation, that doesn't - // allow for different facenames, and also doesn't do a mapping - // between 'standard' facenames (e.g. Arial, Helvetica, Times Roman etc.) - // and the fonts that are available on a particular system. - // Maybe we need to scan the user's machine to build up a profile - // of the fonts and a mapping file. - - // Return font struct, and optionally the Motif font list - wxXFont* GetInternalFont(double scale = 1.0, WXDisplay* display = NULL) const; - - // These two are helper functions for convenient access of the above. - inline WXFontStructPtr GetFontStruct(double scale = 1.0, WXDisplay* display = NULL) const - { - wxXFont* f = GetInternalFont(scale, display); - return (f ? f->m_fontStruct : (WXFontStructPtr) 0); - } - WXFontList GetFontList(double scale = 1.0, WXDisplay* display = NULL) const - { - wxXFont* f = GetInternalFont(scale, display); - return (f ? f->m_fontList : (WXFontList) 0); - } - - WXFontStructPtr LoadQueryFont(int pointSize, int family, int style, - int weight, bool underlined) const; -protected: - bool RealizeResource(); - void Unshare(); +private: + DECLARE_DYNAMIC_CLASS(wxFont) }; -#endif - // _WX_FONT_H_ +#endif // _WX_FONT_H_