+// 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;
+};
+