1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
/********************************************************************************************
Clean OS Windows library module version 1.2.1.
This module is part of the Clean Object I/O library, version 1.2.1,
for the Windows platform.
********************************************************************************************/
/********************************************************************************************
About this module:
Routines related to font handling.
********************************************************************************************/
#include "cCrossCallFont_121.h"
#include "cCrossCall_121.h"
static int CALLBACK EnumFontNameProc (ENUMLOGFONT FAR * lpelf, /* pointer to logical-font data */
NEWTEXTMETRIC FAR * lpntm, /* pointer to physical-font data */
int fontType, /* type of font */
LPARAM lParam /* address of application-defined data */
)
{
SendMessage1ToClean (CcCbFONTNAME, lpelf->elfLogFont.lfFaceName);
return 1;
}
static int CALLBACK EnumFontSizeProc (ENUMLOGFONT FAR * lpelf, /* pointer to logical-font data */
NEWTEXTMETRIC FAR * lpntm, /* pointer to physical-font data */
int fontType, /* type of font */
LPARAM lParam /* address of application-defined data */
)
{
int h = lpntm->tmHeight - lpntm->tmInternalLeading;
SendMessage2ToClean (CcCbFONTSIZE,h*72/WinGetVertResolution(),fontType == TRUETYPE_FONTTYPE);
if (fontType == TRUETYPE_FONTTYPE)
return 0;
else
return 1;
}
/* Cross call procedure implementations.
Eval<nr> corresponds with a CrossCallEntry generated by NewCrossCallEntry (nr,Eval<nr>).
*/
void EvalCcRqGETFONTNAMES (CrossCallInfo *pcci) // no params; no result.
{
HDC hdc;
hdc = GetDC (ghMainWindow);
EnumFontFamilies (hdc, NULL, (FONTENUMPROC) EnumFontNameProc, 0);
ReleaseDC (ghMainWindow, hdc);
MakeReturn0Cci (pcci);
}
void EvalCcRqGETFONTSIZES (CrossCallInfo *pcci) // textptr; no result.
{
HDC hdc;
hdc = GetDC (ghMainWindow);
EnumFontFamilies (hdc, (char *) pcci->p1, (FONTENUMPROC) EnumFontSizeProc, 0);
ReleaseDC (ghMainWindow, hdc);
rfree ((char *) pcci->p1);
MakeReturn0Cci (pcci);
}
// InstallCrossCallFont adds the proper cross call procedures to the
// cross call procedures managed by cCrossCall_121.c.
void InstallCrossCallFont ()
{
CrossCallProcedureTable newTable;
newTable = EmptyCrossCallProcedureTable ();
AddCrossCallEntry (newTable, CcRqGETFONTNAMES,EvalCcRqGETFONTNAMES);
AddCrossCallEntry (newTable, CcRqGETFONTSIZES,EvalCcRqGETFONTSIZES);
AddCrossCallEntries (gCrossCallProcedureTable, newTable);
}
|