X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cc95f4f9477e96ac2ce9a18f410ef98a169a75a6..0f713d485bbee9a1a13440464b4139f08599b4ab:/src/os2/fontutil.cpp diff --git a/src/os2/fontutil.cpp b/src/os2/fontutil.cpp index 052537053e..805b4eeb9e 100644 --- a/src/os2/fontutil.cpp +++ b/src/os2/fontutil.cpp @@ -261,7 +261,8 @@ bool wxTestFontEncoding( void wxFillLogFont( LOGFONT* pFattrs // OS2 GPI FATTRS , PFACENAMEDESC pFaceName -, HPS hPS +, HPS* phPS +, bool* pbInternalPS , long* pflId , wxString& sFaceName , wxFont* pFont @@ -269,7 +270,7 @@ void wxFillLogFont( { LONG lNumFonts = 0L; // For system font count ERRORID vError; // For logging API errors - LONG lTemp; + LONG lTemp = 0L; bool bInternalPS = FALSE; // if we have to create one PFONTMETRICS pFM = NULL; @@ -277,22 +278,30 @@ void wxFillLogFont( // Initial house cleaning to free data buffers and ensure we have a // functional PS to work with // - if (!hPS) + if (!*phPS) { - hPS = ::WinGetPS(HWND_DESKTOP); + *phPS = ::WinGetPS(HWND_DESKTOP); bInternalPS = TRUE; } // // Determine the number of fonts. // - lNumFonts = ::GpiQueryFonts( hPS - ,QF_PUBLIC - ,NULL - ,&lTemp - ,(LONG) sizeof(FONTMETRICS) - ,NULL - ); + if((lNumFonts = ::GpiQueryFonts( *phPS + ,QF_PUBLIC + ,NULL + ,&lTemp + ,(LONG) sizeof(FONTMETRICS) + ,NULL + )) < 0L) + { + ERRORID vError; + wxString sError; + + vError = ::WinGetLastError(wxGetInstance()); + sError = wxPMErrorToStr(vError); + return; + } // // Allocate space for the font metrics. @@ -303,7 +312,7 @@ void wxFillLogFont( // Retrieve the font metrics. // lTemp = lNumFonts; - lTemp = ::GpiQueryFonts( hPS + lTemp = ::GpiQueryFonts( *phPS ,QF_PUBLIC ,NULL ,&lTemp @@ -316,6 +325,9 @@ void wxFillLogFont( wxString sVals; + // + // For debugging, delete later + // for (int i = 0; i < lNumFonts; i++) { sVals << "Face: " << pFM[i].szFacename @@ -355,7 +367,7 @@ void wxFillLogFont( // We should now have the correct FATTRS set with the selected // font, so now we need to generate an ID // - long lNumLids = ::GpiQueryNumberSetIds(hPS); + long lNumLids = ::GpiQueryNumberSetIds(*phPS); long lGpiError; if(lNumLids ) @@ -364,7 +376,7 @@ void wxFillLogFont( STR8 azNames[255]; long alIds[255]; - if(!::GpiQuerySetIds( hPS + if(!::GpiQuerySetIds( *phPS ,lNumLids ,alTypes ,azNames @@ -372,7 +384,7 @@ void wxFillLogFont( )) { if (bInternalPS) - ::WinReleasePS(hPS); + ::WinReleasePS(*phPS); return; } @@ -382,16 +394,17 @@ void wxFillLogFont( if(*pflId > 254) // wow, no id available! { if (bInternalPS) - ::WinReleasePS(hPS); + ::WinReleasePS(*phPS); return; } } - + else + *pflId = 1L; // // Release and delete the current font // - ::GpiSetCharSet(hPS, LCID_DEFAULT);/* release the font before deleting */ - ::GpiDeleteSetId(hPS, 1L); /* delete the logical font */ + ::GpiSetCharSet(*phPS, LCID_DEFAULT);/* release the font before deleting */ + ::GpiDeleteSetId(*phPS, 1L); /* delete the logical font */ // // Now build a facestring @@ -400,7 +413,7 @@ void wxFillLogFont( strcpy(zFacename, pFattrs->szFacename); - if(::GpiQueryFaceString( hPS + if(::GpiQueryFaceString( *phPS ,zFacename ,pFaceName ,FACESIZE @@ -410,6 +423,7 @@ void wxFillLogFont( vError = ::WinGetLastError(vHabmain); } sFaceName = zFacename; + *pbInternalPS = bInternalPS; // // That's it, we now have everything we need to actually create the font @@ -429,12 +443,12 @@ void wxOS2SelectMatchingFontByName( int nPointSize; int nDiff; int nIs; - int nIndex; int nMinDiff; int nMinDiff0; int nApirc; int anDiff[16]; int anMinDiff[16]; + int nIndex = 0; STR8 zFn; char zFontFaceName[FACESIZE]; wxString sFaceName; @@ -453,21 +467,24 @@ void wxOS2SelectMatchingFontByName( case wxDECORATIVE: case wxROMAN: - sFaceName = wxT("Times New Roman"); + sFaceName = wxT("Tms Rmn"); break; case wxTELETYPE: - case wxMODERN: sFaceName = wxT("Courier") ; break; + case wxMODERN: + sFaceName = wxT("System VIO") ; + break; + case wxSWISS: - sFaceName = wxT("WarpSans") ; + sFaceName = wxT("Helv") ; break; case wxDEFAULT: default: - sFaceName = wxT("Helv") ; + sFaceName = wxT("System VIO") ; } switch (pFont->GetWeight()) @@ -598,16 +615,8 @@ void wxOS2SelectMatchingFontByName( pFattrs->lMatch = pFM[nIndex].lMatch; // force match pFattrs->idRegistry = pFM[nIndex].idRegistry; // uses default registry pFattrs->usCodePage = pFM[nIndex].usCodePage; // code-page - if(pFM[nIndex].lMatch) - { - pFattrs->lMaxBaselineExt = pFM[nIndex].lMaxBaselineExt; // requested font height - pFattrs->lAveCharWidth = pFM[nIndex].lAveCharWidth ; // requested font width - } - else - { - pFattrs->lMaxBaselineExt = 0; - pFattrs->lAveCharWidth = 0; - } + pFattrs->lMaxBaselineExt = 0; // OUTLINE fonts need this set to 0 as they use other attributes to match + pFattrs->lAveCharWidth = 0; // OUTLINE fonts need this set to 0 as they use other attributes to match pFattrs->fsType = 0;// pfm->fsType; /* uses default type */ pFattrs->fsFontUse = 0;