#include "wx/tokenzr.h"
#include "wx/msw/private.h"
+#include "wx/tokenzr.h"
IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
Init(size, family, style, weight, underlined, faceName, encoding);
}
- wxFontRefData(const wxNativeFontInfo& info)
+ wxFontRefData(const wxNativeFontInfo& info)
{
Init(info);
}
// Windows font handle
WXHFONT m_hFont;
-
+
// Native font info
wxNativeFontInfo m_nativeFontInfo;
bool m_nativeFontInfoOk;
m_temporary = FALSE;
m_hFont = 0;
-
+
m_nativeFontInfoOk = FALSE;
}
m_faceName = info.lf.lfFaceName;
- // remember that 1pt = 1/72inch
int height = abs(info.lf.lfHeight);
-#if wxUSE_SCREEN_DPI
- HDC dc = ::GetDC(NULL);
- static const int ppInch = GetDeviceCaps(dc, LOGPIXELSY);
- ::ReleaseDC(NULL, dc);
-#else
- static const int ppInch = 96;
-#endif
+ // remember that 1pt = 1/72inch
+ const int ppInch = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY);
m_pointSize = (int) (((72.0*((double)height))/(double) ppInch) + 0.5);
-
+
m_encoding = wxGetFontEncFromCharSet(info.lf.lfCharSet);
-
+
m_fontId = 0;
m_temporary = FALSE;
m_hFont = 0;
-
+
m_nativeFontInfoOk = TRUE;
m_nativeFontInfo = info;
}
token = tokenizer.GetNextToken();
if ( !token.ToLong(&l) )
return FALSE;
- lf.lfItalic = l;
+ lf.lfItalic = (BYTE)l;
token = tokenizer.GetNextToken();
if ( !token.ToLong(&l) )
return FALSE;
- lf.lfUnderline = l;
+ lf.lfUnderline = (BYTE)l;
token = tokenizer.GetNextToken();
if ( !token.ToLong(&l) )
return FALSE;
- lf.lfStrikeOut = l;
+ lf.lfStrikeOut = (BYTE)l;
token = tokenizer.GetNextToken();
if ( !token.ToLong(&l) )
return FALSE;
- lf.lfCharSet = l;
+ lf.lfCharSet = (BYTE)l;
token = tokenizer.GetNextToken();
if ( !token.ToLong(&l) )
return FALSE;
- lf.lfOutPrecision = l;
+ lf.lfOutPrecision = (BYTE)l;
token = tokenizer.GetNextToken();
if ( !token.ToLong(&l) )
return FALSE;
- lf.lfClipPrecision = l;
+ lf.lfClipPrecision = (BYTE)l;
token = tokenizer.GetNextToken();
if ( !token.ToLong(&l) )
return FALSE;
- lf.lfQuality = l;
+ lf.lfQuality = (BYTE)l;
token = tokenizer.GetNextToken();
if ( !token.ToLong(&l) )
return FALSE;
- lf.lfPitchAndFamily = l;
+ lf.lfPitchAndFamily = (BYTE)l;
token = tokenizer.GetNextToken();
if(!token)
wxFillLogFont(&M_FONTDATA->m_nativeFontInfo.lf, this);
M_FONTDATA->m_nativeFontInfoOk = TRUE;
}
-
+
M_FONTDATA->m_hFont = (WXHFONT)::CreateFontIndirect(&M_FONTDATA->m_nativeFontInfo.lf);
M_FONTDATA->m_faceName = M_FONTDATA->m_nativeFontInfo.lf.lfFaceName;
if ( !M_FONTDATA->m_hFont )
return TRUE;
}
-bool wxFont::FreeResource(bool force)
+bool wxFont::FreeResource(bool WXUNUSED(force))
{
if ( GetResourceHandle() )
{
void wxFont::SetNativeFontInfo(const wxNativeFontInfo& info)
{
Unshare();
-
- FreeResource();
+
+ FreeResource();
M_FONTDATA->Init(info);
int wxFont::GetPointSize() const
{
+ wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
+
return M_FONTDATA->m_pointSize;
}
int wxFont::GetFamily() const
{
+ wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
+
return M_FONTDATA->m_family;
}
int wxFont::GetFontId() const
{
+ wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
+
return M_FONTDATA->m_fontId;
}
int wxFont::GetStyle() const
{
+ wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
+
return M_FONTDATA->m_style;
}
int wxFont::GetWeight() const
{
+ wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
+
return M_FONTDATA->m_weight;
}
bool wxFont::GetUnderlined() const
{
+ wxCHECK_MSG( Ok(), FALSE, wxT("invalid font") );
+
return M_FONTDATA->m_underlined;
}
wxString wxFont::GetFaceName() const
{
- wxString str;
- if ( M_FONTDATA )
- str = M_FONTDATA->m_faceName;
- return str;
+ wxCHECK_MSG( Ok(), wxT(""), wxT("invalid font") );
+
+ return M_FONTDATA->m_faceName;
}
wxFontEncoding wxFont::GetEncoding() const
{
+ wxCHECK_MSG( Ok(), wxFONTENCODING_DEFAULT, wxT("invalid font") );
+
return M_FONTDATA->m_encoding;
}
-wxNativeFontInfo *wxFont::GetNativeFontInfo() const
+// ----------------------------------------------------------------------------
+// wxNativeFontInfo
+// ----------------------------------------------------------------------------
+
+bool wxNativeFontInfo::FromString(const wxString& s)
+{
+ long l;
+
+ wxStringTokenizer tokenizer(s, _T(";"));
+
+ wxString token = tokenizer.GetNextToken();
+ //
+ // Ignore the version for now
+ //
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ lf.lfHeight = l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ lf.lfWidth = l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ lf.lfEscapement = l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ lf.lfOrientation = l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ lf.lfWeight = l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ lf.lfItalic = (BYTE)l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ lf.lfUnderline = (BYTE)l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ lf.lfStrikeOut = (BYTE)l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ lf.lfCharSet = (BYTE)l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ lf.lfOutPrecision = (BYTE)l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ lf.lfClipPrecision = (BYTE)l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ lf.lfQuality = (BYTE)l;
+
+ token = tokenizer.GetNextToken();
+ if ( !token.ToLong(&l) )
+ return FALSE;
+ lf.lfPitchAndFamily = (BYTE)l;
+
+ token = tokenizer.GetNextToken();
+ if(!token)
+ return FALSE;
+ wxStrcpy(lf.lfFaceName, token.c_str());
+
+ return TRUE;
+}
+
+wxString wxNativeFontInfo::ToString() const
{
- if( M_FONTDATA->m_nativeFontInfoOk )
- return new wxNativeFontInfo(M_FONTDATA->m_nativeFontInfo);
-
- return 0;
+ wxString s;
+
+ s.Printf(_T("%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%s"),
+ 0, // version, in case we want to change the format later
+ lf.lfHeight,
+ lf.lfWidth,
+ lf.lfEscapement,
+ lf.lfOrientation,
+ lf.lfWeight,
+ lf.lfItalic,
+ lf.lfUnderline,
+ lf.lfStrikeOut,
+ lf.lfCharSet,
+ lf.lfOutPrecision,
+ lf.lfClipPrecision,
+ lf.lfQuality,
+ lf.lfPitchAndFamily,
+ lf.lfFaceName);
+
+ return s;
}