| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/font.h
- // Purpose: wxFontBase class: the interface of wxFont
- // Author: Vadim Zeitlin
- // Modified by:
- // Created: 20.09.99
- // Copyright: (c) wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_FONT_H_BASE_
- #define _WX_FONT_H_BASE_
- // ----------------------------------------------------------------------------
- // headers
- // ----------------------------------------------------------------------------
- #include "wx/defs.h" // for wxDEFAULT &c
- #include "wx/fontenc.h" // the font encoding constants
- #include "wx/gdiobj.h" // the base class
- #include "wx/gdicmn.h" // for wxGDIObjListBase
- // ----------------------------------------------------------------------------
- // forward declarations
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_FWD_CORE wxFont;
- // ----------------------------------------------------------------------------
- // font constants
- // ----------------------------------------------------------------------------
- // standard font families: these may be used only for the font creation, it
- // doesn't make sense to query an existing font for its font family as,
- // especially if the font had been created from a native font description, it
- // may be unknown
- enum wxFontFamily
- {
- wxFONTFAMILY_DEFAULT = wxDEFAULT,
- wxFONTFAMILY_DECORATIVE = wxDECORATIVE,
- wxFONTFAMILY_ROMAN = wxROMAN,
- wxFONTFAMILY_SCRIPT = wxSCRIPT,
- wxFONTFAMILY_SWISS = wxSWISS,
- wxFONTFAMILY_MODERN = wxMODERN,
- wxFONTFAMILY_TELETYPE = wxTELETYPE,
- wxFONTFAMILY_MAX,
- wxFONTFAMILY_UNKNOWN = wxFONTFAMILY_MAX
- };
- // font styles
- enum wxFontStyle
- {
- wxFONTSTYLE_NORMAL = wxNORMAL,
- wxFONTSTYLE_ITALIC = wxITALIC,
- wxFONTSTYLE_SLANT = wxSLANT,
- wxFONTSTYLE_MAX
- };
- // font weights
- enum wxFontWeight
- {
- wxFONTWEIGHT_NORMAL = wxNORMAL,
- wxFONTWEIGHT_LIGHT = wxLIGHT,
- wxFONTWEIGHT_BOLD = wxBOLD,
- wxFONTWEIGHT_MAX
- };
- // Symbolic font sizes as defined in CSS specification.
- enum wxFontSymbolicSize
- {
- wxFONTSIZE_XX_SMALL = -3,
- wxFONTSIZE_X_SMALL,
- wxFONTSIZE_SMALL,
- wxFONTSIZE_MEDIUM,
- wxFONTSIZE_LARGE,
- wxFONTSIZE_X_LARGE,
- wxFONTSIZE_XX_LARGE
- };
- // the font flag bits for the new font ctor accepting one combined flags word
- enum wxFontFlag
- {
- // no special flags: font with default weight/slant/anti-aliasing
- wxFONTFLAG_DEFAULT = 0,
- // slant flags (default: no slant)
- wxFONTFLAG_ITALIC = 1 << 0,
- wxFONTFLAG_SLANT = 1 << 1,
- // weight flags (default: medium)
- wxFONTFLAG_LIGHT = 1 << 2,
- wxFONTFLAG_BOLD = 1 << 3,
- // anti-aliasing flag: force on or off (default: the current system default)
- wxFONTFLAG_ANTIALIASED = 1 << 4,
- wxFONTFLAG_NOT_ANTIALIASED = 1 << 5,
- // underlined/strikethrough flags (default: no lines)
- wxFONTFLAG_UNDERLINED = 1 << 6,
- wxFONTFLAG_STRIKETHROUGH = 1 << 7,
- // the mask of all currently used flags
- wxFONTFLAG_MASK = wxFONTFLAG_ITALIC |
- wxFONTFLAG_SLANT |
- wxFONTFLAG_LIGHT |
- wxFONTFLAG_BOLD |
- wxFONTFLAG_ANTIALIASED |
- wxFONTFLAG_NOT_ANTIALIASED |
- wxFONTFLAG_UNDERLINED |
- wxFONTFLAG_STRIKETHROUGH
- };
- // ----------------------------------------------------------------------------
- // wxFontInfo describes a wxFont
- // ----------------------------------------------------------------------------
- class wxFontInfo
- {
- public:
- // Default ctor uses the default font size appropriate for the current
- // platform.
- wxFontInfo()
- { InitPointSize(-1); }
- // These ctors specify the font size, either in points or in pixels.
- wxEXPLICIT wxFontInfo(int pointSize)
- { InitPointSize(pointSize); }
- wxEXPLICIT wxFontInfo(const wxSize& pixelSize) : m_pixelSize(pixelSize)
- { Init(); }
- // Setters for the various attributes. All of them return the object itself
- // so that the calls to them could be chained.
- wxFontInfo& Family(wxFontFamily family)
- { m_family = family; return *this; }
- wxFontInfo& FaceName(const wxString& faceName)
- { m_faceName = faceName; return *this; }
- wxFontInfo& Bold(bool bold = true)
- { SetFlag(wxFONTFLAG_BOLD, bold); return *this; }
- wxFontInfo& Light(bool light = true)
- { SetFlag(wxFONTFLAG_LIGHT, light); return *this; }
- wxFontInfo& Italic(bool italic = true)
- { SetFlag(wxFONTFLAG_ITALIC, italic); return *this; }
- wxFontInfo& Slant(bool slant = true)
- { SetFlag(wxFONTFLAG_SLANT, slant); return *this; }
- wxFontInfo& AntiAliased(bool antiAliased = true)
- { SetFlag(wxFONTFLAG_ANTIALIASED, antiAliased); return *this; }
- wxFontInfo& Underlined(bool underlined = true)
- { SetFlag(wxFONTFLAG_UNDERLINED, underlined); return *this; }
- wxFontInfo& Strikethrough(bool strikethrough = true)
- { SetFlag(wxFONTFLAG_STRIKETHROUGH, strikethrough); return *this; }
- wxFontInfo& Encoding(wxFontEncoding encoding)
- { m_encoding = encoding; return *this; }
- // Set all flags at once.
- wxFontInfo& AllFlags(int flags)
- { m_flags = flags; return *this; }
- // Accessors are mostly meant to be used by wxFont itself to extract the
- // various pieces of the font description.
- bool IsUsingSizeInPixels() const { return m_pixelSize != wxDefaultSize; }
- int GetPointSize() const { return m_pointSize; }
- wxSize GetPixelSize() const { return m_pixelSize; }
- wxFontFamily GetFamily() const { return m_family; }
- const wxString& GetFaceName() const { return m_faceName; }
- wxFontStyle GetStyle() const
- {
- return m_flags & wxFONTFLAG_ITALIC
- ? wxFONTSTYLE_ITALIC
- : m_flags & wxFONTFLAG_SLANT
- ? wxFONTSTYLE_SLANT
- : wxFONTSTYLE_NORMAL;
- }
- wxFontWeight GetWeight() const
- {
- return m_flags & wxFONTFLAG_LIGHT
- ? wxFONTWEIGHT_LIGHT
- : m_flags & wxFONTFLAG_BOLD
- ? wxFONTWEIGHT_BOLD
- : wxFONTWEIGHT_NORMAL;
- }
- bool IsAntiAliased() const
- {
- return (m_flags & wxFONTFLAG_ANTIALIASED) != 0;
- }
- bool IsUnderlined() const
- {
- return (m_flags & wxFONTFLAG_UNDERLINED) != 0;
- }
- bool IsStrikethrough() const
- {
- return (m_flags & wxFONTFLAG_STRIKETHROUGH) != 0;
- }
- wxFontEncoding GetEncoding() const { return m_encoding; }
- // Default copy ctor, assignment operator and dtor are OK.
- private:
- // Common part of all ctor, initializing everything except the size (which
- // is initialized by the ctors themselves).
- void Init()
- {
- m_family = wxFONTFAMILY_DEFAULT;
- m_flags = wxFONTFLAG_DEFAULT;
- m_encoding = wxFONTENCODING_DEFAULT;
- }
- void InitPointSize(int pointSize)
- {
- Init();
- m_pointSize = pointSize;
- m_pixelSize = wxDefaultSize;
- }
- // Turn on or off the given bit in m_flags depending on the value of the
- // boolean argument.
- void SetFlag(int flag, bool on)
- {
- if ( on )
- m_flags |= flag;
- else
- m_flags &= ~flag;
- }
- // The size information: if m_pixelSize is valid (!= wxDefaultSize), then
- // it is used. Otherwise m_pointSize is used, taking into account that if
- // it is == -1, it means that the platform dependent font size should be
- // used.
- int m_pointSize;
- wxSize m_pixelSize;
- wxFontFamily m_family;
- wxString m_faceName;
- int m_flags;
- wxFontEncoding m_encoding;
- };
- // ----------------------------------------------------------------------------
- // wxFontBase represents a font object
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_FWD_CORE wxNativeFontInfo;
- class WXDLLIMPEXP_CORE wxFontBase : public wxGDIObject
- {
- public:
- /*
- derived classes should provide the following ctors:
- wxFont();
- wxFont(const wxFontInfo& info);
- wxFont(const wxString& nativeFontInfoString);
- wxFont(const wxNativeFontInfo& info);
- wxFont(int size,
- wxFontFamily family,
- wxFontStyle style,
- wxFontWeight weight,
- bool underlined = false,
- const wxString& face = wxEmptyString,
- wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
- wxFont(const wxSize& pixelSize,
- wxFontFamily family,
- wxFontStyle style,
- wxFontWeight weight,
- bool underlined = false,
- const wxString& face = wxEmptyString,
- wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
- */
- // creator function
- virtual ~wxFontBase();
- #if FUTURE_WXWIN_COMPATIBILITY_3_0
- // from the font components
- static wxFont *New(
- int pointSize, // size of the font in points
- int family, // see wxFontFamily enum
- int style, // see wxFontStyle enum
- int weight, // see wxFontWeight enum
- bool underlined = false, // not underlined by default
- const wxString& face = wxEmptyString, // facename
- wxFontEncoding encoding = wxFONTENCODING_DEFAULT) // ISO8859-X, ...
- { return New(pointSize, (wxFontFamily)family, (wxFontStyle)style,
- (wxFontWeight)weight, underlined, face, encoding); }
- // from the font components
- static wxFont *New(
- const wxSize& pixelSize, // size of the font in pixels
- int family, // see wxFontFamily enum
- int style, // see wxFontStyle enum
- int weight, // see wxFontWeight enum
- bool underlined = false, // not underlined by default
- const wxString& face = wxEmptyString, // facename
- wxFontEncoding encoding = wxFONTENCODING_DEFAULT) // ISO8859-X, ...
- { return New(pixelSize, (wxFontFamily)family, (wxFontStyle)style,
- (wxFontWeight)weight, underlined, face, encoding); }
- #endif
- // from the font components
- static wxFont *New(
- int pointSize, // size of the font in points
- wxFontFamily family, // see wxFontFamily enum
- wxFontStyle style, // see wxFontStyle enum
- wxFontWeight weight, // see wxFontWeight enum
- bool underlined = false, // not underlined by default
- const wxString& face = wxEmptyString, // facename
- wxFontEncoding encoding = wxFONTENCODING_DEFAULT); // ISO8859-X, ...
- // from the font components
- static wxFont *New(
- const wxSize& pixelSize, // size of the font in pixels
- wxFontFamily family, // see wxFontFamily enum
- wxFontStyle style, // see wxFontStyle enum
- wxFontWeight weight, // see wxFontWeight enum
- bool underlined = false, // not underlined by default
- const wxString& face = wxEmptyString, // facename
- wxFontEncoding encoding = wxFONTENCODING_DEFAULT); // ISO8859-X, ...
- // from the font components but using the font flags instead of separate
- // parameters for each flag
- static wxFont *New(int pointSize,
- wxFontFamily family,
- int flags = wxFONTFLAG_DEFAULT,
- const wxString& face = wxEmptyString,
- wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
- // from the font components but using the font flags instead of separate
- // parameters for each flag
- static wxFont *New(const wxSize& pixelSize,
- wxFontFamily family,
- int flags = wxFONTFLAG_DEFAULT,
- const wxString& face = wxEmptyString,
- wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
- // from the (opaque) native font description object
- static wxFont *New(const wxNativeFontInfo& nativeFontDesc);
- // from the string representation of wxNativeFontInfo
- static wxFont *New(const wxString& strNativeFontDesc);
- // comparison
- bool operator==(const wxFont& font) const;
- bool operator!=(const wxFont& font) const { return !(*this == font); }
- // accessors: get the font characteristics
- virtual int GetPointSize() const = 0;
- virtual wxSize GetPixelSize() const;
- virtual bool IsUsingSizeInPixels() const;
- wxFontFamily GetFamily() const;
- virtual wxFontStyle GetStyle() const = 0;
- virtual wxFontWeight GetWeight() const = 0;
- virtual bool GetUnderlined() const = 0;
- virtual bool GetStrikethrough() const { return false; }
- virtual wxString GetFaceName() const = 0;
- virtual wxFontEncoding GetEncoding() const = 0;
- virtual const wxNativeFontInfo *GetNativeFontInfo() const = 0;
- virtual bool IsFixedWidth() const;
- wxString GetNativeFontInfoDesc() const;
- wxString GetNativeFontInfoUserDesc() const;
- // change the font characteristics
- virtual void SetPointSize( int pointSize ) = 0;
- virtual void SetPixelSize( const wxSize& pixelSize );
- virtual void SetFamily( wxFontFamily family ) = 0;
- virtual void SetStyle( wxFontStyle style ) = 0;
- virtual void SetWeight( wxFontWeight weight ) = 0;
- virtual void SetUnderlined( bool underlined ) = 0;
- virtual void SetStrikethrough( bool WXUNUSED(strikethrough) ) {}
- virtual void SetEncoding(wxFontEncoding encoding) = 0;
- virtual bool SetFaceName( const wxString& faceName );
- void SetNativeFontInfo(const wxNativeFontInfo& info)
- { DoSetNativeFontInfo(info); }
- bool SetNativeFontInfo(const wxString& info);
- bool SetNativeFontInfoUserDesc(const wxString& info);
- // Symbolic font sizes support: set the font size to "large" or "very
- // small" either absolutely (i.e. compared to the default font size) or
- // relatively to the given font size.
- void SetSymbolicSize(wxFontSymbolicSize size);
- void SetSymbolicSizeRelativeTo(wxFontSymbolicSize size, int base)
- {
- SetPointSize(AdjustToSymbolicSize(size, base));
- }
- // Adjust the base size in points according to symbolic size.
- static int AdjustToSymbolicSize(wxFontSymbolicSize size, int base);
- // translate the fonts into human-readable string (i.e. GetStyleString()
- // will return "wxITALIC" for an italic font, ...)
- wxString GetFamilyString() const;
- wxString GetStyleString() const;
- wxString GetWeightString() const;
- // the default encoding is used for creating all fonts with default
- // encoding parameter
- static wxFontEncoding GetDefaultEncoding() { return ms_encodingDefault; }
- static void SetDefaultEncoding(wxFontEncoding encoding);
- // this doesn't do anything and is kept for compatibility only
- #if WXWIN_COMPATIBILITY_2_8
- wxDEPRECATED_INLINE(void SetNoAntiAliasing(bool no = true), wxUnusedVar(no);)
- wxDEPRECATED_INLINE(bool GetNoAntiAliasing() const, return false;)
- #endif // WXWIN_COMPATIBILITY_2_8
- protected:
- // the function called by both overloads of SetNativeFontInfo()
- virtual void DoSetNativeFontInfo(const wxNativeFontInfo& info);
- // The function called by public GetFamily(): it can return
- // wxFONTFAMILY_UNKNOWN unlike the public method (see comment there).
- virtual wxFontFamily DoGetFamily() const = 0;
- // Helper functions to recover wxFONTSTYLE/wxFONTWEIGHT and underlined flag
- // values from flags containing a combination of wxFONTFLAG_XXX.
- static wxFontStyle GetStyleFromFlags(int flags)
- {
- return flags & wxFONTFLAG_ITALIC
- ? wxFONTSTYLE_ITALIC
- : flags & wxFONTFLAG_SLANT
- ? wxFONTSTYLE_SLANT
- : wxFONTSTYLE_NORMAL;
- }
- static wxFontWeight GetWeightFromFlags(int flags)
- {
- return flags & wxFONTFLAG_LIGHT
- ? wxFONTWEIGHT_LIGHT
- : flags & wxFONTFLAG_BOLD
- ? wxFONTWEIGHT_BOLD
- : wxFONTWEIGHT_NORMAL;
- }
- static bool GetUnderlinedFromFlags(int flags)
- {
- return (flags & wxFONTFLAG_UNDERLINED) != 0;
- }
- static bool GetStrikethroughFromFlags(int flags)
- {
- return (flags & wxFONTFLAG_STRIKETHROUGH) != 0;
- }
- private:
- // the currently default encoding: by default, it's the default system
- // encoding, but may be changed by the application using
- // SetDefaultEncoding() to make all subsequent fonts created without
- // specifying encoding parameter using this encoding
- static wxFontEncoding ms_encodingDefault;
- };
- // wxFontBase <-> wxString utilities, used by wxConfig
- WXDLLIMPEXP_CORE wxString wxToString(const wxFontBase& font);
- WXDLLIMPEXP_CORE bool wxFromString(const wxString& str, wxFontBase* font);
- #if FUTURE_WXWIN_COMPATIBILITY_3_0
- #define wxDECLARE_FONT_COMPAT_SETTER \
- wxDEPRECATED_FUTURE( void SetFamily(int family) ) \
- { SetFamily((wxFontFamily)family); } \
- wxDEPRECATED_FUTURE( void SetStyle(int style) ) \
- { SetStyle((wxFontStyle)style); } \
- wxDEPRECATED_FUTURE( void SetWeight(int weight) ) \
- { SetWeight((wxFontWeight)weight); } \
- wxDEPRECATED_FUTURE( void SetFamily(wxDeprecatedGUIConstants family) ) \
- { SetFamily((wxFontFamily)family); } \
- wxDEPRECATED_FUTURE( void SetStyle(wxDeprecatedGUIConstants style) ) \
- { SetStyle((wxFontStyle)style); } \
- wxDEPRECATED_FUTURE( void SetWeight(wxDeprecatedGUIConstants weight) ) \
- { SetWeight((wxFontWeight)weight); }
- #else
- #define wxDECLARE_FONT_COMPAT_SETTER /*empty*/
- #endif
- // this macro must be used in all derived wxFont classes declarations
- #define wxDECLARE_COMMON_FONT_METHODS() \
- wxDECLARE_FONT_COMPAT_SETTER \
- \
- /* functions for modifying font in place */ \
- wxFont& MakeBold(); \
- wxFont& MakeItalic(); \
- wxFont& MakeUnderlined(); \
- wxFont& MakeStrikethrough(); \
- wxFont& MakeLarger() { return Scale(1.2f); } \
- wxFont& MakeSmaller() { return Scale(1/1.2f); } \
- wxFont& Scale(float x); \
- /* functions for creating fonts based on this one */ \
- wxFont Bold() const; \
- wxFont Italic() const; \
- wxFont Underlined() const; \
- wxFont Strikethrough() const; \
- wxFont Larger() const { return Scaled(1.2f); } \
- wxFont Smaller() const { return Scaled(1/1.2f); } \
- wxFont Scaled(float x) const
- // include the real class declaration
- #if defined(__WXMSW__)
- #include "wx/msw/font.h"
- #elif defined(__WXMOTIF__)
- #include "wx/motif/font.h"
- #elif defined(__WXGTK20__)
- #include "wx/gtk/font.h"
- #elif defined(__WXGTK__)
- #include "wx/gtk1/font.h"
- #elif defined(__WXX11__)
- #include "wx/x11/font.h"
- #elif defined(__WXDFB__)
- #include "wx/dfb/font.h"
- #elif defined(__WXMAC__)
- #include "wx/osx/font.h"
- #elif defined(__WXCOCOA__)
- #include "wx/cocoa/font.h"
- #elif defined(__WXPM__)
- #include "wx/os2/font.h"
- #endif
- class WXDLLIMPEXP_CORE wxFontList: public wxGDIObjListBase
- {
- public:
- wxFont *FindOrCreateFont(int pointSize,
- wxFontFamily family,
- wxFontStyle style,
- wxFontWeight weight,
- bool underline = false,
- const wxString& face = wxEmptyString,
- wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
- #if FUTURE_WXWIN_COMPATIBILITY_3_0
- wxFont *FindOrCreateFont(int pointSize, int family, int style, int weight,
- bool underline = false,
- const wxString& face = wxEmptyString,
- wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
- { return FindOrCreateFont(pointSize, (wxFontFamily)family, (wxFontStyle)style,
- (wxFontWeight)weight, underline, face, encoding); }
- #endif
- #if WXWIN_COMPATIBILITY_2_6
- wxDEPRECATED( void AddFont(wxFont*) );
- wxDEPRECATED( void RemoveFont(wxFont*) );
- #endif
- };
- extern WXDLLIMPEXP_DATA_CORE(wxFontList*) wxTheFontList;
- // provide comparison operators to allow code such as
- //
- // if ( font.GetStyle() == wxFONTSTYLE_SLANT )
- //
- // to compile without warnings which it would otherwise provoke from some
- // compilers as it compares elements of different enums
- #if FUTURE_WXWIN_COMPATIBILITY_3_0
- // Unfortunately some compilers have ambiguity issues when enum comparisons are
- // overloaded so we have to disable the overloads in this case, see
- // wxCOMPILER_NO_OVERLOAD_ON_ENUM definition in wx/platform.h for more details.
- #ifndef wxCOMPILER_NO_OVERLOAD_ON_ENUM
- inline bool operator==(wxFontFamily s, wxDeprecatedGUIConstants t)
- { return static_cast<int>(s) == static_cast<int>(t); }
- inline bool operator!=(wxFontFamily s, wxDeprecatedGUIConstants t)
- { return !(s == t); }
- inline bool operator==(wxFontStyle s, wxDeprecatedGUIConstants t)
- { return static_cast<int>(s) == static_cast<int>(t); }
- inline bool operator!=(wxFontStyle s, wxDeprecatedGUIConstants t)
- { return !(s == t); }
- inline bool operator==(wxFontWeight s, wxDeprecatedGUIConstants t)
- { return static_cast<int>(s) == static_cast<int>(t); }
- inline bool operator!=(wxFontWeight s, wxDeprecatedGUIConstants t)
- { return !(s == t); }
- #endif // // wxCOMPILER_NO_OVERLOAD_ON_ENUM
- #endif // FUTURE_WXWIN_COMPATIBILITY_3_0
- #endif
- // _WX_FONT_H_BASE_
|