From: Vadim Zeitlin Date: Tue, 30 Apr 2013 10:27:38 +0000 (+0000) Subject: Add wxFontInfo class to allow using named parameters for wxFont creation. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/b960795ea82b702f302e99e547416cb573865413?ds=sidebyside Add wxFontInfo class to allow using named parameters for wxFont creation. 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 --- diff --git a/docs/changes.txt b/docs/changes.txt index 061af1a26f..f3371da273 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -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 more convenient wxFont(wxFontInfo) ctor. wxGTK: diff --git a/include/wx/cocoa/font.h b/include/wx/cocoa/font.h index a8989845db..9ea87d6c2f 100644 --- a/include/wx/cocoa/font.h +++ b/include/wx/cocoa/font.h @@ -38,6 +38,20 @@ 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()); + } + /*! @abstract Platform-independent construction with individual properties */ #if FUTURE_WXWIN_COMPATIBILITY_3_0 @@ -75,19 +89,6 @@ public: 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) diff --git a/include/wx/dfb/font.h b/include/wx/dfb/font.h index 3ccdebb422..db68dbd3ff 100644 --- a/include/wx/dfb/font.h +++ b/include/wx/dfb/font.h @@ -23,6 +23,21 @@ class WXDLLIMPEXP_CORE wxFont : public wxFontBase { 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, @@ -60,19 +75,6 @@ public: 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, diff --git a/include/wx/font.h b/include/wx/font.h index b14281221e..cae9bd8d5f 100644 --- a/include/wx/font.h +++ b/include/wx/font.h @@ -111,6 +111,145 @@ enum wxFontFlag 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 // ---------------------------------------------------------------------------- @@ -124,6 +263,7 @@ public: derived classes should provide the following ctors: wxFont(); + wxFont(const wxFontInfo& info); wxFont(const wxString& nativeFontInfoString); wxFont(const wxNativeFontInfo& info); wxFont(int size, @@ -293,7 +433,7 @@ protected: 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) { diff --git a/include/wx/gtk/font.h b/include/wx/gtk/font.h index bb0c5ec7b0..400e372851 100644 --- a/include/wx/gtk/font.h +++ b/include/wx/gtk/font.h @@ -19,7 +19,8 @@ class WXDLLIMPEXP_CORE wxFont : public wxFontBase public: wxFont() { } - // wxGTK-specific + wxFont(const wxFontInfo& info); + wxFont(const wxString& nativeFontInfoString) { Create(nativeFontInfoString); @@ -63,12 +64,6 @@ public: 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, diff --git a/include/wx/gtk1/font.h b/include/wx/gtk1/font.h index 87d21b1f11..d2e6fd489c 100644 --- a/include/wx/gtk1/font.h +++ b/include/wx/gtk1/font.h @@ -32,7 +32,20 @@ public: // 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); @@ -76,19 +89,6 @@ public: 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, diff --git a/include/wx/motif/font.h b/include/wx/motif/font.h index 935581f2e4..ef259f9a55 100644 --- a/include/wx/motif/font.h +++ b/include/wx/motif/font.h @@ -28,6 +28,20 @@ public: // 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 @@ -66,19 +80,6 @@ public: 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, diff --git a/include/wx/msw/font.h b/include/wx/msw/font.h index 7a83f76653..d95b0da260 100644 --- a/include/wx/msw/font.h +++ b/include/wx/msw/font.h @@ -24,6 +24,8 @@ public: // ctors and such wxFont() { } + wxFont(const wxFontInfo& info); + #if FUTURE_WXWIN_COMPATIBILITY_3_0 wxFont(int size, int family, @@ -91,12 +93,6 @@ public: Create(info, hFont); } - wxFont(int pointSize, - wxFontFamily family, - int flags = wxFONTFLAG_DEFAULT, - const wxString& face = wxEmptyString, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT); - wxFont(const wxString& fontDesc); diff --git a/include/wx/os2/font.h b/include/wx/os2/font.h index 39be035dfc..e0eabda61f 100644 --- a/include/wx/os2/font.h +++ b/include/wx/os2/font.h @@ -27,6 +27,20 @@ public: // 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, @@ -63,19 +77,6 @@ public: 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, diff --git a/include/wx/osx/font.h b/include/wx/osx/font.h index 007eaef9cf..d5e277f979 100644 --- a/include/wx/osx/font.h +++ b/include/wx/osx/font.h @@ -37,6 +37,20 @@ public: // 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 @@ -79,19 +93,6 @@ public: 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, diff --git a/include/wx/x11/font.h b/include/wx/x11/font.h index a7cabdeb9f..f05177a46d 100644 --- a/include/wx/x11/font.h +++ b/include/wx/x11/font.h @@ -21,6 +21,20 @@ public: // 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, @@ -57,19 +71,6 @@ public: 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, diff --git a/interface/wx/font.h b/interface/wx/font.h index 766ce5d225..fee764d16c 100644 --- a/interface/wx/font.h +++ b/interface/wx/font.h @@ -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. + 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 @@ -308,9 +451,36 @@ public: */ 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. + 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 @@ -357,6 +527,10 @@ public: /** 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 @@ -400,25 +574,6 @@ public: 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. @@ -844,7 +999,7 @@ public: /** Sets the point size. - The point size is defined as 1/72 of the anglo-Saxon inch + The point size 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 @@ -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. + + Their use is discouraged, use wxFont constructor from wxFontInfo + instead. */ static wxFont* New(int pointSize, wxFontFamily family, wxFontStyle style, wxFontWeight weight, diff --git a/samples/font/font.cpp b/samples/font/font.cpp index 0dbf46ac59..8ffde87c07 100644 --- a/samples/font/font.cpp +++ b/samples/font/font.cpp @@ -518,9 +518,7 @@ bool MyFrame::DoEnumerateFamilies(bool fixedWidthOnly, 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); } @@ -978,10 +976,7 @@ void MyFrame::OnViewMsg(wxCommandEvent& WXUNUSED(event)) // 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); diff --git a/src/gtk/font.cpp b/src/gtk/font.cpp index f2e48c3ca8..e078010efa 100644 --- a/src/gtk/font.cpp +++ b/src/gtk/font.cpp @@ -278,18 +278,20 @@ wxFont::wxFont(const wxNativeFontInfo& info) 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, diff --git a/src/msw/font.cpp b/src/msw/font.cpp index 060139df72..ddeef61886 100644 --- a/src/msw/font.cpp +++ b/src/msw/font.cpp @@ -804,18 +804,18 @@ wxFont::wxFont(const wxString& fontdesc) (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)