IIMaskCache.mesa
Copyright Ó 1986 by Xerox Corporation. All rights reserved.
Michael Plass, November 21, 1986 2:01:51 pm PST
Doug Wyatt, May 19, 1985 4:06:38 pm PDT
DIRECTORY
IIFont USING [Font, CorrectionType, XChar],
IISample USING [SampleMap],
Scaled USING [Value],
SF USING [Box, BoxAction, maxBox, Vec, zeroVec];
IIMaskCache: CEDAR DEFINITIONS
~ BEGIN
XChar: TYPE ~ IIFont.XChar;
Device-dependent Character Masks
Run: TYPE ~ MACHINE DEPENDENT RECORD [fMin: CARDINAL, lastRun: BOOL, fSize: NAT];
Same as PDFileFormat.Run; fMin is relative to fMinBB.
ScaledVec: TYPE ~ RECORD [s, f: Scaled.Value];
CharMask: TYPE ~ REF CharMaskRep;
CharMaskRep: TYPE ~ MACHINE DEPENDENT RECORD [
font: IIFont.Font, -- font and char together provide a unique identifier for this mask
char: IIFont.XChar,
escapement: ScaledVec,
box: SF.Box,
amplified: BOOL,
correction: IIFont.CorrectionType,
flag: PACKED ARRAY [0..11) OF [0..1], -- for padding and expansion
data: SELECT rep: * FROM
raster => [bits: SEQUENCE COMPUTED CARDINAL -- sSize*Ceiling[fSize/16.0] -- OF WORD],
runs => [run: SEQUENCE nRuns: CARDINAL OF Run],
culled, maskNotCacheable => [],
ENDCASE
];
BitmapFromCharMask: PROC [charMask: CharMask] RETURNS [IISample.SampleMap];
BoxesFromCharMask: PROC [charMask: CharMask, boxAction: SF.BoxAction, delta: SF.Vec ← SF.zeroVec, clip: SF.Box ← SF.maxBox];
Character Mask Caches
MaskCache: TYPE ~ REF MaskCacheRep;
MaskCacheRep: TYPE;
Create: PROC [size: NAT] RETURNS [MaskCache];
Size: PROC [x: MaskCache] RETURNS [NAT];
Number of elements in the cache.
Fetch: PROC [x: MaskCache, font: REF, char: XChar] RETURNS [CharMask];
Store: PROC [x: MaskCache, charMask: CharMask] RETURNS [ok: BOOL];
Returns FALSE if the cache is full. Since this is a cache, the implementation reserves the right to replace a previously existing entry.
Flush: PROC [x: MaskCache];
Makes the cache empty.
GetList: PROC [x: MaskCache] RETURNS [LIST OF CharMask];
In case somebody wants to save the cache somewhere else.
GetNamedCache: PROC [atom: ATOM, createSize: NAT] RETURNS [MaskCache];
For sharing caches by name.
FlushAll: PROC;
Flushes all the named caches.
END.