DIRECTORY Icons, SV2d, SVEditUser, SVInterfaceTypes, SVViewerTool, ViewerClasses, ViewerOps; SVViewerToolImpl: PROGRAM IMPORTS Icons, SVEditUser, ViewerOps SHARES ViewerOps = BEGIN OPEN ViewerClasses; Point2d: TYPE = SV2d.Point2d; ViewerToolData: TYPE = SVInterfaceTypes.ViewerToolData; SolidViewerToolPaint: PRIVATE PaintProc = TRUSTED { viewerToolData: ViewerToolData _ NARROW[self.data]; v: Viewer; update: BOOL _ FALSE; hdiff, wdiff: INTEGER; FOR l: LIST OF Viewer _ viewerToolData.xBounded, l.rest UNTIL l=NIL DO v _ l.first; IF v.destroyed THEN {update _ TRUE; LOOP}; wdiff _ v.ww-v.cw; v.ww _ MAX[v.parent.cw-v.wx-1, 5]; v.cw _ v.ww-wdiff; ENDLOOP; FOR l: LIST OF Viewer _ viewerToolData.yBounded, l.rest UNTIL l=NIL DO v _ l.first; IF v.destroyed THEN {update _ TRUE; LOOP}; hdiff _ v.wh-v.ch; v.wh _ MAX[v.parent.ch-v.wy-1, 5]; v.ch _ v.wh-hdiff; ENDLOOP; IF viewerToolData.xBounded#NIL OR viewerToolData.yBounded#NIL THEN ViewerOps.ResetPaintCache[self, FALSE]; IF update THEN { oldx: LIST OF Viewer _ viewerToolData.xBounded; oldy: LIST OF Viewer _ viewerToolData.yBounded; viewerToolData.xBounded _ viewerToolData.yBounded _ NIL; FOR l: LIST OF Viewer _ oldx, l.rest UNTIL l=NIL DO IF ~l.first.destroyed THEN viewerToolData.xBounded _ CONS[l.first, viewerToolData.xBounded]; ENDLOOP; FOR l: LIST OF Viewer _ oldy, l.rest UNTIL l=NIL DO IF ~l.first.destroyed THEN viewerToolData.yBounded _ CONS[l.first, viewerToolData.yBounded]; ENDLOOP; }; }; SolidViewerToolDestroy: PRIVATE DestroyProc = TRUSTED { SVEditUser.NotifyDestroy[self]; }; SolidViewerToolSet: PRIVATE SetProc = TRUSTED { viewerToolData: ViewerToolData _ NARROW[self.data]; child: Viewer = NARROW[data]; IF child.parent#self THEN ERROR; IF op=$YBound THEN viewerToolData.yBounded _ CONS[child, viewerToolData.yBounded] ELSE IF op=$XBound THEN viewerToolData.xBounded _ CONS[child, viewerToolData.xBounded] ELSE ERROR; }; SolidViewerToolInit: PRIVATE InitProc = CHECKED {}; solidViewerToolClass: ViewerClasses.ViewerClass _ NEW[ViewerClasses.ViewerClassRec _ [ init: SolidViewerToolInit, paint: SolidViewerToolPaint, destroy: SolidViewerToolDestroy, set: SolidViewerToolSet, coordSys: top, icon: Icons.NewIconFromFile["SolidViews.icons", 0] ]]; ViewerOps.RegisterViewerClass[$SolidViewerTool, solidViewerToolClass];-- plug in to Viewers END. θFile: SVViewerToolImpl.mesa Last edited by Bier on July 30, 1984 2:18:45 am PDT Copyright c 1984 by Xerox Corporation. All rights reserved. Created on March 22, 1983 2:29 pm My very own container-type class for solid viewers Κ»˜Iheadšœ™Jšœ3™3Jšœ Οmœ1™