<> <<>> <> <<>> <> <> <> <> <<>> DIRECTORY ImagerTransform USING [Pair, Rectangle, IntRectangle, Transformation], Real USING [NonTrappingNaN], 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 nullREAL: REAL = Real.NonTrappingNaN; 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}; <<>> <> <<>> StrokeEnd: TYPE = {nil, square, butt, round}; <<>> <> <<>> 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 ]; <> State: TYPE = REF StateRep; StateRep: TYPE = RECORD[ -- persistent variables -- cpx, cpy: REAL, -- CORRECT variables -- correctMX, correctMY: REAL, correctMaskCount: INT, correctMaskX, correctMaskY: REAL, correctSumX, correctSumY: REAL, correctSpaceX, correctSpaceY: REAL, correctcpx, correctcpy: REAL, correctTargetX, correctTargetY: REAL, -- nonpersistent variables -- T: Transformation, priorityImportant: INT, mediumXSize, mediumYSize: REAL, fieldXMin, fieldYMin, fieldXMax, fieldYMax: REAL, showVec: REF, color: Color, noImage: INT, strokeWidth: REAL, strokeEnd: INT, underlineStart: REAL, amplifySpace: REAL, correctPass: INT, correctShrink: REAL, correctTX, correctTY: REAL, clipper: ClientClipper, propertyList: REF ]; END.