<> <<>> <> <<>> <> <> <> <> <<>> DIRECTORY ImagerTransform USING [Pair, Rectangle, IntRectangle, Transformation], Scaled USING [Value]; ImagerBasic: CEDAR DEFINITIONS ~ BEGIN <<>> <> <<>> Pair: TYPE ~ ImagerTransform.Pair; <> IntPair: TYPE ~ RECORD [x, y: INTEGER]; Rectangle: TYPE ~ ImagerTransform.Rectangle; <> Transformation: TYPE ~ ImagerTransform.Transformation; IntRectangle: TYPE ~ ImagerTransform.IntRectangle; <> Bezier: TYPE ~ RECORD [b0, b1, b2, b3: Pair]; -- Bezier control points for a cubic curve DeviceCoordinate: TYPE ~ RECORD [s, f: INTEGER]; DeviceRectangle: TYPE ~ RECORD [sMin, fMin: INTEGER, sSize, fSize: NAT]; <<>> <> <<>> PathMapType: TYPE ~ PROC[ data: REF, move: PROC[p: Pair], line: PROC[p: Pair], curve: PROC[p1, p2, p3: Pair], conic: PROC[p1, p2: Pair, r: REAL] ]; <> <<>> ClientClipper: TYPE ~ LIST OF ClientClipperItem; <> ClientClipperItem: TYPE ~ RECORD [ exclude: BOOLEAN, <> easyRectangle: BOOLEAN, <> pathMap: PathMapType, <> pathData: REF <> ]; Visibility: TYPE ~ {visible, partlyVisible, invisible}; <<>> <> <<>> Color: TYPE ~ REF ColorRep; ColorRep: TYPE ~ RECORD[ SELECT tag: * FROM constant => [x, y, Y: CARDINAL], -- CIE Chromaticity coordinates sampled => [ transparent: BOOLEAN, -- are 0 samples white (false) or transparent (true)? pa: PixelArray, -- the array of samples m: Transformation, -- transforms from pa to device coordinates colorOperator: ATOM -- maps samples into colors ], special => [ref: REF], ENDCASE ]; ConstantColor: TYPE ~ REF ColorRep[constant]; SampledColor: TYPE ~ REF ColorRep[sampled]; <<>> <> <<>> PixelArray: TYPE ~ REF PixelArrayRep; PixelArrayRep: TYPE ~ RECORD [ xPixels, yPixels: INT, -- dimensions of the array, in pixels maxSampleValue: INT, -- the range of sample values is [0..maxSampleValue] samplesPerPixel: INT, -- number of samples for each pixel m: Transformation, -- transformation to client space (see Interpress, section 4.6) get: PROC [ self: PixelArray, buffer: PixelBuffer, <> nSamples: NAT, <> layer: INT, <> xStart, yStart: Scaled.Value, <> xDelta, yDelta: Scaled.Value <> ], data: REF ANY <> ]; PixelBuffer: TYPE ~ REF PixelBufferRep; PixelBufferRep: TYPE ~ RECORD [ SEQUENCE maxLength: NAT OF CARDINAL ]; END.