]> git.saurik.com Git - wxWidgets.git/commitdiff
Add wxFontInfo class to allow using named parameters for wxFont creation.
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 30 Apr 2013 10:27:38 +0000 (10:27 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 30 Apr 2013 10:27:38 +0000 (10:27 +0000)
This helper class allows to create wxFonts using shorter and more readable
code, e.g.

wxFont font(12, wxFONTFLAG_DEFAULT,
    wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, true,
    "DejaVu Sans");

can now be written simply as

wxFont font(wxFontInfo(12).FaceName("DejaVu Sans").Underlined());

Remove the ctor from font flags added in r70445 as it's not needed any longer
now that we have this one and adding it resulted in compilation errors in the
existing code which compiled with 2.8 because of ambiguities between that ctor
and wxFont(int size, int family, int style, int weight. bool underlined, ...)
one, e.g.

wxFont(12, wxFONTFAMILY_SWISS, wxNORMAL, wxNORMAL)

didn't compile any more but it does compile again now.

See #9907.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73885 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

15 files changed:
docs/changes.txt
include/wx/cocoa/font.h
include/wx/dfb/font.h
include/wx/font.h
include/wx/gtk/font.h
include/wx/gtk1/font.h
include/wx/motif/font.h
include/wx/msw/font.h
include/wx/os2/font.h
include/wx/osx/font.h
include/wx/x11/font.h
interface/wx/font.h
samples/font/font.cpp
src/gtk/font.cpp
src/msw/font.cpp

index 061af1a26f4f03428a73e7976ba1c69a40bcb921..f3371da273306d41789d10240553138320d58793 100644 (file)
@@ -635,6 +635,7 @@ All (GUI):
 - Add wxEVT_GRID_COL_AUTO_SIZE event (Igor Korot).
 - Add chainable wxWizardPageSimple::Chain() overload.
 - Add wxTextEntryDialog::SetMaxLength() (derEine).
 - Add wxEVT_GRID_COL_AUTO_SIZE event (Igor Korot).
 - Add chainable wxWizardPageSimple::Chain() overload.
 - Add wxTextEntryDialog::SetMaxLength() (derEine).
+- Add more convenient wxFont(wxFontInfo) ctor.
 
 wxGTK:
 
 
 wxGTK:
 
index a8989845dbe531aa31e14074aed4408e2a589b9f..9ea87d6c2f8e75f414afce34d2ab11e8903ded52 100644 (file)
@@ -38,6 +38,20 @@ public:
      */
     wxFont() { }
 
      */
     wxFont() { }
 
+    wxFont(const wxFontInfo& info)
+    {
+        Create(info.GetPointSize(),
+               info.GetFamily(),
+               info.GetStyle(),
+               info.GetWeight(),
+               info.IsUnderlined(),
+               info.GetFaceName(),
+               info.GetEncoding());
+
+        if ( info.IsUsingSizeInPixels() )
+            SetPixelSize(info.GetPixelSize());
+    }
+
     /*! @abstract   Platform-independent construction with individual properties
      */
 #if FUTURE_WXWIN_COMPATIBILITY_3_0
     /*! @abstract   Platform-independent construction with individual properties
      */
 #if FUTURE_WXWIN_COMPATIBILITY_3_0
@@ -75,19 +89,6 @@ public:
         SetPixelSize(pixelSize);
     }
 
         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);
-    }
-
     /*! @abstract   Construction with opaque wxNativeFontInfo
      */
     wxFont(const wxNativeFontInfo& info)
     /*! @abstract   Construction with opaque wxNativeFontInfo
      */
     wxFont(const wxNativeFontInfo& info)
index 3ccdebb42241158dec9ca25e19f47d375e7df10d..db68dbd3ffa2224c86be9688b22b4cb33e76bd67 100644 (file)
@@ -23,6 +23,21 @@ class WXDLLIMPEXP_CORE wxFont : public wxFontBase
 {
 public:
     wxFont() {}
 {
 public:
     wxFont() {}
+
+    wxFont(const wxFontInfo& info)
+    {
+        Create(info.GetPointSize(),
+               info.GetFamily(),
+               info.GetStyle(),
+               info.GetWeight(),
+               info.IsUnderlined(),
+               info.GetFaceName(),
+               info.GetEncoding());
+
+        if ( info.IsUsingSizeInPixels() )
+            SetPixelSize(info.GetPixelSize());
+    }
+
     wxFont(const wxNativeFontInfo& info) { Create(info); }
 #if FUTURE_WXWIN_COMPATIBILITY_3_0
     wxFont(int size,
     wxFont(const wxNativeFontInfo& info) { Create(info); }
 #if FUTURE_WXWIN_COMPATIBILITY_3_0
     wxFont(int size,
@@ -60,19 +75,6 @@ public:
         SetPixelSize(pixelSize);
     }
 
         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,
     bool Create(int size,
                 wxFontFamily family,
                 wxFontStyle style,
index b14281221e0ffcb638a3a0dddb658715a3bde063..cae9bd8d5f96ae0df6a14da5b0100e6a01b6f741 100644 (file)
@@ -111,6 +111,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 +263,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 +433,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)
     {
index bb0c5ec7b083411c80be6784eb7022ffd0b59f38..400e37285187cd2eec96feec3e6260f26568ba86 100644 (file)
@@ -19,7 +19,8 @@ class WXDLLIMPEXP_CORE wxFont : public wxFontBase
 public:
     wxFont() { }
 
 public:
     wxFont() { }
 
-    // wxGTK-specific
+    wxFont(const wxFontInfo& info);
+
     wxFont(const wxString& nativeFontInfoString)
     {
         Create(nativeFontInfoString);
     wxFont(const wxString& nativeFontInfoString)
     {
         Create(nativeFontInfoString);
@@ -63,12 +64,6 @@ public:
         SetPixelSize(pixelSize);
     }
 
         SetPixelSize(pixelSize);
     }
 
-    wxFont(int pointSize,
-           wxFontFamily family,
-           int flags = wxFONTFLAG_DEFAULT,
-           const wxString& face = wxEmptyString,
-           wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
-
     bool Create(int size,
                 wxFontFamily family,
                 wxFontStyle style,
     bool Create(int size,
                 wxFontFamily family,
                 wxFontStyle style,
index 87d21b1f1198fa3c8faa46a558c1dd35387c1924..d2e6fd489ccf56ad1a78b91bcef85f64eab841b5 100644 (file)
@@ -32,7 +32,20 @@ public:
     // ctors and such
     wxFont() { }
 
     // ctors and such
     wxFont() { }
 
-    // wxGTK-specific
+    wxFont(const wxFontInfo& info)
+    {
+        Create(info.GetPointSize(),
+               info.GetFamily(),
+               info.GetStyle(),
+               info.GetWeight(),
+               info.IsUnderlined(),
+               info.GetFaceName(),
+               info.GetEncoding());
+
+        if ( info.IsUsingSizeInPixels() )
+            SetPixelSize(info.GetPixelSize());
+    }
+
     wxFont(const wxString& fontname)
     {
         Create(fontname);
     wxFont(const wxString& fontname)
     {
         Create(fontname);
@@ -76,19 +89,6 @@ public:
         SetPixelSize(pixelSize);
     }
 
         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,
     bool Create(int size,
                 wxFontFamily family,
                 wxFontStyle style,
index 935581f2e4d867f7f72bbe1f050ac2015719e6f5..ef259f9a5528caaa7d443d6503086aa8c4daa0ce 100644 (file)
@@ -28,6 +28,20 @@ public:
     // ctors and such
     wxFont() { }
 
     // ctors and such
     wxFont() { }
 
+    wxFont(const wxFontInfo& info)
+    {
+        Create(info.GetPointSize(),
+               info.GetFamily(),
+               info.GetStyle(),
+               info.GetWeight(),
+               info.IsUnderlined(),
+               info.GetFaceName(),
+               info.GetEncoding());
+
+        if ( info.IsUsingSizeInPixels() )
+            SetPixelSize(info.GetPixelSize());
+    }
+
     wxFont(const wxNativeFontInfo& info);
 
 #if FUTURE_WXWIN_COMPATIBILITY_3_0
     wxFont(const wxNativeFontInfo& info);
 
 #if FUTURE_WXWIN_COMPATIBILITY_3_0
@@ -66,19 +80,6 @@ public:
         SetPixelSize(pixelSize);
     }
 
         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,
     bool Create(int size,
                 wxFontFamily family,
                 wxFontStyle style,
index 7a83f7665375fee5cac1ac0f14195a60c8373ded..d95b0da260d09c57c69983567f1bf0b75e350425 100644 (file)
@@ -24,6 +24,8 @@ public:
     // ctors and such
     wxFont() { }
 
     // ctors and such
     wxFont() { }
 
+    wxFont(const wxFontInfo& info);
+
 #if FUTURE_WXWIN_COMPATIBILITY_3_0
     wxFont(int size,
            int family,
 #if FUTURE_WXWIN_COMPATIBILITY_3_0
     wxFont(int size,
            int family,
@@ -91,12 +93,6 @@ public:
         Create(info, hFont);
     }
 
         Create(info, hFont);
     }
 
-    wxFont(int pointSize,
-           wxFontFamily family,
-           int flags = wxFONTFLAG_DEFAULT,
-           const wxString& face = wxEmptyString,
-           wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
-
     wxFont(const wxString& fontDesc);
 
 
     wxFont(const wxString& fontDesc);
 
 
index 39be035dfc00d22a13afaae53d2c618852bfbd23..e0eabda61f31e61f337ed3b57ca76077d48a230c 100644 (file)
@@ -27,6 +27,20 @@ public:
     // ctors and such
     wxFont() { }
 
     // ctors and such
     wxFont() { }
 
+    wxFont(const wxFontInfo& info)
+    {
+        Create(info.GetPointSize(),
+               info.GetFamily(),
+               info.GetStyle(),
+               info.GetWeight(),
+               info.IsUnderlined(),
+               info.GetFaceName(),
+               info.GetEncoding());
+
+        if ( info.IsUsingSizeInPixels() )
+            SetPixelSize(info.GetPixelSize());
+    }
+
 #if FUTURE_WXWIN_COMPATIBILITY_3_0
     wxFont(int size,
            int family,
 #if FUTURE_WXWIN_COMPATIBILITY_3_0
     wxFont(int size,
            int family,
@@ -63,19 +77,6 @@ public:
         SetPixelSize(pixelSize);
     }
 
         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,
     bool Create(int size,
                 wxFontFamily family,
                 wxFontStyle style,
index 007eaef9cfe6f7e2cccea5bb3bc5aa1e45f68993..d5e277f979c0b0e86c09bcf215a736f9a9f3c390 100644 (file)
@@ -37,6 +37,20 @@ public:
     // ctors and such
     wxFont() { }
 
     // ctors and such
     wxFont() { }
 
+    wxFont(const wxFontInfo& info)
+    {
+        Create(info.GetPointSize(),
+               info.GetFamily(),
+               info.GetStyle(),
+               info.GetWeight(),
+               info.IsUnderlined(),
+               info.GetFaceName(),
+               info.GetEncoding());
+
+        if ( info.IsUsingSizeInPixels() )
+            SetPixelSize(info.GetPixelSize());
+    }
+
     wxFont( wxOSXSystemFont systemFont );
 
 #if wxOSX_USE_COCOA
     wxFont( wxOSXSystemFont systemFont );
 
 #if wxOSX_USE_COCOA
@@ -79,19 +93,6 @@ public:
         SetPixelSize(pixelSize);
     }
 
         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,
     bool Create(int size,
                 wxFontFamily family,
                 wxFontStyle style,
index a7cabdeb9f5240a8c6091cfecacb425ec471ab2d..f05177a46dae0631029de6b817fd94dfdf5d1463 100644 (file)
@@ -21,6 +21,20 @@ public:
     // ctors and such
     wxFont() { }
 
     // ctors and such
     wxFont() { }
 
+    wxFont(const wxFontInfo& info)
+    {
+        Create(info.GetPointSize(),
+               info.GetFamily(),
+               info.GetStyle(),
+               info.GetWeight(),
+               info.IsUnderlined(),
+               info.GetFaceName(),
+               info.GetEncoding());
+
+        if ( info.IsUsingSizeInPixels() )
+            SetPixelSize(info.GetPixelSize());
+    }
+
 #if FUTURE_WXWIN_COMPATIBILITY_3_0
     wxFont(int size,
            int family,
 #if FUTURE_WXWIN_COMPATIBILITY_3_0
     wxFont(int size,
            int family,
@@ -57,19 +71,6 @@ public:
         SetPixelSize(pixelSize);
     }
 
         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,
     bool Create(int size,
                 wxFontFamily family,
                 wxFontStyle style,
index 766ce5d22595d7f0d8a1691614de03236bc3e5ec..fee764d16cc5517181403537658bfabf6e98ebe6 100644 (file)
@@ -270,12 +270,155 @@ enum wxFontEncoding
 };
 
 
 };
 
 
+/**
+    Description of wxFont.
+
+    This class is a helper used for wxFont creation using named parameter
+    idiom: it allows to specify various wxFont attributes using the chained
+    calls to its clearly named methods instead of passing them in the fixed
+    order to wxFont constructors.
+
+    For example, to create an italic font with the given face name and size you
+    could use:
+    @code
+        wxFont font(wxFontInfo(12).FaceName().Italic());
+    @endcode
+
+    Notice that all of the methods of this object return a reference to the
+    object itself, allowing the calls to them to be chained as in the example
+    above.
+
+    All methods taking boolean parameters can be used to turn the specified
+    font attribute on or off and turn it on by default.
+
+    @since 2.9.5
+ */
+class wxFontInfo
+{
+public:
+    /**
+        Default constructor uses the default font size for the current
+        platform.
+     */
+    wxFontInfo();
+
+    /**
+        Constructor setting the font size in points to use.
+
+        @see wxFont::SetPointSize()
+     */
+    explicit wxFontInfo(int pointSize);
+
+    /**
+        Constructor setting the font size in pixels to use.
+
+        @see wxFont::SetPixelSize()
+     */
+    explicit wxFontInfo(const wxSize& pixelSize);
+
+    /**
+        Set the font family.
+
+        The family is a generic portable way of referring to fonts without
+        specifying a precise face name. This parameter must be one of the
+        ::wxFontFamily enumeration values.
+
+        If the FaceName() is used, then it overrides the font family.
+
+        @see wxFont::SetFamily()
+     */
+    wxFontInfo& Family(wxFontFamily family);
+
+    /**
+        Set the font face name to use.
+
+        Face names are not portable, so prefer to use Family() in portable
+        code.
+
+        @see wxFont::SetFaceName()
+     */
+    wxFontInfo& FaceName(const wxString& faceName);
+
+    /**
+        Use a bold version of the font.
+
+        @see ::wxFontWeight, wxFont::SetWeight()
+     */
+    wxFontInfo& Bold(bool bold = true);
+
+    /**
+        Use a lighter version of the font.
+
+        @see ::wxFontWeight, wxFont::SetWeight()
+     */
+    wxFontInfo& Light(bool light = true);
+
+    /**
+        Use an italic version of the font.
+
+        @see ::wxFontStyle, wxFont::SetStyle()
+     */
+    wxFontInfo& Italic(bool italic = true);
+
+    /**
+        Use a slanted version of the font.
+
+        @see ::wxFontStyle, wxFont::SetStyle()
+     */
+    wxFontInfo& Slant(bool slant = true);
+
+    /**
+        Set anti-aliasing flag.
+
+        Force the use of anti-aliasing on or off.
+
+        Currently this is not implemented, i.e. using this method doesn't do
+        anything.
+     */
+    wxFontInfo& AntiAliased(bool antiAliased = true);
+
+    /**
+        Use an underlined version of the font.
+     */
+    wxFontInfo& Underlined(bool underlined = true);
+
+    /**
+        Use a strike-through version of the font.
+
+        Currently this is only implemented in wxMSW and wxGTK.
+     */
+    wxFontInfo& Strikethrough(bool strikethrough = true);
+
+    /**
+        Set the font encoding to use.
+
+        This is mostly unneeded in Unicode builds of wxWidgets.
+
+        @see ::wxFontEncoding, wxFont::SetEncoding()
+     */
+    wxFontInfo& Encoding(wxFontEncoding encoding);
+
+    /**
+        Set all the font attributes at once.
+
+        See ::wxFontFlag for the various flags that can be used.
+     */
+    wxFontInfo& AllFlags(int flags);
+};
+
 /**
     @class wxFont
 
     A font is an object which determines the appearance of text.
 /**
     @class wxFont
 
     A font is an object which determines the appearance of text.
+
     Fonts are used for drawing text to a device context, and setting the appearance
     Fonts are used for drawing text to a device context, and setting the appearance
-    of a window's text.
+    of a window's text, see wxDC::SetFont() and wxWindow::SetFont().
+
+    The easiest way to create a custom font is to use wxFontInfo object to
+    specify the font attributes and then use wxFont::wxFont(const wxFontInfo&)
+    constructor. Alternatively, you could start with one of the pre-defined
+    fonts or use wxWindow::GetFont() and modify the font, e.g. by increasing
+    its size using MakeLarger() or changing its weight using MakeBold().
 
     This class uses @ref overview_refcount "reference counting and copy-on-write"
     internally so that assignments between two instances of this class are very
 
     This class uses @ref overview_refcount "reference counting and copy-on-write"
     internally so that assignments between two instances of this class are very
@@ -308,9 +451,36 @@ public:
     */
     wxFont(const wxFont& font);
 
     */
     wxFont(const wxFont& font);
 
+    /**
+        Creates a font object using the specified font description.
+
+        This is the preferred way to create font objects as using this ctor
+        results in more readable code and it is also extensible, e.g. it could
+        continue to be used if support for more font attributes is added in the
+        future. For example, this constructor provides the only way of creating
+        fonts with strike-through style.
+
+        Example of creating a font using this ctor:
+        @code
+            wxFont font(wxFontInfo(10).Bold().Underlined());
+        @endcode
+
+        @since 2.9.5
+     */
+    wxFont(const wxFontInfo& font);
+
     /**
         Creates a font object with the specified attributes and size in points.
 
     /**
         Creates a font object with the specified attributes and size in points.
 
+        Notice that the use of this constructor is often more verbose and less
+        readable than the use of constructor from wxFontInfo, e.g. the example
+        in that constructor documentation would need to be written as
+        @code
+            wxFont font(10, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL,
+                        wxFONTWEIGHT_BOLD, true);
+        @endcode
+        which is longer and less clear.
+
         @param pointSize
             Size in points. See SetPointSize() for more info.
         @param family
         @param pointSize
             Size in points. See SetPointSize() for more info.
         @param family
@@ -357,6 +527,10 @@ public:
     /**
         Creates a font object with the specified attributes and size in pixels.
 
     /**
         Creates a font object with the specified attributes and size in pixels.
 
+        Notice that the use of this constructor is often more verbose and less
+        readable than the use of constructor from wxFontInfo, consider using
+        that constructor instead.
+
         @param pixelSize
             Size in pixels. See SetPixelSize() for more info.
         @param family
         @param pixelSize
             Size in pixels. See SetPixelSize() for more info.
         @param family
@@ -400,25 +574,6 @@ public:
            const wxString& faceName = wxEmptyString,
            wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
 
            const wxString& faceName = wxEmptyString,
            wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
 
-    /**
-        Creates a font object using font flags.
-
-        This constructor is similar to the constructors above except it
-        specifies the font styles such as underlined, italic, bold, ... in a
-        single @a flags argument instead of using separate arguments for them.
-        This parameter can be a combination of ::wxFontFlag enum elements.
-        The meaning of the remaining arguments is the same as in the other
-        constructors, please see their documentation for details.
-
-        Notice that this constructor provides the only way of creating fonts
-        with strike-through style.
-
-        @since 2.9.4
-     */
-    wxFont(int pointSize, wxFontFamily family, int flags,
-           const wxString& faceName = wxEmptyString,
-           wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
-
     /**
         Constructor from font description string.
 
     /**
         Constructor from font description string.
 
@@ -844,7 +999,7 @@ public:
     /**
         Sets the point size.
 
     /**
         Sets the point size.
 
-        The <em>point size</em> is defined as 1/72 of the anglo-Saxon inch
+        The <em>point size</em> is defined as 1/72 of the Anglo-Saxon inch
         (25.4 mm): it is approximately 0.0139 inch or 352.8 um.
 
         @param pointSize
         (25.4 mm): it is approximately 0.0139 inch or 352.8 um.
 
         @param pointSize
@@ -981,6 +1136,9 @@ public:
         This function takes the same parameters as the relative
         @ref wxFont::wxFont "wxFont constructor" and returns a new font
         object allocated on the heap.
         This function takes the same parameters as the relative
         @ref wxFont::wxFont "wxFont constructor" and returns a new font
         object allocated on the heap.
+
+        Their use is discouraged, use wxFont constructor from wxFontInfo
+        instead.
     */
     static wxFont* New(int pointSize, wxFontFamily family, wxFontStyle style,
                        wxFontWeight weight,
     */
     static wxFont* New(int pointSize, wxFontFamily family, wxFontStyle style,
                        wxFontWeight weight,
index 0dbf46ac59799eef0567ce52ffb931da21f0050a..8ffde87c072a7a0ca24995fd37c10ad4704f0c8b 100644 (file)
@@ -518,9 +518,7 @@ bool MyFrame::DoEnumerateFamilies(bool fixedWidthOnly,
 
         if ( !facename.empty() )
         {
 
         if ( !facename.empty() )
         {
-            wxFont font(wxNORMAL_FONT->GetPointSize(),
-                        wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL,
-                        wxFONTWEIGHT_NORMAL, false, facename, encoding);
+            wxFont font(wxFontInfo().FaceName(facename).Encoding(encoding));
 
             DoChangeFont(font);
         }
 
             DoChangeFont(font);
         }
@@ -978,10 +976,7 @@ void MyFrame::OnViewMsg(wxCommandEvent& WXUNUSED(event))
     // and now create the correct font
     if ( !DoEnumerateFamilies(false, fontenc, true /* silent */) )
     {
     // and now create the correct font
     if ( !DoEnumerateFamilies(false, fontenc, true /* silent */) )
     {
-        wxFont font(wxNORMAL_FONT->GetPointSize(),
-                    wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL,
-                    wxFONTWEIGHT_NORMAL, false /* !underlined */,
-                    wxEmptyString /* facename */, fontenc);
+        wxFont font(wxFontInfo(wxNORMAL_FONT->GetPointSize()).Encoding(fontenc));
         if ( font.IsOk() )
         {
             DoChangeFont(font);
         if ( font.IsOk() )
         {
             DoChangeFont(font);
index f2e48c3ca89856a52ea9dbd92f5b79c76dd181d0..e078010efa6dff4faa57ab017ab106bacd18e5e3 100644 (file)
@@ -278,18 +278,20 @@ wxFont::wxFont(const wxNativeFontInfo& info)
         SetStrikethrough(true);
 }
 
         SetStrikethrough(true);
 }
 
-wxFont::wxFont(int pointSize,
-               wxFontFamily family,
-               int flags,
-               const wxString& face,
-               wxFontEncoding encoding)
-{
-    m_refData = new wxFontRefData(pointSize, family,
-                                  GetStyleFromFlags(flags),
-                                  GetWeightFromFlags(flags),
-                                  GetUnderlinedFromFlags(flags),
-                                  GetStrikethroughFromFlags(flags),
-                                  face, encoding);
+wxFont::wxFont(const wxFontInfo& info)
+{
+    m_refData = new wxFontRefData(info.GetPointSize(),
+                                  info.GetFamily(),
+                                  info.GetStyle(),
+                                  info.GetWeight(),
+                                  info.IsUnderlined(),
+                                  info.IsStrikethrough(),
+                                  info.GetFaceName(),
+                                  info.GetEncoding());
+
+    wxSize pixelSize = info.GetPixelSize();
+    if ( pixelSize != wxDefaultSize )
+        SetPixelSize(pixelSize);
 }
 
 bool wxFont::Create( int pointSize,
 }
 
 bool wxFont::Create( int pointSize,
index 060139df72fa3407a8f952a7d7cbfdf5c24ed737..ddeef618865a8356c1dfede35e8db16f2798c8e4 100644 (file)
@@ -804,18 +804,18 @@ wxFont::wxFont(const wxString& fontdesc)
         (void)Create(info);
 }
 
         (void)Create(info);
 }
 
-wxFont::wxFont(int pointSize,
-               wxFontFamily family,
-               int flags,
-               const wxString& face,
-               wxFontEncoding encoding)
+wxFont::wxFont(const wxFontInfo& info)
 {
 {
-    m_refData = new wxFontRefData(pointSize, wxDefaultSize, false,
-                                  family,
-                                  GetStyleFromFlags(flags),
-                                  GetWeightFromFlags(flags),
-                                  GetUnderlinedFromFlags(flags),
-                                  false, face, encoding);
+    m_refData = new wxFontRefData(info.GetPointSize(),
+                                  info.GetPixelSize(),
+                                  info.IsUsingSizeInPixels(),
+                                  info.GetFamily(),
+                                  info.GetStyle(),
+                                  info.GetWeight(),
+                                  info.IsUnderlined(),
+                                  info.IsStrikethrough(),
+                                  info.GetFaceName(),
+                                  info.GetEncoding());
 }
 
 bool wxFont::Create(const wxNativeFontInfo& info, WXHFONT hFont)
 }
 
 bool wxFont::Create(const wxNativeFontInfo& info, WXHFONT hFont)