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
Michael Plass, February 6, 1984 2:55:29 pm PST
Doug Wyatt, July 3, 1984 1:05:48 pm PDT
DIRECTORY
ImagerTransform USING [Pair, Rectangle, IntRectangle, Transformation],
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
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};
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
];
END.