#include "wx/log.h"
#endif // WX_PRECOMP
+#include "wx/msw/private.h"
+
#include "wx/fontutil.h"
-#include "wx/tokenzr.h"
+#include "wx/fontmap.h"
-#include "wx/msw/private.h"
#include "wx/tokenzr.h"
IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
int wxNativeFontInfo::GetPointSize() const
{
+ // FIXME: using the screen here results in incorrect font size calculation
+ // for printing!
const int ppInch = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY);
return (int) (((72.0*(double)abs(lf.lfHeight)) / (double) ppInch) + 0.5);
void wxNativeFontInfo::SetPointSize(int pointsize)
{
+#if wxFONT_SIZE_COMPATIBILITY
+ // Incorrect, but compatible with old wxWindows behaviour
+ lf.lfHeight = (pointSize*ppInch)/72;
+#else // wxFONT_SIZE_COMPATIBILITY
+ // FIXME: using the screen here results in incorrect font size calculation
+ // for printing!
const int ppInch = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY);
lf.lfHeight = -(int)((pointsize*((double)ppInch)/72.0) + 0.5);
+#endif // wxFONT_SIZE_COMPATIBILITY/!wxFONT_SIZE_COMPATIBILITY
}
void wxNativeFontInfo::SetStyle(wxFontStyle style)
void wxNativeFontInfo::SetFaceName(wxString facename)
{
- wxStrncpy(lf.lfFaceName, facename, sizeof(lf.lfFaceName));
+ wxStrncpy(lf.lfFaceName, facename, WXSIZEOF(lf.lfFaceName));
+}
+
+void wxNativeFontInfo::SetFamily(wxFontFamily family)
+{
+ int ff_family;
+ wxString facename;
+
+ switch ( family )
+ {
+ case wxSCRIPT:
+ ff_family = FF_SCRIPT;
+ facename = _T("Script");
+ break;
+
+ case wxDECORATIVE:
+ ff_family = FF_DECORATIVE;
+ facename = _T("Old English Text MT");
+ break;
+
+ case wxROMAN:
+ ff_family = FF_ROMAN;
+ facename = _T("Times New Roman");
+ break;
+
+ case wxTELETYPE:
+ case wxMODERN:
+ ff_family = FF_MODERN;
+ facename = _T("Courier New");
+ break;
+
+ case wxSWISS:
+ ff_family = FF_SWISS;
+ facename = _T("Arial");
+ break;
+
+ case wxDEFAULT:
+ default:
+ ff_family = FF_SWISS;
+ facename = _T("MS Sans Serif");
+ }
+
+ lf.lfPitchAndFamily = DEFAULT_PITCH | ff_family;
+
+ if ( !wxStrlen(lf.lfFaceName) )
+ {
+ SetFaceName(facename);
+ }
}
void wxNativeFontInfo::SetEncoding(wxFontEncoding encoding)
wxNativeEncodingInfo info;
if ( !wxGetNativeFontEncoding(encoding, &info) )
{
- // unsupported encoding, replace with the default
- info.charset = ANSI_CHARSET;
+#if wxUSE_FONTMAP
+ if ( wxTheFontMapper->GetAltForEncoding(encoding, &info) )
+ {
+ if ( !info.facename.empty() )
+ {
+ // if we have this encoding only in some particular facename, use
+ // the facename - it is better to show the correct characters in a
+ // wrong facename than unreadable text in a correct one
+ SetFaceName(info.facename);
+ }
+ }
+ else
+#endif // wxUSE_FONTMAP
+ {
+ // unsupported encoding, replace with the default
+ info.charset = ANSI_CHARSET;
+ }
}
lf.lfCharSet = info.charset;