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; 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]; }; 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]; }; 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] = { 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 }; ValidateCompositeTransform: PROC [displayContext: ImagerDisplay.ContextData] = { displayContext.transform _ ImagerTransform.Concat[ displayContext.clientTransform, ImagerTransform.Concat[displayContext.viewerTransform, displayContext.deviceTransform] ]; }; END. FImagerDisplayTransformImpl.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 Client Procedures (exported to Imager) Fast Track Display Procedures (exported to ImagerDisplay) Concatenate a transform to the proper existing transform Internal Procedures Κω˜head™J™™ J™—J™-—šΟk ˜ Jšœ  œ˜)Jšœœ ˜Jšœœ˜2Jšœ œ.˜G—head2šœ ˜)Jšœ˜Jšœ˜Iunitšœœ˜ Jšœœ˜2Jšœœ˜0Mšœœœœ˜(Iašœœœœ˜(—™&šΟn œœœ#œ˜CJšœ,œ˜AMšœE˜ENšœ3˜3Jšœ/Οc˜LJšœ˜—šžœ œ#œ˜AJšœ,œ˜AMšœC˜CNšœ3˜3Jšœ+˜+Jšœ˜—šžœ œ"œ˜@Jšœ,œ˜AMšœA˜ANšœ2˜2Jšœ+˜+Jšœ˜—šžœ œ>˜RJšœ,œ˜AMšœI˜INšœ1˜1Jšœ+˜+Jšœ˜—šžœ œœ˜HNšœ,œ˜ANšœ"˜(Nšœ˜—šžœ œ>˜ONšœ,œ˜ANšœ0˜0Nšœ+˜+Nšœ˜MšΟi ™ —cšž œœœ#œ˜IJšœ,œ˜Ašœœ ˜'Jšœ,˜,J˜—Jšœ/Ÿ˜LJšœ˜—šž œ œ"œ˜FJšœ,œ˜Ašœœ$˜+Nšœ˜š œœœœ˜/Jšœ œœ˜#Jšœ œ˜"Jšœ œ˜!Jšœ œ˜!Jšœ œ˜ Jšœ ˜—Jšœ ˜Jšœ˜—Jšœ+˜+Jšœ˜——™.šžœ œ:˜YJšœ,œ˜AMšœ+˜+Jšœ/Ÿ˜LJ˜—šžœœœ9˜]J™9Jšœ,œ˜Ašœ ˜ JšœH˜H—Jšœ0Ÿ˜MJšœ˜—šžœ œ:˜YJšœ,œ˜AMšœ+˜+Jšœ/Ÿ˜LJ˜——™šžœœ0˜Pšœ2˜2Jšœ˜Jšœ7˜7Jšœ&˜&Jšœ˜—Jšœ˜——Jšœ˜—…—L‹