<<-- SimpleViewerImpl.mesa>> <> <> <<>> DIRECTORY Commander, Imager, TIPUser, ViewerClasses, ViewerOps; SimpleViewerImpl: CEDAR PROGRAM IMPORTS Commander, Imager, TIPUser, ViewerOps ~ BEGIN <> <> <> <> <> <> <> <<>> <> <> <<>> <> <> Viewer: TYPE ~ ViewerClasses.Viewer; Data: TYPE ~ REF DataRec; DataRec: TYPE ~ RECORD [ viewer: Viewer _ NIL, x, y: REAL _ 10 ]; <> SimpleViewer: Commander.CommandProc ~ { data: Data _ NEW[DataRec]; data.viewer _ ViewerOps.CreateViewer[ flavor: $SimpleViewer, info: [name: "SimpleViewer", data: data]]; ViewerOps.GrowViewer[data.viewer]; ViewerOps.OpenIcon[data.viewer]; }; PaintSimpleViewer: ViewerClasses.PaintProc = { data: Data _ NARROW[self.data]; Imager.SetColor[context, Imager.black]; Imager.MaskRectangle[context, [data.x, data.y, 10, 10]]; }; NotifySimpleViewer: ViewerClasses.NotifyProc = { data: Data _ NARROW[self.data]; mouse: TIPUser.TIPScreenCoords _ NARROW[input.first]; SELECT input.rest.first FROM $move => { data.x _ mouse.mouseX; data.y _ mouse.mouseY; ViewerOps.PaintViewer[self, client] }; ENDCASE => NULL; }; AdjustSimpleViewer: ViewerClasses.AdjustProc ~ { ViewerOps.GrowViewer[self]; }; <> ViewerOps.RegisterViewerClass[ $SimpleViewer, NEW[ViewerClasses.ViewerClassRec _ [ paint: PaintSimpleViewer, notify: NotifySimpleViewer, adjust: AdjustSimpleViewer, tipTable: TIPUser.InstantiateNewTIPTable["SimpleViewer.tip"] ]] ]; Commander.Register["///Commands/SimpleViewer", SimpleViewer, "Demonstrate viewer code"]; END.