diff --git a/include/wx/font.h b/include/wx/font.h index c732f45ca4..5f9f70b2d0 100644 --- a/include/wx/font.h +++ b/include/wx/font.h @@ -368,7 +368,8 @@ public: wxString GetNativeFontInfoUserDesc() const; // change the font characteristics - virtual void SetPointSize( float pointSize ) = 0; + virtual void SetPointSize( int pointSize ); + virtual void SetFractionalPointSize( float pointSize ) = 0; virtual void SetPixelSize( const wxSize& pixelSize ); virtual void SetFamily( wxFontFamily family ) = 0; virtual void SetStyle( wxFontStyle style ) = 0; diff --git a/include/wx/gtk/font.h b/include/wx/gtk/font.h index 149be51b84..51076e4b12 100644 --- a/include/wx/gtk/font.h +++ b/include/wx/gtk/font.h @@ -74,7 +74,7 @@ public: virtual const wxNativeFontInfo *GetNativeFontInfo() const wxOVERRIDE; virtual bool IsFixedWidth() const wxOVERRIDE; - virtual void SetPointSize(float pointSize) wxOVERRIDE; + virtual void SetFractionalPointSize(float pointSize) wxOVERRIDE; virtual void SetFamily(wxFontFamily family) wxOVERRIDE; virtual void SetStyle(wxFontStyle style) wxOVERRIDE; virtual void SetNumericWeight(int weight) wxOVERRIDE; diff --git a/include/wx/msw/font.h b/include/wx/msw/font.h index 000d840c32..044b6e2c8e 100644 --- a/include/wx/msw/font.h +++ b/include/wx/msw/font.h @@ -96,7 +96,7 @@ public: virtual wxFontEncoding GetEncoding() const wxOVERRIDE; virtual const wxNativeFontInfo *GetNativeFontInfo() const wxOVERRIDE; - virtual void SetPointSize(float pointSize) wxOVERRIDE; + virtual void SetFractionalPointSize(float pointSize) wxOVERRIDE; virtual void SetPixelSize(const wxSize& pixelSize) wxOVERRIDE; virtual void SetFamily(wxFontFamily family) wxOVERRIDE; virtual void SetStyle(wxFontStyle style) wxOVERRIDE; diff --git a/include/wx/osx/font.h b/include/wx/osx/font.h index 2494d78604..593d2c3f7e 100644 --- a/include/wx/osx/font.h +++ b/include/wx/osx/font.h @@ -131,7 +131,7 @@ public: virtual bool IsFixedWidth() const wxOVERRIDE; - virtual void SetPointSize(float pointSize) wxOVERRIDE; + virtual void SetFractionalPointSize(float pointSize) wxOVERRIDE; virtual void SetFamily(wxFontFamily family) wxOVERRIDE; virtual void SetStyle(wxFontStyle style) wxOVERRIDE; virtual void SetNumericWeight(int weight) wxOVERRIDE; diff --git a/interface/wx/font.h b/interface/wx/font.h index 1ada127136..f36d2a7de8 100644 --- a/interface/wx/font.h +++ b/interface/wx/font.h @@ -1062,19 +1062,29 @@ public: void SetNativeFontInfo(const wxNativeFontInfo& info); /** - Sets the point size. + Sets the font size in points to an integer value. + + This is a legacy version of the function only supporting integer point + sizes. It can still be used, but to avoid unnecessarily restricting the + font size in points to integer values, consider using the new (added in + wxWidgets 3.1.2) SetFractionalPointSize() function instead. + */ + virtual void SetPointSize(int pointSize); + + /** + Sets the font size in points. 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 Size in points. This can also be a fractional point size like 11.5. - Note that until wxWidgets 3.1.2, the size had to be an integer number - (and the type of this parameter was @c int). - @see GetPointSize() + @see GetFractionalPointSize(), SetPointSize() + + @since 3.1.2 */ - virtual void SetPointSize(float pointSize); + virtual void SetFractionalPointSize(float pointSize); /** Sets the pixel size. diff --git a/src/common/fontcmn.cpp b/src/common/fontcmn.cpp index 66db8ebb47..14d1c2bc31 100644 --- a/src/common/fontcmn.cpp +++ b/src/common/fontcmn.cpp @@ -45,6 +45,8 @@ #include "wx/tokenzr.h" +#include // for FLT_MAX + // debugger helper: this function can be called from a debugger to show what // the date really is extern const char *wxDumpFont(const wxFont *font) @@ -306,6 +308,14 @@ bool wxFontBase::IsUsingSizeInPixels() const return false; } +void wxFontBase::SetPointSize(int pointSize) +{ + wxCHECK_RET( pointSize >= 0 && static_cast(pointSize) < FLT_MAX, + "Invalid font point size" ); + + SetFractionalPointSize(static_cast(pointSize)); +} + void wxFontBase::SetPixelSize( const wxSize& pixelSize ) { wxCHECK_RET( pixelSize.GetWidth() >= 0 && pixelSize.GetHeight() > 0, diff --git a/src/gtk/font.cpp b/src/gtk/font.cpp index b4fe2a4d6e..2082bf2614 100644 --- a/src/gtk/font.cpp +++ b/src/gtk/font.cpp @@ -65,7 +65,7 @@ public: // setters: all of them also take care to modify m_nativeFontInfo if we // have it so as to not lose the information not carried by our fields - void SetPointSize(float pointSize); + void SetFractionalPointSize(float pointSize); void SetFamily(wxFontFamily family); void SetStyle(wxFontStyle style); void SetWeight(wxFontWeight weight); @@ -133,7 +133,8 @@ void wxFontRefData::Init(int pointSize, } SetStyle( style ); - SetPointSize( pointSize == -1 ? wxDEFAULT_FONT_SIZE : pointSize ); + m_nativeFontInfo.SetPointSize( pointSize == -1 ? wxDEFAULT_FONT_SIZE + : pointSize ); SetWeight( weight ); SetUnderlined( underlined ); SetStrikethrough( strikethrough ); @@ -179,7 +180,7 @@ wxFontRefData::~wxFontRefData() // wxFontRefData SetXXX() // ---------------------------------------------------------------------------- -void wxFontRefData::SetPointSize(float pointSize) +void wxFontRefData::SetFractionalPointSize(float pointSize) { m_nativeFontInfo.SetFractionalPointSize(pointSize); } @@ -409,11 +410,11 @@ bool wxFont::IsFixedWidth() const // change font attributes // ---------------------------------------------------------------------------- -void wxFont::SetPointSize(float pointSize) +void wxFont::SetFractionalPointSize(float pointSize) { AllocExclusive(); - M_FONTDATA->SetPointSize(pointSize); + M_FONTDATA->SetFractionalPointSize(pointSize); } void wxFont::SetFamily(wxFontFamily family) diff --git a/src/msw/font.cpp b/src/msw/font.cpp index 6702f97851..f8ae3aaabb 100644 --- a/src/msw/font.cpp +++ b/src/msw/font.cpp @@ -176,7 +176,7 @@ public: // ... and setters: notice that all of them invalidate the currently // allocated HFONT, if any, so that the next call to GetHFONT() recreates a // new one - void SetPointSize(float pointSize) + void SetFractionalPointSize(float pointSize) { Free(); @@ -357,9 +357,15 @@ void wxFontRefData::Init(int pointSize, m_sizeUsingPixels = sizeUsingPixels; if ( m_sizeUsingPixels ) - SetPixelSize(pixelSize); + { + m_nativeFontInfo.SetPixelSize(pixelSize); + } else - SetPointSize(pointSize == -1 ? wxNORMAL_FONT->GetPointSize() : pointSize); + { + m_nativeFontInfo.SetPointSize(pointSize == -1 + ? wxNORMAL_FONT->GetPointSize() + : pointSize); + } SetStyle(style); m_nativeFontInfo.SetWeight(weight); @@ -877,12 +883,12 @@ bool wxFont::IsFree() const // change font attribute: we recreate font when doing it // ---------------------------------------------------------------------------- -void wxFont::SetPointSize(float pointSize) +void wxFont::SetFractionalPointSize(float pointSize) { AllocExclusive(); M_FONTDATA->Free(); - M_FONTDATA->SetPointSize(pointSize); + M_FONTDATA->SetFractionalPointSize(pointSize); } void wxFont::SetPixelSize(const wxSize& pixelSize) diff --git a/src/osx/carbon/font.cpp b/src/osx/carbon/font.cpp index d813e57335..abf4df5248 100644 --- a/src/osx/carbon/font.cpp +++ b/src/osx/carbon/font.cpp @@ -92,7 +92,7 @@ public: const wxNativeFontInfo& GetNativeFontInfo() const; - void SetPointSize(float size) + void SetFractionalPointSize(float size) { if (GetFractionalPointSize() != size) { @@ -300,7 +300,8 @@ void wxFontRefData::Init(float size, SetFaceName(faceName); else SetFamily(family); - SetPointSize(size < 0 ? wxNORMAL_FONT->GetFractionalPointSize() : size); + + SetFractionalPointSize(size < 0 ? wxNORMAL_FONT->GetFractionalPointSize() : size); SetNumericWeight(weight); SetStyle(style); SetUnderlined(underlined); @@ -613,14 +614,11 @@ wxGDIRefData* wxFont::CloneGDIRefData(const wxGDIRefData* data) const return new wxFontRefData(*static_cast(data)); } -void wxFont::SetPointSize(float pointSize) +void wxFont::SetFractionalPointSize(float pointSize) { - if (IsOk() && M_FONTDATA->GetFractionalPointSize() == pointSize) - return; - AllocExclusive(); - M_FONTDATA->SetPointSize(pointSize); + M_FONTDATA->SetFractionalPointSize(pointSize); } void wxFont::SetFamily(wxFontFamily family)