<> <> <> <> <> <> DIRECTORY ImagerBasic USING [Vec, IntVec, Rectangle, IntRectangle, Context, ImagingDevice, InteractiveImagingDevice, Procs, DeviceProcs, Path, SampledSource, SourceRecord, StrokeEnds, PixelArray, RGBValue, AISFile, Visibility]; Imager: CEDAR DEFINITIONS = BEGIN <> Rectangle: TYPE = ImagerBasic.Rectangle; -- RECORD [x, y, w, h: REAL] IntRectangle: TYPE = ImagerBasic.IntRectangle; -- RECORD [x, y, w, h: INTEGER] Vec: TYPE = ImagerBasic.Vec; -- RECORD [x, y: REAL] IntVec: TYPE = ImagerBasic.IntVec; -- RECORD [x, y: INTEGER] <> Context: TYPE = REF ContextRep; -- Holds the imager state ContextRep: TYPE = RECORD [ procs: ImagerInternalDefs.Procs, data: REF ANY ]; <> CreateContext: PROC [device: ImagingDevice] RETURNS [Context]; <> DestroyContext: PROC [context: Context]; <> <> Inclusions: TYPE = { all, allButCP, clientOnly, viewerOnly }; <> Mark: TYPE[1]; nullMark: Mark _ NULL; -- default mark indicating "use most recent save" Save: PROC [context: Context, what: Inclusions] RETURNS [Mark]; <> Restore: PROC [context: Context, mark: Mark _ nullMark]; <> <> NewFrame: PROC [context: Context]; -- who keeps the background color?? <> <> <> <> Translate: PROC [context: Context, dx, dy: REAL]; Rotate: PROC [context: Context, degrees: REAL]; Scale: PROC [context: Context, sx, sy: REAL]; <> IntTranslate: PROC [context: Context, dx, dy: INTEGER]; IntRotate: PROC [context: Context, degrees: INTEGER]; -- Fast if a multiple of 90 IntScale: PROC [context: Context, sx, sy: INTEGER]; -- Fast for mirror transforms ResetTransform: PROC [context: Context]; -- reset to identity <> <> Visibility: TYPE = ImagerBasic.Visibility; -- {visible, partlyVisible, invisible} <> SetClipArea: PROC [context: Context, area: Path]; <> ConcatArea: PROC [context: Context, area: Path, exclude: BOOLEAN _ FALSE]; <> TestArea: PROC [context: Context, area: Path] RETURNS [Visibility]; <> TestPoint: PROC [context: Context, point: Vec] RETURNS [BOOLEAN]; -- true if visible ClipArea: PROC [context: Context, area: Path] RETURNS [Path]; <> <> SetClipIntRectangle: PROC [context: Context, area: IntRectangle]; ConcatIntRectangle: PROC [context: Context, area: IntRectangle]; TestIntRectangle: PROC [context: Context, area: IntRectangle] RETURNS [Visibility]; <> TestIntPoint: PROC [context: Context, point: IntVec] RETURNS [BOOLEAN]; ClipIntRectangle: PROC [context: Context, area: IntRectangle] RETURNS [IntRectangle]; <> DoWithoutClipping: PROC [context: Context, callBack: PROC[Context]]; <> <> ImagingDevice: TYPE = ImagerBasic.ImagingDevice; <> InteractiveImagingDevice: TYPE = ImagerBasic.InteractiveImagingDevice; RegisterDevice: PROC [name: ImagingDevice, procs: ImagerBasic.DeviceProcs]; EnumerateRegisteredDevices: PROC [] RETURNS [LIST OF ImagingDevice]; SetDevice: PROC [context: Context, device: ImagingDevice]; <> GetDevice: PROC [context: Context] RETURNS [ImagingDevice]; <> Font: TYPE = REF; -- Will be more concrete when the new font interface is done. <> SetFont: PROC [context: Context, font: Font]; GetFont: PROC [context: Context] RETURNS [font: Font]; <> <> SourceRecord: TYPE = ImagerBasic.SourceRecord; RGBValue: TYPE = ImagerBasic.RGBValue; AISFile: TYPE = ImagerBasic.AISFile; PixelArray: TYPE = ImagerBasic.PixelArray; SampledSource: TYPE = ImagerBasic.SampledSource; <> SetSource: PROC [context: Context, source: SourceRecord]; GetSource: PROC [context: Context] RETURNS [SourceRecord]; SourceFromColor: PROC [context: Context, color: RGBValue] RETURNS [SourceRecord]; SourceFromImage: PROC [context: Context] RETURNS [SourceRecord]; SourceFromAIS: PROC [file: AISFile] RETURNS [SourceRecord]; <> Path: TYPE = ImagerBasic.Path; PathFromIntRectangle: PROC [area: IntRectangle] RETURNS [Path]; <> <> StrokeEnds: TYPE = ImagerBasic.StrokeEnds; -- {butt, square, round} <<(1) "Butt" ends are squared off at the endpoint coordinate.>> <<(2) "Square" ends are extended by half the stroke width before squaring.>> <<(3) "Round" ends have semicircular caps at the ends.>> MaskStroke: PROC [context: Context, path: Path]; <
> <> MaskFill: PROC [context: Context, path: Path]; <> MaskPixel: PROC [context: Context, pixelArray: PixelArray]; <> <<>> <> <> MoveTo: PROC [context: Context, p: IntVec] = INLINE { Imager.SetIntCP[context, p] }; DrawTo: PROC [context: Context, p: IntVec]; <> DrawPath: PROC [context: Context, path: Path]; <> FillRectangle: PROC [context: Context, area: IntRectangle]; <> <> <> <> SetCP: PROC [context: Context, cp: Vec]; GetCP: PROC [context: Context, cp: Vec]; SetIntCP: PROC [context: Context, cp: IntVec]; GetIntCP: PROC [context: Context, cp: IntVec]; MaskChar: PROC [context: Context, char: CHAR]; MaskCharacters: PROC [ context: Context, characters: REF, -- may be a Rope.ROPE or a REF TEXT, for non-cedar probably a LONG STRING start: INT _ 0, length: INT _ LAST[INT] ]; <> MaskCharSeq: PROC [ context: Context, length: NAT, charPtr: LONG POINTER TO CHAR, charIncrement: NAT, deltaXptr: LONG POINTER TO INTEGER, deltaXincrement: NAT, deltaYptr: LONG POINTER TO INTEGER, deltaYincrement: NAT ]; <> <> <> Interactive: PROC [context: Context] RETURNS [BOOLEAN] = INLINE {RETURN [context.interactive]}; <> <> HiliteArea: PROC [context: Context, area: Path]; -- Invert on LF, device dependent <> HiliteIntRectangle: PROC [context: Context, area: IntRectangle]; MoveIntRectangle: PROC [context: Context, source: IntRectangle, destination: IntVec]; <> GetPixelArray: PROC [context: Context, source: IntRectangle, image: PixelArray _ NIL] RETURNS [PixelArray]; PutPixelArray: PROC [context: Context, destination: IntRectangle, image: PixelArray]; <> StartDoubleBuffering: PROC [context: Context]; StopDoubleBuffering: PROC [context: Context]; <> <> Procs: TYPE = ImagerBasic.Procs; DefaultProcs: PROC RETURNS [Procs]; ProcsRec: PUBLIC TYPE = RECORD [ CreateContext: PROC [imagingDevice: ImagingDevice] RETURNS [Context], DestroyContext: PROC [context: Context], Save: PROC [context: Context, what: Inclusions] RETURNS [Mark], Restore: PROC [context: Context, mark: Mark], NewFrame: PROC [context: Context], Translate: PROC [context: Context, dx, dy: REAL], Rotate: PROC [context: Context, degrees: REAL], Scale: PROC [context: Context, sx, sy: REAL], IntTranslate: PROC [context: Context, dx, dy: INTEGER], IntRotate: PROC [context: Context, degrees: INTEGER], IntScale: PROC [context: Context, x, y: INTEGER], ResetTransform: PROC [context: Context], SetClipArea: PROC [context: Context, area: Path], ConcatArea: PROC [context: Context, area: Path, exclude: BOOLEAN _ FALSE], TestArea: PROC [context: Context, area: Path] RETURNS [Visibility], TestPoint: PROC [context: Context, point: Vec] RETURNS [BOOLEAN], ClipArea: PROC [context: Context, area: Path] RETURNS [Path], SetClipRectangle: PROC [context: Context, area: IntRectangle], ConcatRectangle: PROC [context: Context, area: IntRectangle], TestRectangle: PROC [context: Context, area: IntRectangle] RETURNS [Visibility], TestIntPoint: PROC [context: Context, point: IntVec] RETURNS [BOOLEAN], ClipRectangle: PROC [context: Context, area: IntRectangle] RETURNS [IntRectangle], DoWithoutClipping: PROC [context: Context, callBack: PROC[Context]], RegisterDevice: PROC [name: ATOM, procs: ImagerBasic.DeviceProcs], EnumerateRegisteredDevices: PROC [] RETURNS [LIST OF ATOM], SetDevice: PROC [context: Context, device: ImagingDevice], GetDevice: PROC [context: Context] RETURNS [ImagingDevice], SetFont: PROC [context: Context, font: Font], GetFont: PROC [context: Context] RETURNS [font: Font], SetSource: PROC [context: Context, source: SourceRecord], GetSource: PROC [context: Context] RETURNS [source: SourceRecord], SourceFromColor: PROC [color: RGBValue] RETURNS [source: SourceRecord], SourceFromImage: PROC [context: Context] RETURNS [source: SourceRecord], SourceFromAIS: PROC [file: AISFile] RETURNS [source: SourceRecord], PathFromIntRectangle: PROC [area: IntRectangle] RETURNS [Path], MaskStroke: PROC [context: Context, path: Path], MaskFill: PROC [context: Context, path: Path], MaskPixel: PROC [context: Context, pixelArray: PixelArray], MoveTo: PROC [context: Context, p: IntVec], DrawTo: PROC [context: Context, p: IntVec], DrawPath: PROC [context: Context, path: Path], FillRectangle: PROC [context: Context, r: Rectangle], SetCP: PROC [context: Context, cp: Vec], GetCP: PROC [context: Context, cp: Vec], SetIntCP: PROC [context: Context, cp: IntVec], GetIntCP: PROC [context: Context, cp: IntVec], MaskChar: PROC [context: Context, char: CHAR], MaskCharacters: PROC [context: Context, characters: REF, start: INT _ 0, length: INT _ LAST[INT]], MaskCharSeq: PROC [context: Context, length: NAT, charPtr: LONG POINTER TO CHAR, charIncrement: NAT, deltaXptr: LONG POINTER TO INTEGER, deltaXincrement: NAT, deltaYptr: LONG POINTER TO INTEGER, deltaYincrement: NAT], Interactive: PROC [context: Context] RETURNS [BOOLEAN], InvertArea: PROC [context: Context, area: Path], InvertIntRectangle: PROC [context: Context, area: IntRectangle], MoveIntRectangle: PROC [context: Context, source: IntRectangle, destination: IntVec], GetPixelArray: PROC [context: Context, source: IntRectangle, image: PixelArray _ NIL] RETURNS [PixelArray], PutPixelArray: PROC [context: Context, destination: IntRectangle, image: PixelArray], StartDoubleBuffering: PROC [context: Context], StopDoubleBuffering: PROC [context: Context] ]; END.