|
|
/************************************************************/ /* 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 <windows.h>
#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); }
|