- int ff_family = 0;
- wxString ff_face;
-
- switch ( M_FONTDATA->m_family )
- {
- case wxSCRIPT:
- ff_family = FF_SCRIPT ;
- ff_face = wxT("Script") ;
- break ;
-
- case wxDECORATIVE:
- ff_family = FF_DECORATIVE;
- break;
-
- case wxROMAN:
- ff_family = FF_ROMAN;
- ff_face = wxT("Times New Roman") ;
- break;
-
- case wxTELETYPE:
- case wxMODERN:
- ff_family = FF_MODERN;
- ff_face = wxT("Courier New") ;
- break;
-
- case wxSWISS:
- ff_family = FF_SWISS;
- ff_face = wxT("Arial") ;
- break;
-
- case wxDEFAULT:
- default:
- ff_family = FF_SWISS;
- ff_face = wxT("Arial") ;
- }
-
- BYTE ff_italic;
- switch ( M_FONTDATA->m_style )
- {
- case wxITALIC:
- case wxSLANT:
- ff_italic = 1;
- break;
-
- default:
- wxFAIL_MSG(wxT("unknown font slant"));
- // fall through
-
- case wxNORMAL:
- ff_italic = 0;
- }
-
- int ff_weight = 0;
- switch ( M_FONTDATA->m_weight )
- {
- default:
- wxFAIL_MSG(wxT("unknown font weight"));
- // fall through
-
- case wxNORMAL:
- ff_weight = FW_NORMAL;
- break;
-
- case wxLIGHT:
- ff_weight = FW_LIGHT;
- break;
-
- case wxBOLD:
- ff_weight = FW_BOLD;
- break;
- }
-
- const wxChar* pzFace;
- if ( M_FONTDATA->m_faceName.IsEmpty() )
- pzFace = ff_face;
- else
- pzFace = M_FONTDATA->m_faceName ;
-
-#if 0
- /* Always calculate fonts using the screen DC (is this the best strategy?)
- * There may be confusion if a font is selected into a printer
- * DC (say), because the height will be calculated very differently.
- */
- // What sort of display is it?
- int technology = ::GetDeviceCaps(dc, TECHNOLOGY);
-
- int nHeight;
-
- if (technology != DT_RASDISPLAY && technology != DT_RASPRINTER)
- {
- // Have to get screen DC Caps, because a metafile will return 0.
- HDC dc2 = ::GetDC(NULL);
- nHeight = M_FONTDATA->m_pointSize*GetDeviceCaps(dc2, LOGPIXELSY)/72;
- ::ReleaseDC(NULL, dc2);
- }
- else
- {
- nHeight = M_FONTDATA->m_pointSize*GetDeviceCaps(dc, LOGPIXELSY)/72;
- }
-#endif // 0
-
-#if 0
- // Have to get screen DC Caps, because a metafile will return 0.
- HDC dc2 = ::GetDC(NULL);
- ppInch = ::GetDeviceCaps(dc2, LOGPIXELSY);
- ::ReleaseDC(NULL, dc2);
-#endif // 0
-
- // New behaviour: apparently ppInch varies according to Large/Small Fonts
- // setting in Windows. This messes up fonts. So, set ppInch to a constant
- // 96 dpi.
- static const int ppInch = 96;
-
-#if wxFONT_SIZE_COMPATIBILITY
- // Incorrect, but compatible with old wxWindows behaviour
- int nHeight = (M_FONTDATA->m_pointSize*ppInch/72);
-#else
- // Correct for Windows compatibility
- int nHeight = - (M_FONTDATA->m_pointSize*ppInch/72);
-#endif
-
- BYTE ff_underline = M_FONTDATA->m_underlined;
-
- wxFontEncoding encoding = M_FONTDATA->m_encoding;
- if ( encoding == wxFONTENCODING_DEFAULT )
- {
- encoding = wxFont::GetDefaultEncoding();
- }
-
- DWORD charset;
- switch ( encoding )