DIRECTORY Atom USING [PropList], Basics USING [BITAND, BITNOT, BITOR], Imager USING [Context, ClassRep], ImagerCache USING [Ref], ImagerDev USING [Device], ImagerFontPrivate USING [FontAtom], ImagerManhattan USING [DeviceRectangle, Polygon], ImagerScanConverter USING [DevicePath], ImagerTransformation USING [Transformation]; ImagerRast: CEDAR DEFINITIONS IMPORTS Basics ~ BEGIN Context: TYPE ~ Imager.Context; Device: TYPE ~ ImagerDev.Device; DevicePath: TYPE ~ ImagerScanConverter.DevicePath; FontAtom: TYPE ~ ImagerFontPrivate.FontAtom; Transformation: TYPE ~ ImagerTransformation.Transformation; ManhattanPolygon: TYPE ~ ImagerManhattan.Polygon; DeviceRectangle: TYPE ~ ImagerManhattan.DeviceRectangle; Flags: TYPE ~ RECORD[ clientToDevice: BOOL _ FALSE, -- clientToDevice is valid charToDevice: BOOL _ FALSE, -- charToDevice is valid clientClipper: BOOL _ FALSE, -- clientClipMask and clientClipBox are valid deviceColor: BOOL _ FALSE, -- color last set by SetColor[device, ...] is valid devicePriority: BOOL _ FALSE, -- priority last set by SetPriority[device, ...] is valid fontAtom: BOOL _ FALSE, -- fontAtom is valid unused: [0..1777B] _ 0 ]; noFlags: Flags ~ []; OrFlags: PROC[f1, f2: Flags] RETURNS[Flags] ~ INLINE { RETURN[LOOPHOLE[Basics.BITOR[LOOPHOLE[f1], LOOPHOLE[f2]]]]; }; AndFlags: PROC[f1, f2: Flags] RETURNS[Flags] ~ INLINE { RETURN[LOOPHOLE[Basics.BITAND[LOOPHOLE[f1], LOOPHOLE[f2]]]]; }; NotFlags: PROC[f: Flags] RETURNS[Flags] ~ INLINE { RETURN[LOOPHOLE[Basics.BITNOT[LOOPHOLE[f]]]]; }; FontCache: TYPE ~ ImagerCache.Ref; Data: TYPE ~ REF DataRep; DataRep: TYPE ~ RECORD[ device: Device _ NIL, -- a particular raster device fontCache: FontCache _ NIL, fontAtom: ImagerFontPrivate.FontAtom _ NIL, rastWeight: REAL _ 0.0, -- bigger values favor bitmaps in the cache. fontTuner: FontTuner _ NIL, devicePath: DevicePath _ NIL, -- scratch storage for scan converter valid: Flags _ [], viewToDevice: Transformation _ NIL, -- always valid viewClipMask: ManhattanPolygon _ NIL, -- device coords; always valid viewClipBox: DeviceRectangle _ [0, 0, 0, 0], -- device coords; always valid clientToDevice: Transformation _ NIL, -- valid iff valid.clientToDevice clientClipMask: ManhattanPolygon _ NIL, -- device coords; valid iff valid.clientClipper clientClipBox: DeviceRectangle _ [0, 0, 0, 0], -- device coords; valid iff valid.clientClipper charToDevice: Transformation _ NIL -- valid iff valid.charToDevice ]; Create: PROC [device: Device, pixelUnits: BOOL _ FALSE, fontCache: FontCache _ NIL, rastWeight: REAL _ 1.0, fontTuner: FontTuner _ NIL, class: REF Imager.ClassRep _ NIL] RETURNS [Context]; FontTuner: TYPE ~ REF FontTunerRep; FontTunerRep: TYPE ~ RECORD [ proc: FontTunerProc, data: REF, propList: Atom.PropList ]; FontTunerProc: TYPE ~ PROC [self: FontTuner, charProc: PROC[Context], context: Context]; CreateClass: PROC [type: ATOM] RETURNS [REF Imager.ClassRep]; END. δImagerRast.mesa Copyright c 1984, 1985 by Xerox Corporation. All rights reserved. Doug Wyatt, April 15, 1985 5:26:12 pm PST Michael Plass, May 19, 1985 2:29:10 pm PDT Types for internal use Context creation If fontCache=NIL, no caching will be done. If fontTuner=NIL, no font tuning will be done. Font tuning hook Should call charProc to get the character, and should draw it into context. Subclassing For clients that want to do some simple subclassing of the raster class. Κς˜codešœ™Kšœ Οmœ7™BKšœ)™)K™*—K™šΟk ˜ K˜Kš œžœžœžœžœ˜%Kšœžœ˜!Kšœ žœ˜Kšœ žœ ˜Kšœžœ ˜#Kšœžœ˜1Kšœžœ˜'Kšœžœ˜,—K˜KšΠbl œžœž ˜Kšžœ˜šœž˜K˜Kšœ žœ˜Kšœžœ˜ Kšœ žœ"˜2Kšœ žœ˜,Kšœžœ'˜;Kšœžœ˜1Kšœžœ#˜8—head™šœžœžœ˜KšœžœžœΟc˜8Kšœžœžœ ˜4Kšœžœžœ -˜JKšœ žœžœ 3˜NKšœžœžœ 9˜WJšœ žœžœ ˜,J˜J˜J˜—˜K˜—šΟnœžœžœ žœ˜6Kš žœžœžœžœžœ˜;K˜K˜—š‘œžœžœ žœ˜7Kš žœžœžœžœžœ˜