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) +wxFont::wxFont(const wxFontInfo& info) { - m_refData = new wxFontRefData(pointSize, family, - GetStyleFromFlags(flags), - GetWeightFromFlags(flags), - GetUnderlinedFromFlags(flags), - GetStrikethroughFromFlags(flags), - face, encoding); + 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)