applied wxNativeFontInfo patch from Derry Bryson (with minor changes)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8934 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2000-12-18 01:00:25 +00:00
parent a9c317d27c
commit 30764ab524
17 changed files with 449 additions and 68 deletions

View File

@@ -47,7 +47,8 @@ public:
int weight = wxDEFAULT,
bool underlined = FALSE,
const wxString& faceName = wxEmptyString,
wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
wxFontEncoding encoding = wxFONTENCODING_DEFAULT,
const wxNativeFontInfo& info = wxNullNativeFontInfo);
wxFontRefData( const wxFontRefData& data );
virtual ~wxFontRefData();
@@ -59,7 +60,8 @@ protected:
int weight,
bool underlined,
const wxString& faceName,
wxFontEncoding encoding);
wxFontEncoding encoding,
const wxNativeFontInfo& info);
private:
wxList m_scaled_xfonts;
@@ -70,6 +72,7 @@ private:
bool m_underlined;
wxString m_faceName;
wxFontEncoding m_encoding;
wxNativeFontInfo m_nativeFontInfo;
friend class wxFont;
};
@@ -88,7 +91,8 @@ void wxFontRefData::Init(int pointSize,
int weight,
bool underlined,
const wxString& faceName,
wxFontEncoding encoding)
wxFontEncoding encoding,
const wxNativeFontInfo& info = wxNullNativeFontInfo)
{
if (family == wxDEFAULT)
m_family = wxSWISS;
@@ -114,21 +118,24 @@ void wxFontRefData::Init(int pointSize,
m_underlined = underlined;
m_encoding = encoding;
m_nativeFontInfo = info;
}
wxFontRefData::wxFontRefData( const wxFontRefData& data )
: m_scaled_xfonts(wxKEY_INTEGER)
{
Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,
data.m_underlined, data.m_faceName, data.m_encoding);
data.m_underlined, data.m_faceName, data.m_encoding,
data.m_nativeFontInfo );
}
wxFontRefData::wxFontRefData(int size, int family, int style,
int weight, bool underlined, const wxString& faceName, wxFontEncoding encoding )
int weight, bool underlined, const wxString& faceName, wxFontEncoding encoding,
const wxNativeFontInfo& info = wxNullNativeFontInfo)
: m_scaled_xfonts(wxKEY_INTEGER)
{
Init(size, family, style, weight,
underlined, faceName, encoding);
underlined, faceName, encoding, info);
}
wxFontRefData::~wxFontRefData()
@@ -143,6 +150,21 @@ wxFontRefData::~wxFontRefData()
}
}
// ----------------------------------------------------------------------------
// wxNativeFontInfo
// ----------------------------------------------------------------------------
bool wxNativeFontInfo::FromString(const wxString& s)
{
xFontName = s;
return TRUE;
}
wxString wxNativeFontInfo::ToString() const
{
return xFontName;
}
// ----------------------------------------------------------------------------
// wxFont
// ----------------------------------------------------------------------------
@@ -155,14 +177,40 @@ void wxFont::Init()
wxTheFontList->Append( this );
}
wxFont::wxFont( const wxString& fontname, const wxFontData& fontdata )
wxFont::wxFont(const wxNativeFontInfo& info)
{
Create(info.xFontName, wxFontData());
}
bool wxFont::Create( int pointSize,
int family,
int style,
int weight,
bool underlined,
const wxString& face,
wxFontEncoding encoding,
const wxNativeFontInfo& info )
{
m_refData = new wxFontRefData(pointSize, family, style, weight,
underlined, face, encoding, info);
return TRUE;
}
bool wxFont::Create(const wxString& fontname, const wxFontData& fontdata)
{
Init();
wxCHECK_RET( !!fontname, _T("invalid font spec") );
if(!fontname)
{
*this = wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT);
return TRUE;
}
m_refData = new wxFontRefData();
M_FONTDATA->m_nativeFontInfo.xFontName = fontname; // X font name
wxString tmp;
wxStringTokenizer tn( fontname, wxT("-") );
@@ -170,6 +218,7 @@ wxFont::wxFont( const wxString& fontname, const wxFontData& fontdata )
tn.GetNextToken(); // skip initial empty token
tn.GetNextToken(); // foundry
M_FONTDATA->m_faceName = tn.GetNextToken(); // family
tmp = tn.GetNextToken().MakeUpper(); // weight
@@ -247,20 +296,9 @@ wxFont::wxFont( const wxString& fontname, const wxFontData& fontdata )
M_FONTDATA->m_encoding = wxFONTENCODING_KOI8;
}
//else: unknown encoding - may be give a warning here?
else
return FALSE;
}
}
bool wxFont::Create( int pointSize,
int family,
int style,
int weight,
bool underlined,
const wxString& face,
wxFontEncoding encoding )
{
m_refData = new wxFontRefData(pointSize, family, style, weight,
underlined, face, encoding);
return TRUE;
}
@@ -338,6 +376,16 @@ wxFontEncoding wxFont::GetEncoding() const
return M_FONTDATA->m_encoding;
}
wxNativeFontInfo wxFont::GetNativeFontInfo() const
{
wxCHECK_MSG( Ok(), wxNullNativeFontInfo, wxT("invalid font") );
if(M_FONTDATA->m_nativeFontInfo.xFontName.IsEmpty())
GetInternalFont();
return M_FONTDATA->m_nativeFontInfo;
}
// ----------------------------------------------------------------------------
// change font attributes
// ----------------------------------------------------------------------------
@@ -347,6 +395,7 @@ void wxFont::SetPointSize(int pointSize)
Unshare();
M_FONTDATA->m_pointSize = pointSize;
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
}
void wxFont::SetFamily(int family)
@@ -354,6 +403,7 @@ void wxFont::SetFamily(int family)
Unshare();
M_FONTDATA->m_family = family;
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
}
void wxFont::SetStyle(int style)
@@ -361,6 +411,7 @@ void wxFont::SetStyle(int style)
Unshare();
M_FONTDATA->m_style = style;
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
}
void wxFont::SetWeight(int weight)
@@ -368,6 +419,7 @@ void wxFont::SetWeight(int weight)
Unshare();
M_FONTDATA->m_weight = weight;
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
}
void wxFont::SetFaceName(const wxString& faceName)
@@ -375,6 +427,7 @@ void wxFont::SetFaceName(const wxString& faceName)
Unshare();
M_FONTDATA->m_faceName = faceName;
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
}
void wxFont::SetUnderlined(bool underlined)
@@ -389,6 +442,14 @@ void wxFont::SetEncoding(wxFontEncoding encoding)
Unshare();
M_FONTDATA->m_encoding = encoding;
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
}
void wxFont::SetNativeFontInfo(const wxNativeFontInfo& info)
{
Unshare();
M_FONTDATA->m_nativeFontInfo = info;
}
// ----------------------------------------------------------------------------
@@ -450,7 +511,8 @@ GdkFont *wxFont::GetInternalFont( float scale ) const
M_FONTDATA->m_weight,
M_FONTDATA->m_underlined,
M_FONTDATA->m_faceName,
M_FONTDATA->m_encoding );
M_FONTDATA->m_encoding,
&M_FONTDATA->m_nativeFontInfo.xFontName );
}
M_FONTDATA->m_scaled_xfonts.Append( int_scale, (wxObject*)font );