X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bff67a6a811bd0f8ec2315242ad2eb0324d9939d..19f1a09ac95f3698eca674a1daf65f5fc8a7b791:/src/msw/font.cpp?ds=sidebyside diff --git a/src/msw/font.cpp b/src/msw/font.cpp index 7a55510e19..a8fb8be541 100644 --- a/src/msw/font.cpp +++ b/src/msw/font.cpp @@ -366,6 +366,8 @@ void wxNativeFontInfo::Init() 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); @@ -397,6 +399,45 @@ wxString wxNativeFontInfo::GetFaceName() const return lf.lfFaceName; } +wxFontFamily wxNativeFontInfo::GetFamily() const +{ + // extract family from pitch-and-family + int lfFamily = lf.lfPitchAndFamily; + int family; + + if ( lfFamily & FIXED_PITCH ) + lfFamily -= FIXED_PITCH; + if ( lfFamily & VARIABLE_PITCH ) + lfFamily -= VARIABLE_PITCH; + + switch ( lfFamily ) + { + case FF_ROMAN: + family = wxROMAN; + break; + + case FF_SWISS: + family = wxSWISS; + break; + + case FF_SCRIPT: + family = wxSCRIPT; + break; + + case FF_MODERN: + family = wxMODERN; + break; + + case FF_DECORATIVE: + family = wxDECORATIVE; + break; + + default: + family = wxSWISS; + } + return (wxFontFamily)family; +} + wxFontEncoding wxNativeFontInfo::GetEncoding() const { return wxGetFontEncFromCharSet(lf.lfCharSet); @@ -404,9 +445,16 @@ wxFontEncoding wxNativeFontInfo::GetEncoding() const 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) @@ -456,7 +504,54 @@ void wxNativeFontInfo::SetUnderlined(bool underlined) 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) @@ -465,19 +560,22 @@ void wxNativeFontInfo::SetEncoding(wxFontEncoding encoding) if ( !wxGetNativeFontEncoding(encoding, &info) ) { #if wxUSE_FONTMAP - if ( !wxTheFontMapper->GetAltForEncoding(encoding, &info) ) + 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; } - else 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); - } } lf.lfCharSet = info.charset;