add the wxFont(const wxSize& pixelSize, ...) ctor to all ports; add some wxCHECK_MSGs to ensure that the wxSize objects contains non-negative arguments; document that passing zero for the width parameter is allowed; other minor doc fixes
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59564 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -62,7 +62,19 @@ public:
|
||||
{
|
||||
(void)Create(size, family, style, weight, underlined, face, encoding);
|
||||
}
|
||||
|
||||
|
||||
wxFont(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined = false,
|
||||
const wxString& face = wxEmptyString,
|
||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
|
||||
{
|
||||
Create(10, family, style, weight, underlined, face, encoding);
|
||||
SetPixelSize(pixelSize);
|
||||
}
|
||||
|
||||
/*! @abstract Construction with opaque wxNativeFontInfo
|
||||
*/
|
||||
wxFont(const wxNativeFontInfo& info)
|
||||
|
@@ -47,7 +47,19 @@ public:
|
||||
{
|
||||
Create(size, family, style, weight, underlined, face, encoding);
|
||||
}
|
||||
|
||||
|
||||
wxFont(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined = false,
|
||||
const wxString& face = wxEmptyString,
|
||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
|
||||
{
|
||||
Create(10, family, style, weight, underlined, face, encoding);
|
||||
SetPixelSize(pixelSize);
|
||||
}
|
||||
|
||||
bool Create(int size,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
|
@@ -111,6 +111,28 @@ class WXDLLIMPEXP_FWD_CORE wxNativeFontInfo;
|
||||
class WXDLLIMPEXP_CORE wxFontBase : public wxGDIObject
|
||||
{
|
||||
public:
|
||||
/*
|
||||
derived classes should provide the following ctors:
|
||||
|
||||
wxFont();
|
||||
wxFont(const wxString& nativeFontInfoString);
|
||||
wxFont(const wxNativeFontInfo& info);
|
||||
wxFont(int size,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined = false,
|
||||
const wxString& face = wxEmptyString,
|
||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
|
||||
wxFont(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined = false,
|
||||
const wxString& face = wxEmptyString,
|
||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
|
||||
*/
|
||||
|
||||
// creator function
|
||||
virtual ~wxFontBase();
|
||||
|
||||
|
@@ -51,6 +51,18 @@ public:
|
||||
Create(size, family, style, weight, underlined, face, encoding);
|
||||
}
|
||||
|
||||
wxFont(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined = false,
|
||||
const wxString& face = wxEmptyString,
|
||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
|
||||
{
|
||||
Create(10, family, style, weight, underlined, face, encoding);
|
||||
SetPixelSize(pixelSize);
|
||||
}
|
||||
|
||||
bool Create(int size,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
|
@@ -63,7 +63,19 @@ public:
|
||||
{
|
||||
Create(size, family, style, weight, underlined, face, encoding);
|
||||
}
|
||||
|
||||
|
||||
wxFont(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined = false,
|
||||
const wxString& face = wxEmptyString,
|
||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
|
||||
{
|
||||
Create(10, family, style, weight, underlined, face, encoding);
|
||||
SetPixelSize(pixelSize);
|
||||
}
|
||||
|
||||
bool Create(int size,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
|
@@ -60,7 +60,19 @@ public:
|
||||
{
|
||||
Create(size, family, style, weight, underlined, face, encoding);
|
||||
}
|
||||
|
||||
|
||||
wxFont(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined = false,
|
||||
const wxString& face = wxEmptyString,
|
||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
|
||||
{
|
||||
Create(10, family, style, weight, underlined, face, encoding);
|
||||
SetPixelSize(pixelSize);
|
||||
}
|
||||
|
||||
bool Create(int size,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
|
@@ -53,7 +53,19 @@ public:
|
||||
{
|
||||
Create(size, family, style, weight, underlined, face, encoding);
|
||||
}
|
||||
|
||||
|
||||
wxFont(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined = false,
|
||||
const wxString& face = wxEmptyString,
|
||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
|
||||
{
|
||||
Create(10, family, style, weight, underlined, face, encoding);
|
||||
SetPixelSize(pixelSize);
|
||||
}
|
||||
|
||||
bool Create(int size,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
|
@@ -47,7 +47,19 @@ public:
|
||||
{
|
||||
Create(size, family, style, weight, underlined, face, encoding);
|
||||
}
|
||||
|
||||
|
||||
wxFont(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined = false,
|
||||
const wxString& face = wxEmptyString,
|
||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
|
||||
{
|
||||
Create(10, family, style, weight, underlined, face, encoding);
|
||||
SetPixelSize(pixelSize);
|
||||
}
|
||||
|
||||
bool Create(int size,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
|
@@ -50,7 +50,19 @@ public:
|
||||
{
|
||||
Create(size, family, style, weight, underlined, face, encoding);
|
||||
}
|
||||
|
||||
|
||||
wxFont(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined = false,
|
||||
const wxString& face = wxEmptyString,
|
||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
|
||||
{
|
||||
Create(10, family, style, weight, underlined, face, encoding);
|
||||
SetPixelSize(pixelSize);
|
||||
}
|
||||
|
||||
bool Create(int size,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
|
@@ -45,7 +45,19 @@ public:
|
||||
{
|
||||
Create(size, family, style, weight, underlined, face, encoding);
|
||||
}
|
||||
|
||||
|
||||
wxFont(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined = false,
|
||||
const wxString& face = wxEmptyString,
|
||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
|
||||
{
|
||||
Create(10, family, style, weight, underlined, face, encoding);
|
||||
SetPixelSize(pixelSize);
|
||||
}
|
||||
|
||||
bool Create(int size,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
|
@@ -47,7 +47,19 @@ public:
|
||||
{
|
||||
Create(size, family, style, weight, underlined, face, encoding);
|
||||
}
|
||||
|
||||
|
||||
wxFont(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined = false,
|
||||
const wxString& face = wxEmptyString,
|
||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
|
||||
{
|
||||
Create(10, family, style, weight, underlined, face, encoding);
|
||||
SetPixelSize(pixelSize);
|
||||
}
|
||||
|
||||
bool Create(int size,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
|
@@ -44,7 +44,19 @@ public:
|
||||
{
|
||||
Create(size, family, style, weight, underlined, face, encoding);
|
||||
}
|
||||
|
||||
|
||||
wxFont(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined = false,
|
||||
const wxString& face = wxEmptyString,
|
||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
|
||||
{
|
||||
Create(10, family, style, weight, underlined, face, encoding);
|
||||
SetPixelSize(pixelSize);
|
||||
}
|
||||
|
||||
bool Create(int size,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
|
@@ -250,7 +250,6 @@ enum wxFontEncoding
|
||||
class wxFont : public wxGDIObject
|
||||
{
|
||||
public:
|
||||
//@{
|
||||
/**
|
||||
Default ctor.
|
||||
*/
|
||||
@@ -265,15 +264,15 @@ public:
|
||||
Creates a font object with the specified attributes.
|
||||
|
||||
@param pointSize
|
||||
Size in points.
|
||||
Size in points. See SetPointSize() for more info.
|
||||
@param family
|
||||
Font family, a generic way of referring to fonts without specifying actual
|
||||
facename. One of the ::wxFontFamily enumeration values.
|
||||
@param style
|
||||
One of wxFONTSTYLE_NORMAL, wxFONTSTYLE_SLANT and wxFONTSTYLE_ITALIC.
|
||||
One of @c wxFONTSTYLE_NORMAL, @c wxFONTSTYLE_SLANT and @c wxFONTSTYLE_ITALIC.
|
||||
@param weight
|
||||
Font weight, sometimes also referred to as font boldness. One of
|
||||
the ::wxFontWeight enumeration values.
|
||||
Font weight, sometimes also referred to as font boldness.
|
||||
One of the ::wxFontWeight enumeration values.
|
||||
@param underline
|
||||
The value can be @true or @false.
|
||||
At present this has an effect on Windows and Motif 2.x only.
|
||||
@@ -284,16 +283,16 @@ public:
|
||||
An encoding which may be one of the enumeration values of ::wxFontEncoding.
|
||||
Briefly these can be summed up as:
|
||||
<TABLE>
|
||||
<TR><TD>wxFONTENCODING_SYSTEM</TD><TD>Default system encoding.</TD></TR>
|
||||
<TR><TD>wxFONTENCODING_DEFAULT</TD><TD>
|
||||
<TR><TD>@c wxFONTENCODING_SYSTEM</TD><TD>Default system encoding.</TD></TR>
|
||||
<TR><TD>@c wxFONTENCODING_DEFAULT</TD><TD>
|
||||
Default application encoding: this
|
||||
is the encoding set by calls to
|
||||
SetDefaultEncoding and which may be set to,
|
||||
say, KOI8 to create all fonts by default with KOI8 encoding. Initially, the
|
||||
default application encoding is the same as default system encoding.</TD></TR>
|
||||
<TR><TD>wxFONTENCODING_ISO8859_1...15</TD><TD>ISO8859 encodings.</TD></TR>
|
||||
<TR><TD>wxFONTENCODING_KOI8</TD><TD>The standard Russian encoding for Internet.</TD></TR>
|
||||
<TR><TD>wxFONTENCODING_CP1250...1252</TD><TD>Windows encodings similar to ISO8859 (but not identical).</TD></TR>
|
||||
<TR><TD>@c wxFONTENCODING_ISO8859_1...15</TD><TD>ISO8859 encodings.</TD></TR>
|
||||
<TR><TD>@c wxFONTENCODING_KOI8</TD><TD>The standard Russian encoding for Internet.</TD></TR>
|
||||
<TR><TD>@c wxFONTENCODING_CP1250...1252</TD><TD>Windows encodings similar to ISO8859 (but not identical).</TD></TR>
|
||||
</TABLE>
|
||||
If the specified encoding isn't available, no font is created
|
||||
(see also font encoding overview).
|
||||
@@ -311,15 +310,12 @@ public:
|
||||
Creates a font object with the specified attributes.
|
||||
|
||||
@param pixelSize
|
||||
Size in pixels: this is directly supported only under MSW currently
|
||||
where this constructor can be used directly, under other platforms a
|
||||
font with the closest size to the given one is found using binary search
|
||||
and the static New method must be used.
|
||||
Size in pixels. See SetPixelSize() for more info.
|
||||
@param family
|
||||
Font family, a generic way of referring to fonts without specifying actual
|
||||
facename. One of ::wxFontFamily enumeration values.
|
||||
@param style
|
||||
One of wxFONTSTYLE_NORMAL, wxFONTSTYLE_SLANT and wxFONTSTYLE_ITALIC.
|
||||
One of @c wxFONTSTYLE_NORMAL, @c wxFONTSTYLE_SLANT and @c wxFONTSTYLE_ITALIC.
|
||||
@param weight
|
||||
Font weight, sometimes also referred to as font boldness.
|
||||
One of the ::wxFontWeight enumeration values.
|
||||
@@ -333,16 +329,16 @@ public:
|
||||
An encoding which may be one of the enumeration values of ::wxFontEncoding.
|
||||
Briefly these can be summed up as:
|
||||
<TABLE>
|
||||
<TR><TD>wxFONTENCODING_SYSTEM</TD><TD>Default system encoding.</TD></TR>
|
||||
<TR><TD>wxFONTENCODING_DEFAULT</TD><TD>
|
||||
<TR><TD>@c wxFONTENCODING_SYSTEM</TD><TD>Default system encoding.</TD></TR>
|
||||
<TR><TD>@c wxFONTENCODING_DEFAULT</TD><TD>
|
||||
Default application encoding: this
|
||||
is the encoding set by calls to
|
||||
SetDefaultEncoding and which may be set to,
|
||||
say, KOI8 to create all fonts by default with KOI8 encoding. Initially, the
|
||||
default application encoding is the same as default system encoding.</TD></TR>
|
||||
<TR><TD>wxFONTENCODING_ISO8859_1...15</TD><TD>ISO8859 encodings.</TD></TR>
|
||||
<TR><TD>wxFONTENCODING_KOI8</TD><TD>The standard Russian encoding for Internet.</TD></TR>
|
||||
<TR><TD>wxFONTENCODING_CP1250...1252</TD><TD>Windows encodings similar to ISO8859 (but not identical).</TD></TR>
|
||||
<TR><TD>@c wxFONTENCODING_ISO8859_1...15</TD><TD>ISO8859 encodings.</TD></TR>
|
||||
<TR><TD>@c wxFONTENCODING_KOI8</TD><TD>The standard Russian encoding for Internet.</TD></TR>
|
||||
<TR><TD>@c wxFONTENCODING_CP1250...1252</TD><TD>Windows encodings similar to ISO8859 (but not identical).</TD></TR>
|
||||
</TABLE>
|
||||
If the specified encoding isn't available, no font is created
|
||||
(see also font encoding overview).
|
||||
@@ -355,7 +351,6 @@ public:
|
||||
bool underline = false,
|
||||
const wxString& faceName = wxEmptyString,
|
||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
|
||||
//@}
|
||||
|
||||
/**
|
||||
Destructor.
|
||||
@@ -424,7 +419,18 @@ public:
|
||||
virtual int GetPointSize() const;
|
||||
|
||||
/**
|
||||
Gets the font style. See wxFontStyle for a list of valid styles.
|
||||
Gets the pixel size.
|
||||
|
||||
Note that under wxMSW if you passed to SetPixelSize() (or to the ctor)
|
||||
a wxSize object with a null width value, you'll get a null width in
|
||||
the returned object.
|
||||
|
||||
@see SetPixelSize()
|
||||
*/
|
||||
virtual wxSize GetPixelSize() const;
|
||||
|
||||
/**
|
||||
Gets the font style. See ::wxFontStyle for a list of valid styles.
|
||||
|
||||
@see SetStyle()
|
||||
*/
|
||||
@@ -438,7 +444,7 @@ public:
|
||||
virtual bool GetUnderlined() const;
|
||||
|
||||
/**
|
||||
Gets the font weight. See wxFontWeight for a list of valid weight identifiers.
|
||||
Gets the font weight. See ::wxFontWeight for a list of valid weight identifiers.
|
||||
|
||||
@see SetWeight()
|
||||
*/
|
||||
@@ -457,11 +463,11 @@ public:
|
||||
|
||||
//@{
|
||||
/**
|
||||
These functions take the same parameters as
|
||||
@ref wxFont::wxFont "wxFont constructors" and return a new font
|
||||
This function takes the same parameters as
|
||||
@ref wxFont::wxFont "wxFont constructors" and returns a new font
|
||||
object allocated on the heap.
|
||||
|
||||
Using @c New() is currently the only way to directly create a font with
|
||||
Using New() is currently the only way to directly create a font with
|
||||
the given size in pixels on platforms other than wxMSW.
|
||||
*/
|
||||
static wxFont* New(int pointSize, wxFontFamily family, wxFontStyle style,
|
||||
@@ -545,8 +551,8 @@ public:
|
||||
|
||||
@beginTable
|
||||
@hdr3col{platform, generic syntax, example}
|
||||
@row3col{wxGTK2, @c [FACE-NAME] [bold] [oblique|italic] [POINTSIZE], Monospace bold 10}
|
||||
@row3col{wxMSW, @c [light|bold] [italic] [FACE-NAME] [POINTSIZE] [ENCODING], Tahoma 10 WINDOWS-1252}
|
||||
@row3col{wxGTK2, <tt>[FACE-NAME] [bold] [oblique|italic] [POINTSIZE]</tt>, Monospace bold 10}
|
||||
@row3col{wxMSW, <tt>[light|bold] [italic] [FACE-NAME] [POINTSIZE] [ENCODING]</tt>, Tahoma 10 WINDOWS-1252}
|
||||
@endTable
|
||||
|
||||
@todo add an example for wxMac
|
||||
@@ -561,6 +567,9 @@ public:
|
||||
|
||||
/**
|
||||
Sets the point size.
|
||||
|
||||
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
|
||||
Size in points.
|
||||
@@ -569,6 +578,21 @@ public:
|
||||
*/
|
||||
virtual void SetPointSize(int pointSize);
|
||||
|
||||
/**
|
||||
Sets the pixel size.
|
||||
|
||||
The height parameter of @a pixelSize must be positive while the width
|
||||
parameter may also be zero (to indicate that you're not interested in the
|
||||
width of the characters: a suitable width will be chosen for best rendering).
|
||||
|
||||
This feature (specifying the font pixel size) is directly supported only
|
||||
under wxMSW and wxGTK currently; under other platforms a font with the
|
||||
closest size to the given one is found using binary search (this maybe slower).
|
||||
|
||||
@see GetPixelSize()
|
||||
*/
|
||||
virtual void SetPixelSize(const wxSize& pixelSize);
|
||||
|
||||
/**
|
||||
Sets the font style.
|
||||
|
||||
@@ -629,24 +653,26 @@ wxFont wxNullFont;
|
||||
|
||||
/**
|
||||
Equivalent to wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).
|
||||
|
||||
@see wxSystemSettings
|
||||
*/
|
||||
wxFont wxNORMAL_FONT;
|
||||
|
||||
/**
|
||||
A font using the wxFONTFAMILY_SWISS family and 2 points smaller than
|
||||
A font using the @c wxFONTFAMILY_SWISS family and 2 points smaller than
|
||||
::wxNORMAL_FONT.
|
||||
*/
|
||||
wxFont wxSMALL_FONT;
|
||||
|
||||
/**
|
||||
A font using the wxFONTFAMILY_ROMAN family and wxFONTSTYLE_ITALIC style and
|
||||
A font using the @c wxFONTFAMILY_ROMAN family and @c wxFONTSTYLE_ITALIC style and
|
||||
of the same size of ::wxNORMAL_FONT.
|
||||
*/
|
||||
wxFont wxITALIC_FONT;
|
||||
|
||||
/**
|
||||
A font identic to ::wxNORMAL_FONT except for the family used which is
|
||||
wxFONTFAMILY_SWISS.
|
||||
@c wxFONTFAMILY_SWISS.
|
||||
*/
|
||||
wxFont wxSWISS_FONT;
|
||||
|
||||
|
@@ -53,57 +53,27 @@
|
||||
// helper functions
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
static void AdjustFontSize(wxFont& font, wxDC& dc, const wxSize& pixelSize)
|
||||
static inline int flags2Style(int flags)
|
||||
{
|
||||
int largestGood = 0;
|
||||
int smallestBad = 0;
|
||||
return flags & wxFONTFLAG_ITALIC
|
||||
? wxFONTSTYLE_ITALIC
|
||||
: flags & wxFONTFLAG_SLANT
|
||||
? wxFONTSTYLE_SLANT
|
||||
: wxFONTSTYLE_NORMAL;
|
||||
}
|
||||
|
||||
bool initialGoodFound = false;
|
||||
bool initialBadFound = false;
|
||||
static inline int flags2Weight(int flags)
|
||||
{
|
||||
return flags & wxFONTFLAG_LIGHT
|
||||
? wxFONTWEIGHT_LIGHT
|
||||
: flags & wxFONTFLAG_BOLD
|
||||
? wxFONTWEIGHT_BOLD
|
||||
: wxFONTWEIGHT_NORMAL;
|
||||
}
|
||||
|
||||
// NB: this assignment was separated from the variable definition
|
||||
// in order to fix a gcc v3.3.3 compiler crash
|
||||
int currentSize = font.GetPointSize();
|
||||
while (currentSize > 0)
|
||||
{
|
||||
dc.SetFont(font);
|
||||
|
||||
// if currentSize (in points) results in a font that is smaller
|
||||
// than required by pixelSize it is considered a good size
|
||||
if (dc.GetCharHeight() <= pixelSize.GetHeight() &&
|
||||
(!pixelSize.GetWidth() ||
|
||||
dc.GetCharWidth() <= pixelSize.GetWidth()))
|
||||
{
|
||||
largestGood = currentSize;
|
||||
initialGoodFound = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
smallestBad = currentSize;
|
||||
initialBadFound = true;
|
||||
}
|
||||
if (!initialGoodFound)
|
||||
{
|
||||
currentSize /= 2;
|
||||
}
|
||||
else if (!initialBadFound)
|
||||
{
|
||||
currentSize *= 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
int distance = smallestBad - largestGood;
|
||||
if (distance == 1)
|
||||
break;
|
||||
|
||||
currentSize = largestGood + distance / 2;
|
||||
}
|
||||
|
||||
font.SetPointSize(currentSize);
|
||||
}
|
||||
|
||||
if (currentSize != largestGood)
|
||||
font.SetPointSize(largestGood);
|
||||
static inline bool flags2Underlined(int flags)
|
||||
{
|
||||
return (flags & wxFONTFLAG_UNDERLINED) != 0;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -140,27 +110,17 @@ wxFont *wxFontBase::New(int size,
|
||||
return new wxFont(size, family, style, weight, underlined, face, encoding);
|
||||
}
|
||||
|
||||
static inline int flags2Style(int flags)
|
||||
/* static */
|
||||
wxFont *wxFontBase::New(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined,
|
||||
const wxString& face,
|
||||
wxFontEncoding encoding)
|
||||
{
|
||||
return flags & wxFONTFLAG_ITALIC
|
||||
? wxFONTSTYLE_ITALIC
|
||||
: flags & wxFONTFLAG_SLANT
|
||||
? wxFONTSTYLE_SLANT
|
||||
: wxFONTSTYLE_NORMAL;
|
||||
}
|
||||
|
||||
static inline int flags2Weight(int flags)
|
||||
{
|
||||
return flags & wxFONTFLAG_LIGHT
|
||||
? wxFONTWEIGHT_LIGHT
|
||||
: flags & wxFONTFLAG_BOLD
|
||||
? wxFONTWEIGHT_BOLD
|
||||
: wxFONTWEIGHT_NORMAL;
|
||||
}
|
||||
|
||||
static inline bool flags2Underlined(int flags)
|
||||
{
|
||||
return (flags & wxFONTFLAG_UNDERLINED) != 0;
|
||||
return new wxFont(pixelSize, family, style, weight, underlined,
|
||||
face, encoding);
|
||||
}
|
||||
|
||||
/* static */
|
||||
@@ -174,26 +134,6 @@ wxFont *wxFontBase::New(int pointSize,
|
||||
flags2Underlined(flags), face, encoding);
|
||||
}
|
||||
|
||||
/* static */
|
||||
wxFont *wxFontBase::New(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined,
|
||||
const wxString& face,
|
||||
wxFontEncoding encoding)
|
||||
{
|
||||
#if defined(__WXMSW__)
|
||||
return new wxFont(pixelSize, family, style, weight, underlined,
|
||||
face, encoding);
|
||||
#else
|
||||
wxFont *self = New(10, family, style, weight, underlined, face, encoding);
|
||||
wxScreenDC dc;
|
||||
AdjustFontSize(*(wxFont *)self, dc, pixelSize);
|
||||
return self;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* static */
|
||||
wxFont *wxFontBase::New(const wxSize& pixelSize,
|
||||
wxFontFamily family,
|
||||
@@ -205,24 +145,6 @@ wxFont *wxFontBase::New(const wxSize& pixelSize,
|
||||
flags2Underlined(flags), face, encoding);
|
||||
}
|
||||
|
||||
wxSize wxFontBase::GetPixelSize() const
|
||||
{
|
||||
wxScreenDC dc;
|
||||
dc.SetFont(*(wxFont *)this);
|
||||
return wxSize(dc.GetCharWidth(), dc.GetCharHeight());
|
||||
}
|
||||
|
||||
bool wxFontBase::IsUsingSizeInPixels() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void wxFontBase::SetPixelSize( const wxSize& pixelSize )
|
||||
{
|
||||
wxScreenDC dc;
|
||||
AdjustFontSize(*(wxFont *)this, dc, pixelSize);
|
||||
}
|
||||
|
||||
/* static */
|
||||
wxFont *wxFontBase::New(const wxNativeFontInfo& info)
|
||||
{
|
||||
@@ -244,6 +166,81 @@ bool wxFontBase::IsFixedWidth() const
|
||||
return GetFamily() == wxFONTFAMILY_TELETYPE;
|
||||
}
|
||||
|
||||
wxSize wxFontBase::GetPixelSize() const
|
||||
{
|
||||
wxScreenDC dc;
|
||||
dc.SetFont(*(wxFont *)this);
|
||||
return wxSize(dc.GetCharWidth(), dc.GetCharHeight());
|
||||
}
|
||||
|
||||
bool wxFontBase::IsUsingSizeInPixels() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void wxFontBase::SetPixelSize( const wxSize& pixelSize )
|
||||
{
|
||||
wxCHECK_RET( pixelSize.GetWidth() >= 0 && pixelSize.GetHeight() > 0,
|
||||
"Negative values for the pixel size or zero pixel height are not allowed" );
|
||||
|
||||
wxScreenDC dc;
|
||||
|
||||
// NOTE: this algorithm for adjusting the font size is used by all
|
||||
// implementations of wxFont except under wxMSW and wxGTK where
|
||||
// native support to font creation using pixel-size is provided.
|
||||
|
||||
int largestGood = 0;
|
||||
int smallestBad = 0;
|
||||
|
||||
bool initialGoodFound = false;
|
||||
bool initialBadFound = false;
|
||||
|
||||
// NB: this assignment was separated from the variable definition
|
||||
// in order to fix a gcc v3.3.3 compiler crash
|
||||
int currentSize = GetPointSize();
|
||||
while (currentSize > 0)
|
||||
{
|
||||
dc.SetFont(*static_cast<wxFont*>(this));
|
||||
|
||||
// if currentSize (in points) results in a font that is smaller
|
||||
// than required by pixelSize it is considered a good size
|
||||
// NOTE: the pixel size width may be zero
|
||||
if (dc.GetCharHeight() <= pixelSize.GetHeight() &&
|
||||
(pixelSize.GetWidth() == 0 ||
|
||||
dc.GetCharWidth() <= pixelSize.GetWidth()))
|
||||
{
|
||||
largestGood = currentSize;
|
||||
initialGoodFound = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
smallestBad = currentSize;
|
||||
initialBadFound = true;
|
||||
}
|
||||
if (!initialGoodFound)
|
||||
{
|
||||
currentSize /= 2;
|
||||
}
|
||||
else if (!initialBadFound)
|
||||
{
|
||||
currentSize *= 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
int distance = smallestBad - largestGood;
|
||||
if (distance == 1)
|
||||
break;
|
||||
|
||||
currentSize = largestGood + distance / 2;
|
||||
}
|
||||
|
||||
SetPointSize(currentSize);
|
||||
}
|
||||
|
||||
if (currentSize != largestGood)
|
||||
SetPointSize(largestGood);
|
||||
}
|
||||
|
||||
void wxFontBase::DoSetNativeFontInfo(const wxNativeFontInfo& info)
|
||||
{
|
||||
#ifdef wxNO_NATIVE_FONTINFO
|
||||
|
@@ -1781,7 +1781,7 @@ wxCoord wxWindowDCImpl::GetCharHeight() const
|
||||
wxCHECK_MSG( metrics, -1, _T("failed to get pango font metrics") );
|
||||
|
||||
wxCoord h = PANGO_PIXELS (pango_font_metrics_get_descent (metrics) +
|
||||
pango_font_metrics_get_ascent (metrics));
|
||||
pango_font_metrics_get_ascent (metrics));
|
||||
pango_font_metrics_unref (metrics);
|
||||
return h;
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/gtk/font.cpp
|
||||
// Purpose:
|
||||
// Purpose: wxFont for wxGTK
|
||||
// Author: Robert Roebling
|
||||
// Id: $Id$
|
||||
// Copyright: (c) 1998 Robert Roebling and Julian Smart
|
||||
@@ -113,8 +113,7 @@ private:
|
||||
wxFontEncoding m_encoding;
|
||||
bool m_noAA; // No anti-aliasing
|
||||
|
||||
// The native font info, basicly an XFLD under GTK 1.2 and
|
||||
// the pango font description under GTK 2.0.
|
||||
// The native font info: basically a PangoFontDescription
|
||||
wxNativeFontInfo m_nativeFontInfo;
|
||||
|
||||
friend class wxFont;
|
||||
@@ -287,6 +286,36 @@ void wxFontRefData::SetPointSize(int pointSize)
|
||||
m_nativeFontInfo.SetPointSize(pointSize);
|
||||
}
|
||||
|
||||
/*
|
||||
NOTE: disabled because pango_font_description_set_absolute_size() and
|
||||
wxDC::GetCharHeight() do not mix well: setting with the former a pixel
|
||||
size of "30" makes the latter return 36...
|
||||
Besides, we need to return GetPointSize() a point size value even if
|
||||
SetPixelSize() was used and this would require further changes
|
||||
(and use of pango_font_description_get_size_is_absolute in some places).
|
||||
|
||||
bool wxFontRefData::SetPixelSize(const wxSize& pixelSize)
|
||||
{
|
||||
wxCHECK_MSG( pixelSize.GetWidth() >= 0 && pixelSize.GetHeight() > 0, false,
|
||||
"Negative values for the pixel size or zero pixel height are not allowed" );
|
||||
|
||||
if (wx_pango_version_check(1,8,0) != NULL ||
|
||||
pixelSize.GetWidth() != 0)
|
||||
{
|
||||
// NOTE: pango_font_description_set_absolute_size() only sets the font height;
|
||||
// if the user set the pixel width of the font explicitly or the pango
|
||||
// library is too old, we cannot proceed
|
||||
return false;
|
||||
}
|
||||
|
||||
pango_font_description_set_absolute_size( m_nativeFontInfo.description,
|
||||
pixelSize.GetHeight() * PANGO_SCALE );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
void wxFontRefData::SetFamily(wxFontFamily family)
|
||||
{
|
||||
m_family = family;
|
||||
@@ -356,12 +385,12 @@ wxFont::wxFont(const wxNativeFontInfo& info)
|
||||
}
|
||||
|
||||
bool wxFont::Create( int pointSize,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
wxFontFamily family,
|
||||
wxFontStyle style,
|
||||
wxFontWeight weight,
|
||||
bool underlined,
|
||||
const wxString& face,
|
||||
wxFontEncoding encoding)
|
||||
wxFontEncoding encoding )
|
||||
{
|
||||
UnRef();
|
||||
|
||||
|
@@ -186,6 +186,10 @@ wxConvertFromGTK(const wxString& s, wxFontEncoding enc)
|
||||
// availability of pango version major.minor.micro, nor the non-availability
|
||||
const gchar *wx_pango_version_check (int major, int minor, int micro)
|
||||
{
|
||||
// NOTE: you don't need to use this macro to check for Pango features
|
||||
// added in pango-1.4 or earlier since GTK 2.4 (our minimum requirement
|
||||
// for GTK lib) required pango 1.4...
|
||||
|
||||
#ifdef PANGO_VERSION_MAJOR
|
||||
if (!gtk_check_version (2,11,0))
|
||||
{
|
||||
|
@@ -565,11 +565,16 @@ void wxNativeFontInfo::SetPointSize(int pointsize)
|
||||
|
||||
void wxNativeFontInfo::SetPixelSize(const wxSize& pixelSize)
|
||||
{
|
||||
// NOTE: although the MSW port allows for negative pixel size heights,
|
||||
// other ports don't and since it's a very useful feature assert
|
||||
// here if we get a negative height:
|
||||
wxCHECK_RET( pixelSize.GetWidth() >= 0 && pixelSize.GetHeight() > 0,
|
||||
"Negative values for the pixel size or zero pixel height are not allowed" );
|
||||
|
||||
lf.lfHeight = pixelSize.GetHeight();
|
||||
lf.lfWidth = pixelSize.GetWidth();
|
||||
}
|
||||
|
||||
|
||||
void wxNativeFontInfo::SetStyle(wxFontStyle style)
|
||||
{
|
||||
switch ( style )
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/unix/fontutil.cpp
|
||||
// Purpose: Font helper functions for X11 (GDK/X)
|
||||
// Purpose: Font helper functions for wxX11, wxGTK, wxMotif
|
||||
// Author: Vadim Zeitlin
|
||||
// Modified by:
|
||||
// Created: 05.11.99
|
||||
@@ -218,7 +218,6 @@ wxFontEncoding wxNativeFontInfo::GetEncoding() const
|
||||
return wxFONTENCODING_SYSTEM;
|
||||
}
|
||||
|
||||
|
||||
void wxNativeFontInfo::SetPointSize(int pointsize)
|
||||
{
|
||||
pango_font_description_set_size( description, pointsize * PANGO_SCALE );
|
||||
|
Reference in New Issue
Block a user