miscellaneous wxFont enhancements (patch 1496606):
- made SetFaceName() bool and return false if the face name is not available - corrected To/FromUserString() to complement each other git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39411 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -256,12 +256,13 @@ public:
|
||||
m_weight = weight;
|
||||
}
|
||||
|
||||
void SetFaceName(const wxString& faceName)
|
||||
bool SetFaceName(const wxString& faceName)
|
||||
{
|
||||
if ( m_nativeFontInfoOk )
|
||||
m_nativeFontInfo.SetFaceName(faceName);
|
||||
else
|
||||
return m_nativeFontInfo.SetFaceName(faceName);
|
||||
|
||||
m_faceName = faceName;
|
||||
return true;
|
||||
}
|
||||
|
||||
void SetUnderlined(bool underlined)
|
||||
@@ -385,12 +386,10 @@ bool wxFontRefData::Alloc(wxFont *font)
|
||||
if ( !hfont )
|
||||
{
|
||||
wxLogLastError(wxT("CreateFont"));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
m_hFont = (WXHFONT)hfont;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -561,42 +560,66 @@ void wxNativeFontInfo::SetUnderlined(bool underlined)
|
||||
lf.lfUnderline = underlined;
|
||||
}
|
||||
|
||||
void wxNativeFontInfo::SetFaceName(const wxString& facename)
|
||||
bool wxNativeFontInfo::SetFaceName(const wxString& facename)
|
||||
{
|
||||
wxStrncpy(lf.lfFaceName, facename, WXSIZEOF(lf.lfFaceName));
|
||||
size_t len = WXSIZEOF(lf.lfFaceName);
|
||||
wxStrncpy(lf.lfFaceName, facename, len);
|
||||
lf.lfFaceName[len - 1] = '\0'; // truncate the face name
|
||||
return true;
|
||||
}
|
||||
|
||||
void wxNativeFontInfo::SetFamily(wxFontFamily family)
|
||||
{
|
||||
BYTE ff_family;
|
||||
wxString facename;
|
||||
wxArrayString facename;
|
||||
|
||||
// the list of fonts associated with a family was partially
|
||||
// taken from http://www.codestyle.org/css/font-family
|
||||
|
||||
switch ( family )
|
||||
{
|
||||
case wxSCRIPT:
|
||||
ff_family = FF_SCRIPT;
|
||||
facename = _T("Script");
|
||||
facename.Add(_T("Script"));
|
||||
facename.Add(_T("Brush Script MT"));
|
||||
facename.Add(_T("Comic Sans MS"));
|
||||
facename.Add(_T("Lucida Handwriting"));
|
||||
break;
|
||||
|
||||
case wxDECORATIVE:
|
||||
ff_family = FF_DECORATIVE;
|
||||
facename = _T("Old English Text MT");
|
||||
facename.Add(_T("Old English Text MT"));
|
||||
facename.Add(_T("Comic Sans MS"));
|
||||
facename.Add(_T("Lucida Handwriting"));
|
||||
break;
|
||||
|
||||
case wxROMAN:
|
||||
ff_family = FF_ROMAN;
|
||||
facename = _T("Times New Roman");
|
||||
facename.Add(_T("Times New Roman"));
|
||||
facename.Add(_T("Georgia"));
|
||||
facename.Add(_T("Garamond"));
|
||||
facename.Add(_T("Bookman Old Style"));
|
||||
facename.Add(_T("Book Antiqua"));
|
||||
break;
|
||||
|
||||
case wxTELETYPE:
|
||||
case wxMODERN:
|
||||
ff_family = FF_MODERN;
|
||||
facename = _T("Courier New");
|
||||
facename.Add(_T("Courier New"));
|
||||
facename.Add(_T("Lucida Console"));
|
||||
facename.Add(_T("Andale Mono"));
|
||||
facename.Add(_T("OCR A Extended"));
|
||||
facename.Add(_T("Terminal"));
|
||||
break;
|
||||
|
||||
case wxSWISS:
|
||||
ff_family = FF_SWISS;
|
||||
facename = _T("Arial");
|
||||
facename.Add(_T("Arial"));
|
||||
facename.Add(_T("Century Gothic"));
|
||||
facename.Add(_T("Lucida Sans Unicode"));
|
||||
facename.Add(_T("Tahoma"));
|
||||
facename.Add(_T("Trebuchet MS"));
|
||||
facename.Add(_T("Verdana"));
|
||||
break;
|
||||
|
||||
case wxDEFAULT:
|
||||
@@ -607,9 +630,15 @@ void wxNativeFontInfo::SetFamily(wxFontFamily family)
|
||||
int verMaj;
|
||||
ff_family = FF_SWISS;
|
||||
if(wxGetOsVersion(&verMaj) == wxWINDOWS_NT && verMaj >= 5)
|
||||
facename = _T("MS Shell Dlg 2");
|
||||
facename.Add(_T("MS Shell Dlg 2"));
|
||||
else
|
||||
facename = _T("MS Shell Dlg");
|
||||
facename.Add(_T("MS Shell Dlg"));
|
||||
|
||||
// Quoting the MSDN:
|
||||
// "MS Shell Dlg is a mapping mechanism that enables
|
||||
// U.S. English Microsoft Windows NT, and Microsoft Windows 2000 to
|
||||
// support locales that have characters that are not contained in code
|
||||
// page 1252. It is not a font but a face name for a nonexistent font."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -920,13 +949,22 @@ void wxFont::SetWeight(int weight)
|
||||
RealizeResource();
|
||||
}
|
||||
|
||||
void wxFont::SetFaceName(const wxString& faceName)
|
||||
bool wxFont::SetFaceName(const wxString& faceName)
|
||||
{
|
||||
Unshare();
|
||||
|
||||
M_FONTDATA->SetFaceName(faceName);
|
||||
bool refdataok = M_FONTDATA->SetFaceName(faceName);
|
||||
|
||||
RealizeResource();
|
||||
|
||||
// NB: using win32's GetObject() API on M_FONTDATA->GetHFONT()
|
||||
// to retrieve a LOGFONT and then compare lf.lfFaceName
|
||||
// with given facename is not reliable at all:
|
||||
// Windows copies the facename given to ::CreateFontIndirect()
|
||||
// without any validity check.
|
||||
// Thus we use wxFontBase::SetFaceName to check if facename
|
||||
// is valid...
|
||||
return refdataok && wxFontBase::SetFaceName(faceName);
|
||||
}
|
||||
|
||||
void wxFont::SetUnderlined(bool underlined)
|
||||
@@ -1029,6 +1067,20 @@ const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
|
||||
: NULL;
|
||||
}
|
||||
|
||||
wxString wxFont::GetNativeFontInfoDesc() const
|
||||
{
|
||||
// be sure we have an HFONT associated...
|
||||
wxConstCast(this, wxFont)->RealizeResource();
|
||||
return wxFontBase::GetNativeFontInfoDesc();
|
||||
}
|
||||
|
||||
wxString wxFont::GetNativeFontInfoUserDesc() const
|
||||
{
|
||||
// be sure we have an HFONT associated...
|
||||
wxConstCast(this, wxFont)->RealizeResource();
|
||||
return wxFontBase::GetNativeFontInfoUserDesc();
|
||||
}
|
||||
|
||||
bool wxFont::IsFixedWidth() const
|
||||
{
|
||||
if ( M_FONTDATA->HasNativeFontInfo() )
|
||||
@@ -1043,3 +1095,4 @@ bool wxFont::IsFixedWidth() const
|
||||
|
||||
return wxFontBase::IsFixedWidth();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user