ImagerBasic.mesa
This interface provides the public data structures shared by clients and the Imager.
Last Edited by:
Crow, Plass, Wyatt, July 6, 1983 2:38 pm
Wyatt, September 30, 1983 2:11 pm
Plass, February 6, 1984 2:55:29 pm PST
DIRECTORY
ImagerTransform USING [Pair, Rectangle, IntRectangle, Transformation],
Real USING [NonTrappingNaN],
Scaled USING [Value];
ImagerBasic: CEDAR DEFINITIONS
= BEGIN
Basic Definitions (Numbers and Shapes)
Pair: TYPE = ImagerTransform.Pair;
RECORD [x, y: REAL]
IntPair: TYPE = RECORD [x, y: INTEGER];
Rectangle: TYPE = ImagerTransform.Rectangle;
RECORD [x, y, w, h: REAL]
Transformation: TYPE = ImagerTransform.Transformation;
IntRectangle: TYPE = ImagerTransform.IntRectangle;
RECORD [x, y, w, h: INTEGER]
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];
Paths
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]
];
Clipping
ClientClipper: TYPE = LIST OF ClientClipperItem;
The ClientClipper is the intersection of the ClientClipperItems.
ClientClipperItem: TYPE = RECORD [
exclude: BOOLEAN,
True if it is an excluding clipper.
easyRectangle: BOOLEAN,
True if the path is known to be a rectangle with sides parallel to the view coordinate system axes.
pathMap: PathMapType,
The path is mapped in the view coordinate system.
pathData: REF
Must be immutable for the life of the clipper.
];
Visibility: TYPE = {visible, partlyVisible, invisible};
Masks
StrokeEnd: TYPE = {nil, square, butt, round};
Colors
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];
PixelArrays
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,
object implementation fills this with the requested number of samples.
nSamples: NAT,
number of samples to put in buffer.
layer: INT,
in the range [0..samplesPerPixel)
xStart, yStart: Scaled.Value,
position of first sample.
xDelta, yDelta: Scaled.Value
increment to get to successive samples.
],
data: REF ANY
for use by the get proc; some devices may discriminate on this REF to get at the representation directly, if they are able to recognize it.
];
PixelBuffer: TYPE = REF PixelBufferRep;
PixelBufferRep: TYPE = RECORD [
SEQUENCE maxLength: NAT OF CARDINAL
];
Imager State
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.