|
|
1.1 root 1: /*----------------------------------------------
2: EASYFONT.C -- Routines for Using Image Fonts
3: ----------------------------------------------*/
4:
5: #define INCL_GPI
6: #include <os2.h>
7: #include <stdlib.h>
8: #include <string.h>
9: #include "easyfont.h"
10:
11: static SHORT sFontSize[6] = { 80, 100, 120, 140, 180, 240 } ;
12: static CHAR *szFacename[4] = { "System Proportional",
13: "Courier", "Helv", "Tms Rmn" } ;
14: static LONG alMatch[4][6] ;
15:
16: BOOL EzfQueryFonts (HPS hps)
17: {
18: FONTMETRICS *pfm ;
19: HDC hdc ;
20: LONG lHorzRes, lVertRes, lRequestFonts, lNumberFonts ;
21: SHORT sIndex, sFace, sSize ;
22:
23: hdc = GpiQueryDevice (hps) ;
24: DevQueryCaps (hdc, CAPS_HORIZONTAL_FONT_RES, 1L, &lHorzRes) ;
25: DevQueryCaps (hdc, CAPS_VERTICAL_FONT_RES, 1L, &lVertRes) ;
26:
27: for (sFace = 0 ; sFace < 4 ; sFace++)
28: {
29: lRequestFonts = 0 ;
30: lNumberFonts = GpiQueryFonts (hps, QF_PUBLIC, szFacename[sFace],
31: &lRequestFonts, 0L, NULL) ;
32: if (lNumberFonts == 0)
33: continue ;
34:
35: if (lNumberFonts * sizeof (FONTMETRICS) >= 65536L)
36: return FALSE ;
37:
38: pfm = malloc ((SHORT) lNumberFonts * sizeof (FONTMETRICS)) ;
39:
40: if (pfm == NULL)
41: return FALSE ;
42:
43: GpiQueryFonts (hps, QF_PUBLIC, szFacename[sFace],
44: &lNumberFonts, (LONG) sizeof (FONTMETRICS), pfm) ;
45:
46: for (sIndex = 0 ; sIndex < (SHORT) lNumberFonts ; sIndex++)
47: if (pfm[sIndex].sXDeviceRes == (SHORT) lHorzRes &&
48: pfm[sIndex].sYDeviceRes == (SHORT) lVertRes &&
49: (pfm[sIndex].fsDefn & 1) == 0)
50: {
51: for (sSize = 0 ; sSize < 6 ; sSize++)
52: if (pfm[sIndex].sNominalPointSize == sFontSize[sSize])
53: break ;
54:
55: if (sSize != 6)
56: alMatch[sFace][sSize] = pfm[sIndex].lMatch ;
57: }
58:
59: free (pfm) ;
60: }
61: return TRUE ;
62: }
63:
64: LONG EzfCreateLogFont (HPS hps, LONG lcid, USHORT idFace, USHORT idSize,
65: USHORT fsSelection)
66: {
67: static FATTRS fat ;
68:
69: if (idFace > 3 || idSize > 5 || alMatch[idFace][idSize] == 0)
70: return FALSE ;
71:
72: fat.usRecordLength = sizeof fat ;
73: fat.fsSelection = fsSelection ;
74: fat.lMatch = alMatch[idFace][idSize] ;
75:
76: strcpy (fat.szFacename, szFacename[idFace]) ;
77:
78: return GpiCreateLogFont (hps, NULL, lcid, &fat) ;
79: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.