/************************************************************/ /* Windows Write, Copyright 1985-1992 Microsoft Corporation */ /************************************************************/ /* This routine sets up the screen position used by Word relative to the current device. */ #define NOGDICAPMASKS #define NOVIRTUALKEYCODES #define NOWINMESSAGES #define NOWINSTYLES #define NOCLIPBOARD #define NOCTLMGR #define NOMENUS /* HEY! if you change this to wwsmall.h, talk to bobm! (see Assert(LF_FACESIZE == LocalFaceSize)) */ #include #include "mw.h" #include "cmddefs.h" #include "docdefs.h" #include "fontdefs.h" int viffnDefault = -1; CHAR rgffnFontFamily[6][ibFfnMax]; struct FFN *PffnDefault(ffid) /* returns pointer to default font structure for this font family ID, which is set up when we started the program */ FFID ffid; { int iffn; struct FFN *pffn; if (ffid == FF_DONTCARE) { Assert(viffnDefault >= 0); iffn = viffnDefault; } else iffn = MpFfidIffn(ffid); pffn = (struct FFN *)(rgffnFontFamily[iffn]); if (pffn->szFfn[0] == 0) /* haven't gotten this one yet - must be old word document */ GetDefaultFonts(TRUE, FALSE); Assert(pffn->szFfn[0] != 0); return(pffn); } GetDefaultFonts(fExtraFonts, fGetAspect) /* We set up our table of default fonts in two steps. First we choose a single font, to use as the default font for a new document. Perhaps later, we are asked for a set of default fonts for different families to help make sense out of an old, word document. That case is differentiated by fExtraFonts being TRUE */ int fExtraFonts, fGetAspect; { extern int aspectXFont; extern int aspectYFont; extern HDC vhDCPrinter; struct FFN *pffn; CHAR rgb[ibFfnMax]; Assert(LF_FACESIZE == LocalFaceSize); #ifndef NEWFONTENUM Assert(vhDCPrinter); if (fGetAspect && vhDCPrinter != NULL) { extern FARPROC lpFontFaceEnum; int rgw[6]; rgw[0] = enumFindAspectRatio; rgw[1] = rgw[2] = 0xFFFF; rgw[3] = GetDeviceCaps(vhDCPrinter, LOGPIXELSY); rgw[4] = GetDeviceCaps(vhDCPrinter, LOGPIXELSX); rgw[5] = TRUE; EnumFonts(vhDCPrinter, 0L, lpFontFaceEnum, (LPSTR)MAKELONG(&rgw[0], 0)); aspectXFont = rgw[1]; aspectYFont = rgw[2]; } #endif if (FInitFontEnum(docNil, fExtraFonts ? 32767 : 1, TRUE)) { pffn = (struct FFN *)rgb; while (FEnumFont(pffn)) #ifdef NEWFONTENUM DefaultFamilyCheck(pffn->ffid, pffn->szFfn, pffn->chs); #else DefaultFamilyCheck(pffn->ffid, pffn->szFfn); #endif EndFontEnum(); } /* Fill in just in case we missed some. The order here is important, if there are no fonts at all, the default font will be the first one. */ { extern CHAR szModern[]; extern CHAR szRoman[]; extern CHAR szSwiss[]; extern CHAR szScript[]; extern CHAR szDecorative[]; DefaultFamilyCheck(FF_MODERN, szModern, NULL); if (fExtraFonts) { DefaultFamilyCheck(FF_ROMAN, szRoman, NULL); DefaultFamilyCheck(FF_SWISS, szSwiss, NULL); DefaultFamilyCheck(FF_SCRIPT, szScript, NULL); DefaultFamilyCheck(FF_DECORATIVE, szDecorative, NULL); DefaultFamilyCheck(FF_DONTCARE, szSwiss, NULL); } } } DefaultFamilyCheck(ffid, sz, chsIfKnown) FFID ffid; CHAR *sz; BYTE chsIfKnown; { int iffn; struct FFN *pffn; iffn = MpFfidIffn(ffid); pffn = (struct FFN *)(rgffnFontFamily[iffn]); if (pffn->szFfn[0] == 0) { #ifdef NEWFONTENUM pffn->chs = chsIfKnown; #endif pffn->ffid = ffid; bltszLimit(sz, pffn->szFfn, LF_FACESIZE); if (viffnDefault < 0) /* this font will be chosen for new documents */ viffnDefault = iffn; } } #define iffnSwiss 0 #define iffnRoman 1 #define iffnModern 2 #define iffnScript 3 #define iffnDecorative 4 #define iffnDontCare 5 MpFfidIffn(ffid) FFID ffid; { switch (ffid) { default: Assert( FALSE ); /* FALL THROUGH */ case FF_DONTCARE: return(iffnDontCare); case FF_SWISS: return(iffnSwiss); case FF_ROMAN: return(iffnRoman); case FF_MODERN: return(iffnModern); case FF_SCRIPT: return(iffnScript); case FF_DECORATIVE: return(iffnDecorative); } } ResetDefaultFonts(fGetAspect) int fGetAspect; { /* This routine resets the default mapping from a font family to a font face name. */ bltbc(rgffnFontFamily, 0, 6 * ibFfnMax); viffnDefault = -1; GetDefaultFonts(FALSE, fGetAspect); }