void wxFillLogFont(
LOGFONT* pFattrs // OS2 GPI FATTRS
, PFACENAMEDESC pFaceName
-, HPS hPS
+, HPS* phPS
+, bool* pbInternalPS
, long* pflId
, wxString& sFaceName
, wxFont* pFont
{
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;
// 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.
// Retrieve the font metrics.
//
lTemp = lNumFonts;
- lTemp = ::GpiQueryFonts( hPS
+ lTemp = ::GpiQueryFonts( *phPS
,QF_PUBLIC
,NULL
,&lTemp
wxString sVals;
+ //
+ // For debugging, delete later
+ //
for (int i = 0; i < lNumFonts; i++)
{
sVals << "Face: " << pFM[i].szFacename
// 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 )
STR8 azNames[255];
long alIds[255];
- if(!::GpiQuerySetIds( hPS
+ if(!::GpiQuerySetIds( *phPS
,lNumLids
,alTypes
,azNames
))
{
if (bInternalPS)
- ::WinReleasePS(hPS);
+ ::WinReleasePS(*phPS);
return;
}
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
strcpy(zFacename, pFattrs->szFacename);
- if(::GpiQueryFaceString( hPS
+ if(::GpiQueryFaceString( *phPS
,zFacename
,pFaceName
,FACESIZE
vError = ::WinGetLastError(vHabmain);
}
sFaceName = zFacename;
+ *pbInternalPS = bInternalPS;
//
// That's it, we now have everything we need to actually create the font
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;
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())
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;