196 lines
4.7 KiB
C
196 lines
4.7 KiB
C
/************************************************************/
|
||
/* 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);
|
||
}
|
||
|
||
|
||
|
||
|