-- File: SVViewerToolImpl.mesa -- Last edited by Bier on December 18, 1982 1:46 am -- Author: Eric Bier on March 22, 1983 2:29 pm -- My very own container-type class for solid viewers DIRECTORY Icons, SV2d, SVEditUser, SVViewerTool, ViewerClasses, ViewerOps; SVViewerToolImpl: PROGRAM IMPORTS Icons, SVEditUser, ViewerOps SHARES ViewerOps = BEGIN OPEN ViewerClasses; Point2d: TYPE = SV2d.Point2d; ViewerToolData: TYPE = REF ViewerToolDataObj; ViewerToolDataObj: TYPE = SVViewerTool.ViewerToolDataObj; SolidViewerToolPaint: PRIVATE PaintProc = TRUSTED BEGIN 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 BEGIN 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; END; END; SolidViewerToolDestroy: PRIVATE DestroyProc = TRUSTED { SVEditUser.NotifyDestroy[self]; }; SolidViewerToolSet: PRIVATE SetProc = TRUSTED BEGIN 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; END; SolidViewerToolInit: PRIVATE InitProc = CHECKED BEGIN END; 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.