DIRECTORY Imager, ImagerTestViewer, ImagerPixelMaps, ImagerFrameBuffer, GraphicsOps, Real, ViewerClasses, ViewerOps; ImagerTestViewerImpl: CEDAR PROGRAM IMPORTS Imager, ImagerPixelMaps, ImagerFrameBuffer, GraphicsOps, Real, ViewerOps EXPORTS ImagerTestViewer ~ BEGIN NewViewer: PUBLIC PROC RETURNS [ViewerClasses.Viewer] ~ { RETURN [ViewerOps.CreateViewer[flavor: $ImagerTestViewer, info: [name: "Imager Test"]]] }; Canvas: PUBLIC PROC [viewer: ViewerClasses.Viewer] RETURNS [ImagerPixelMaps.PixelMap] ~ { IF viewer.iconic OR viewer.destroyed THEN RETURN [ImagerPixelMaps.Create[0, [0,0,0,0]]]; ViewerOps.PaintViewer[viewer, client, FALSE, $Canvas]; RETURN [NARROW[viewer.data, REF ImagerPixelMaps.PixelMap]^]; }; Context: PUBLIC PROC [viewer: ViewerClasses.Viewer] RETURNS [imager: Imager.Context] ~ { p: REF ImagerPixelMaps.PixelMap; IF viewer.iconic OR viewer.destroyed THEN RETURN [NIL]; ViewerOps.PaintViewer[viewer, client, FALSE, $Canvas]; imager _ Imager.Create[$LFDisplay]; p _ NARROW[viewer.data]; imager.SetView[[p.fMin, 808-(p.sMin+p.sSize), p.fSize, p.sSize]]; }; PaintRep: TYPE ~ RECORD [ paint: PROC [Imager.Context, REF ANY], data: REF ANY ]; Painter: PUBLIC PROC [viewer: ViewerClasses.Viewer, paint: PROC [Imager.Context, REF ANY], data: REF ANY] ~ { IF viewer.iconic OR viewer.destroyed THEN NULL ELSE { paintRef: REF PaintRep _ NEW[PaintRep _ [paint, data]]; ViewerOps.PaintViewer[viewer, client, FALSE, paintRef] }; }; PaintProc: ViewerClasses.PaintProc ~ { IF whatChanged = $Canvas THEN { canvas: REF ImagerPixelMaps.PixelMap _ NARROW[self.data]; cy: REAL _ GraphicsOps.UserToDevice[context,0,0].ty; cx: REAL _ GraphicsOps.UserToDevice[context,0,0].tx; IF canvas = NIL THEN TRUSTED { self.data _ canvas _ NEW[ImagerPixelMaps.PixelMap _ ImagerFrameBuffer.LFDisplay[]]; }; canvas.sOrigin _ -(canvas.sMin _ Real.RoundLI[cy]-self.ch); canvas.fOrigin _ -(canvas.fMin _ Real.RoundLI[cx]); canvas.sSize _ self.ch; canvas.fSize _ self.cw; } ELSE WITH whatChanged SELECT FROM paintRef: REF PaintRep => { cy: REAL _ GraphicsOps.UserToDevice[context,0,0].ty; cx: REAL _ GraphicsOps.UserToDevice[context,0,0].tx; imager: Imager.Context _ NARROW[ViewerOps.FetchProp[self, $ImagerContext]]; LocalPaint: PROC ~ {paintRef.paint[imager, paintRef.data]}; IF imager = NIL THEN { imager _ Imager.Create[$LFDisplay]; ViewerOps.AddProp[self, $ImagerContext, imager]; }; imager.SetView[[Real.RoundLI[cx], 808-Real.RoundLI[cy], self.cw, self.ch]]; imager.DoSaveAll[LocalPaint]; }; ENDCASE => NULL; }; viewerClass: ViewerClasses.ViewerClass _ NEW[ViewerClasses.ViewerClassRec _ [ paint: PaintProc ]]; ViewerOps.RegisterViewerClass[$ImagerTestViewer, viewerClass]; END. žImagerTestViewerImpl.mesa Michael Plass, December 28, 1983 1:48 pm -- PROC [self: Viewer, context: Graphics.Context, whatChanged: REF ANY, clear: BOOL] Ê8˜J™J™(J˜JšÏk œk˜tJ˜šœœ˜#JšœI˜PJšœ˜Jšœ˜—J˜šÏn œœœœ˜9JšœQ˜WJšœ˜—šžœœœ œ˜YJšœœœœ(˜XJšœ&œ ˜6Jšœœœ˜˜>J˜J˜Jšœ˜—…— rH