<> <> <> DIRECTORY BitBlt USING [DstFunc, SrcFunc], ImagerBasic USING [Visibility] ; ImagerMasks: CEDAR DEFINITIONS ~ BEGIN <> Visibility: TYPE ~ ImagerBasic.Visibility; Mask: TYPE ~ RECORD [ sMin, fMin: INTEGER, sSize, fSize: NAT, refRep: REF MaskRep ]; <> Create: PROC [ runs: PROC[ -- Create calls this back run: PROC[s, fMin: INTEGER, fSize: NAT], -- client calls this from inside runs. repeat: PROC[timesToRepeatScanline: NAT] -- client calls this to repeat a scanline ] ] RETURNS [Mask]; <> NewBitmap: PROC [sMin, fMin: INTEGER, sSize, fSize: NAT] RETURNS [Mask]; <> Box: PROC [sMin, fMin: INTEGER, sSize, fSize: NAT] RETURNS [Mask]; InlineBox: PROC [sMin, fMin: INTEGER, sSize, fSize: NAT] RETURNS [Mask] ~ INLINE {RETURN[[sMin, fMin, sSize, fSize, NIL]]}; <> And: PROC [a, b: Mask] RETURNS [Mask]; Or: PROC [a, b: Mask] RETURNS [Mask]; Difference: PROC [a, b: Mask] RETURNS [Mask]; Shift: PROC [mask: Mask, s, f: INTEGER] RETURNS [Mask]; InlineShift: PROC [mask: Mask, s, f: INTEGER] RETURNS [Mask] ~ INLINE {RETURN[[mask.sMin+s, mask.fMin+f, mask.sSize, mask.fSize, mask.refRep]]}; Bitmap: PROC [mask: Mask] RETURNS [Mask]; <> <> SMin: PROC [mask: Mask] RETURNS [INTEGER] ~ INLINE {RETURN[mask.sMin]}; FMin: PROC [mask: Mask] RETURNS [INTEGER] ~ INLINE {RETURN[mask.fMin]}; SSize: PROC [mask: Mask] RETURNS [CARDINAL] ~ INLINE {RETURN[mask.sSize]}; FSize: PROC [mask: Mask] RETURNS [CARDINAL] ~ INLINE {RETURN[mask.fSize]}; MapRuns: PROC [mask: Mask, run: PROC [s, fMin: INTEGER, fSize: CARDINAL]]; MapBoxes: PROC [mask: Mask, box: PROC [sMin, fMin: INTEGER, sSize, fSize: CARDINAL]]; MapClippedRuns: PROC [mask, clipper: Mask, run: PROC [s, fMin: INTEGER, fSize: CARDINAL]]; MapClippedBoxes: PROC [mask, clipper: Mask, box: PROC [sMin, fMin: INTEGER, sSize, fSize: CARDINAL]]; IsVisible: PROC [mask, clipper: Mask] RETURNS [Visibility]; <