DIRECTORY Atom USING [GetPName], CD, CDBasics, CDDraw, CDOps, CDProperties, CDVFurtherPainters, CDVPrivate, CDViewer, CDVScale, Cursors, Graphics, GraphicsOps, Rope USING [ROPE], ViewerClasses USING [Viewer]; CDVSpecialPainters: CEDAR PROGRAM IMPORTS Atom, CD, CDDraw, CDOps, CDProperties, CDVFurtherPainters, CDVScale, CDViewer, CDVPrivate, Graphics = BEGIN MyGraphicRef: TYPE = CDVPrivate.MyGraphicRef; FurtherPaintProc: TYPE = CDVFurtherPainters.FurtherPaintProc; --PROC [me: CDVPrivate.MyGraphicRef, whatChanged: REF]; ShowViewers: FurtherPaintProc = BEGIN OutlineViewer: PROC [me: MyGraphicRef, other: ViewerClasses.Viewer] = BEGIN otherMe: MyGraphicRef = NARROW[other.data]; r: CD.DesignRect = otherMe.dClip; p1: CD.Position = CDVScale.DesignToViewerPosition[me.scale, [r.x1, r.y1]]; p2: CD.Position = CDVScale.DesignToViewerPosition[me.scale, [r.x2, r.y2]]; CDVPrivate.InvertArea[me, p1.x, p1.y, p1.x+1, p2.y]; CDVPrivate.InvertArea[me, p1.x, p2.y, p2.x, p2.y+1]; CDVPrivate.InvertArea[me, p2.x, p2.y, p2.x+1, p1.y]; CDVPrivate.InvertArea[me, p2.x, p1.y, p1.x, p1.y+1]; END; FOR l: CDViewer.ViewerList _ CDViewer.ViewersOf[me.actualDesign], l.rest WHILE l#NIL DO IF ~l.first.iconic AND l.first#me.viewer THEN OutlineViewer[me: me, other: l.first]; ENDLOOP END; PaintSignalNames: FurtherPaintProc = BEGIN PaintProperties[me, $SignalName] END; PaintInstanceNames: FurtherPaintProc = BEGIN PaintProperties[me, $InstanceName] END; PaintProperties: PROC [me: CDVPrivate.MyGraphicRef, key: ATOM] = BEGIN nameDevice: REF NameDevice _ NEW[NameDevice_[propKey: key, vPriv: me]]; internalPr: CD.DrawRef = CD.CreateDrawRef[me.actualDesign]; internalPr.interestClip _ me.deviceDrawRef.interestClip; internalPr.devicePrivate _ nameDevice; internalPr.drawChild _ NamedDrawChild; internalPr.drawRect _ internalPr.saveRect _ DontDrawRect; internalPr.drawContext _ DontDrawContext; internalPr.stopFlag _ me.stoprequest; Graphics.SetColor[me.viewContext, Graphics.black]; CDOps.DrawDesign[design: me.actualDesign, pr: internalPr]; END; NameDevice: TYPE = RECORD [propKey: ATOM, vPriv: MyGraphicRef]; NamedDrawChild: PROC [aptr: CD.ApplicationPtr, pos: CD.DesignPosition, orient: CD.Orientation, pr: CD.DrawRef] = BEGIN dev: REF NameDevice = NARROW[pr.devicePrivate]; text: Rope.ROPE _ NIL; aptr.ob.p.drawMe[aptr, pos, orient, pr]; WITH CDProperties.GetPropFromApplication[from: aptr, prop: dev.propKey] SELECT FROM r: Rope.ROPE => text _ r; a: ATOM => text _ Atom.GetPName[a]; ENDCASE => NULL; IF text#NIL THEN { vpos: CD.Position = CDVScale.DesignToViewerPosition[dev.vPriv.scale, pos]; Graphics.SetCP[dev.vPriv.viewContext, vpos.x+1, vpos.y+1]; Graphics.DrawRope[dev.vPriv.viewContext, text]; }; END; DontDrawRect: PROC [r: CD.Rect, l: CD.Layer, pr: CD.DrawRef] = {}; DontDrawContext: PROC [pr: CD.DrawRef, proc: CD.DrawContextLayerProc, ob: CD.ObPtr, pos: CD.DesignPosition, orient: CD.Orientation, layer: CD.Layer] = {}; PaintTemporaries: FurtherPaintProc = -- PROC [me: CDVPrivate.MyGraphicRef, key: REF] BEGIN END; RepaintBackgroundComplete: FurtherPaintProc = -- PROC [me: CDVPrivate.MyGraphicRef, key: REF] -- monitored by ProtectedRepaint BEGIN CDVPrivate.RepaintBackground[me, CDBasics.universe, FALSE]; END; DrawSignalNames: FurtherPaintProc = BEGIN CDDraw.InsertCommandAll[me.actualDesign, CDDraw.Comm[cmd: ref, erase: FALSE, rect: CDBasics.universe, ref: $SignalNames] ]; END; DrawInstanceNames: FurtherPaintProc = BEGIN CDDraw.InsertCommandAll[me.actualDesign, CDDraw.Comm[cmd: ref, erase: FALSE, rect: CDBasics.universe, ref: $InstanceNames] ]; END; Init: PROC [] = BEGIN CDVFurtherPainters.InstallFurtherPaint[keyValue: $ShowViewers, proc: ShowViewers]; CDVFurtherPainters.InstallFurtherPaint[keyValue: $SignalNames, proc: PaintSignalNames]; CDVFurtherPainters.InstallFurtherPaint[keyValue: $InstanceNames, proc: PaintInstanceNames]; CDVFurtherPainters.InstallFurtherPaint[keyValue: $Temporaries, proc: PaintTemporaries]; CDVFurtherPainters.InstallFurtherPaint[keyValue: $BackGround, proc: RepaintBackgroundComplete]; CDVFurtherPainters.InstallFurtherPaint[keyValue: $DrawSignalNames, proc: DrawSignalNames]; CDVFurtherPainters.InstallFurtherPaint[keyValue: $DrawInstanceNames, proc: DrawInstanceNames]; END; Init[]; END. fCDVSpecialPainters.mesa (part of ChipNDale) Copyright c 1984, 1985 by Xerox Corporation. All rights reserved. Ch. Jacobi August 29, 1984 4:58:52 pm PDT last edited by Christian Jacobi, April 30, 1985 3:50:21 pm PDT -- CDVSpecialPainters implements some procedures which are called by the (viewers)-draw -- proc of chipndale viewers --PROC [me: CDVPrivate.MyGraphicRef, key: REF] --monitored by ProtectedRepaint --PROC [me: CDVPrivate.MyGraphicRef, key: REF] --monitored by ProtectedRepaint --PROC [me: CDVPrivate.MyGraphicRef, key: REF] --monitored by ProtectedRepaint --eg. former paints ticks --called through ProtectedRepaint only -- PROC [me: CDVPrivate.MyGraphicRef, key: REF] -- called from anywhere, not monitored -- PROC [me: CDVPrivate.MyGraphicRef, key: REF] -- called from anywhere, not monitored --protected procedures --unprotected procedures Ê^˜šœ-™-Jšœ Ïmœ7™BJšœ*™*Jšœ>™>—J˜šÏk ˜ Jšœžœ ˜Jšžœ˜J˜ J˜Jšœ˜Jšœ ˜ Jšœ˜Jšœ ˜ Jšœ ˜ J˜ J˜J˜ Jšœ ˜ Jšœžœžœ˜Jšœžœ ˜J˜—šÏbœžœžœ˜"Jšžœf˜m—Jšž˜J˜JšœX™XJšœ™J˜J˜Jšœžœ˜-šœžœ'˜=JšÏc7˜7—J˜J˜šŸ œ˜Jšœ%Ïiœ™.Jšœ™Jšž˜J˜šÏn œžœ2˜EJšž˜Jšœžœ ˜+Jšœžœ˜!JšœžœD˜JJšœžœD˜JJšœ4˜4Jšœ4˜4Jšœ4˜4Jšœ4˜4Jšžœ˜—J˜šžœFžœžœž˜WJšžœžœžœ'˜TJšž˜—Jšžœ˜—J˜J˜šŸœ˜%Jšœ%¡œ™.Jšœ™Jšž˜Jšœ ˜ Jšžœ˜—J˜šŸœ˜'Jšœ%¡œ™.Jšœ™Jšž˜Jšœ"˜"Jšžœ˜—J˜š¢œžœ$žœ˜AJšž˜Jšœ žœžœ'˜GJšœ žœ žœ ˜;Jšœ8˜8Jšœ'˜'Jšœ&˜&Jšœ9˜9Jšœ*˜*Jšœ%˜%Jšœ2˜2Jšœ:˜:Jšžœ˜—J™Jšœ žœžœ žœ˜?J™š ¢œžœžœžœžœ ˜^Jšœžœ ˜Jšž˜Jšœžœžœ˜/Jšœ žœžœ˜Jšœ(˜(šžœDžœž˜SJšœžœ ˜Jšœžœ˜#Jšžœžœ˜—šžœžœžœ˜JšœžœB˜JJšœ:˜:Jšœ/˜/Jšœ˜—Jšžœ˜J˜—Jš ¢ œžœžœ žœ žœ˜BJš¢œžœžœžœžœ žœžœžœ ˜šJ˜J˜J˜š¢œ ˜%Jš &¡ ˜/Jšœ™Jšœ œ™&Jšž˜Jšžœ˜J˜J˜—šŸœ ˜.Jš &¡ ˜/Jš  ˜ Jšž˜Jšœ4žœ˜;Jšžœ˜J˜J˜J˜—šŸœ˜$Jšœ&¡œ™/Jšœ&™&Jšž˜˜)Jšœžœ-˜OJšœ˜—Jšžœ˜J˜—šŸœ˜&Jšœ&¡œ™/Jšœ&™&Jšž˜˜)Jšœžœ/˜QJšœ˜—Jšžœ˜J˜—š¢œžœ˜Jšž˜Jšœ™JšœR˜RJšœW˜WJšœ[˜[JšœW˜WJšœ_˜_Jšœ™JšœZ˜ZJšœ^˜^Jšžœ˜—Jšœ˜Jšžœ˜J˜—…—®r