ImagerDisplayTransformImpl.mesa
Created March 11, 1983
Last Edit By:
Plass, March 14, 1983 2:16 pm
Last Edited by: Crow, August 30, 1983 6:34 pm
DIRECTORY
ImagerBasic USING [Transformation],
Imager USING [Context],
ImagerDisplay USING [ImagingSpace, ContextData],
ImagerTransform USING [Concat, PreTranslate, PreRotate, PreScale];
ImagerDisplayTransformImpl:
CEDAR PROGRAM
IMPORTS ImagerTransform
EXPORTS Imager, ImagerDisplay
= BEGIN
Transformation: TYPE = ImagerBasic.Transformation;
ImagingSpace: TYPE = ImagerDisplay.ImagingSpace;
TransformTypeNone: PUBLIC SIGNAL = CODE;
NotImplementedYet: PUBLIC SIGNAL = CODE;
Client Procedures (exported to Imager)
TranslateT:
PUBLIC
PROC [context: Imager.Context, dx, dy:
REAL] = {
displayContext: ImagerDisplay.ContextData = NARROW[context.data];
displayContext.clientTransform ← ImagerTransform.PreTranslate[dx, dy,
displayContext.clientTransform];
ValidateCompositeTransform[displayContext]; -- update composite transform
};
RotateT:
PUBLIC PROC [context: Imager.Context, degrees:
REAL] = {
displayContext: ImagerDisplay.ContextData = NARROW[context.data];
displayContext.clientTransform ← ImagerTransform.PreRotate[degrees,
displayContext.clientTransform];
ValidateCompositeTransform[displayContext];
};
ScaleT:
PUBLIC PROC [context: Imager.Context, sx, sy:
REAL] = {
displayContext: ImagerDisplay.ContextData = NARROW[context.data];
displayContext.clientTransform ← ImagerTransform.PreScale[sx, sy,
displayContext.clientTransform];
ValidateCompositeTransform[displayContext];
};
ConcatT:
PUBLIC PROC [context: Imager.Context, transformation: Transformation] = {
displayContext: ImagerDisplay.ContextData = NARROW[context.data];
displayContext.clientTransform ← ImagerTransform.Concat[ transformation,
displayContext.clientTransform];
ValidateCompositeTransform[displayContext];
};
GetT:
PUBLIC PROC [context: Imager.Context]
RETURNS [Transformation] = {
displayContext: ImagerDisplay.ContextData = NARROW[context.data];
RETURN [displayContext.clientTransform];
};
SetT:
PUBLIC PROC [context: Imager.Context, transformation: Transformation] = {
displayContext: ImagerDisplay.ContextData = NARROW[context.data];
displayContext.clientTransform ← transformation;
ValidateCompositeTransform[displayContext];
};
Fast Track
IntTranslateT:
PUBLIC
PROC [context: Imager.Context, dx, dy:
INTEGER] = {
displayContext: ImagerDisplay.ContextData = NARROW[context.data];
{
OPEN displayContext.clientTransform;
c ← dx*a + dy*b + c; f ← dx*d + dy*e + f;
};
ValidateCompositeTransform[displayContext]; -- update composite transform
};
IntScaleT:
PUBLIC PROC [context: Imager.Context, sx, sy:
INTEGER] = {
displayContext: ImagerDisplay.ContextData = NARROW[context.data];
{
OPEN displayContext.clientTransform;
a ← a * sx; e ← e * sy;
IF type = identity
THEN type ←
SELECT
TRUE
FROM
ABS[sx] # 1 OR ABS[sy] # 1 => hard,
(sx = 1) AND (sy = 1) => identity,
(sx =-1) AND (sy = 1) => mirrorX,
(sx = 1) AND (sy =-1) => mirrorY,
(sx =-1) AND (sy =-1) => rot180,
ENDCASE => hard
ELSE type ← hard;
};
ValidateCompositeTransform[displayContext];
};
Display Procedures (exported to ImagerDisplay)
SetViewerTransform:
PUBLIC PROC [ context: Imager.Context, transform: Transformation] = {
displayContext: ImagerDisplay.ContextData = NARROW[context.data];
displayContext.viewerTransform ← transform;
ValidateCompositeTransform[displayContext]; -- update composite transform
};
ConcatToViewerTransform:
PUBLIC
PROC [context: Imager.Context, transform: Transformation] = {
Concatenate a transform to the proper existing transform
displayContext: ImagerDisplay.ContextData = NARROW[context.data];
displayContext.viewerTransform ←
ImagerTransform.Concat[displayContext.viewerTransform, transform];
ValidateCompositeTransform[displayContext]; -- update composite transform
};
SetDeviceTransform:
PUBLIC PROC [ context: Imager.Context, transform: Transformation] = {
displayContext: ImagerDisplay.ContextData = NARROW[context.data];
displayContext.deviceTransform ← transform;
ValidateCompositeTransform[displayContext]; -- update composite transform
};