]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/font.h
Don't define __STRICT_ANSI__, we should build both with and without it.
[wxWidgets.git] / include / wx / font.h
index b14281221e0ffcb638a3a0dddb658715a3bde063..10a6f0e5d783443de0c6fc03c6a50cb53b94fbb7 100644 (file)
@@ -4,7 +4,6 @@
 // Author:      Vadim Zeitlin
 // Modified by:
 // Created:     20.09.99
 // Author:      Vadim Zeitlin
 // Modified by:
 // Created:     20.09.99
-// RCS-ID:      $Id$
 // Copyright:   (c) wxWidgets team
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 // Copyright:   (c) wxWidgets team
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -111,6 +110,145 @@ enum wxFontFlag
                       wxFONTFLAG_STRIKETHROUGH
 };
 
                       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
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // wxFontBase represents a font object
 // ----------------------------------------------------------------------------
@@ -124,6 +262,7 @@ public:
         derived classes should provide the following ctors:
 
     wxFont();
         derived classes should provide the following ctors:
 
     wxFont();
+    wxFont(const wxFontInfo& info);
     wxFont(const wxString& nativeFontInfoString);
     wxFont(const wxNativeFontInfo& info);
     wxFont(int size,
     wxFont(const wxString& nativeFontInfoString);
     wxFont(const wxNativeFontInfo& info);
     wxFont(int size,
@@ -293,7 +432,7 @@ protected:
     virtual wxFontFamily DoGetFamily() const = 0;
 
 
     virtual wxFontFamily DoGetFamily() const = 0;
 
 
-    // Helper functions to recover wxFONTSTYLE/wxFONTWEIGHT and underlined flg
+    // Helper functions to recover wxFONTSTYLE/wxFONTWEIGHT and underlined flag
     // values from flags containing a combination of wxFONTFLAG_XXX.
     static wxFontStyle GetStyleFromFlags(int flags)
     {
     // values from flags containing a combination of wxFONTFLAG_XXX.
     static wxFontStyle GetStyleFromFlags(int flags)
     {