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
This commit is contained in:
@@ -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)
|
||||
|
@@ -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,
|
||||
|
@@ -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)
|
||||
{
|
||||
|
@@ -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,
|
||||
|
@@ -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,
|
||||
|
@@ -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,
|
||||
|
@@ -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);
|
||||
|
||||
|
||||
|
@@ -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,
|
||||
|
@@ -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,
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user