DIRECTORY GGModelTypes, Icons, GGInterfaceTypes, ViewerClasses, ViewerOps; GGContainerImpl: CEDAR PROGRAM IMPORTS ViewerOps SHARES ViewerOps = BEGIN OPEN ViewerClasses; Point: TYPE = GGModelTypes.Point; GargoyleData: TYPE = GGInterfaceTypes.GargoyleData; GargoyleContainerPaint: PRIVATE PaintProc = CHECKED { gargoyleData: GargoyleData _ NARROW[self.data]; v: Viewer; update: BOOL _ FALSE; hdiff, wdiff: INTEGER; FOR l: LIST OF Viewer _ gargoyleData.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 _ gargoyleData.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 update THEN { oldx: LIST OF Viewer _ gargoyleData.xBounded; oldy: LIST OF Viewer _ gargoyleData.yBounded; gargoyleData.xBounded _ gargoyleData.yBounded _ NIL; FOR l: LIST OF Viewer _ oldx, l.rest UNTIL l=NIL DO IF ~l.first.destroyed THEN gargoyleData.xBounded _ CONS[l.first, gargoyleData.xBounded]; ENDLOOP; FOR l: LIST OF Viewer _ oldy, l.rest UNTIL l=NIL DO IF ~l.first.destroyed THEN gargoyleData.yBounded _ CONS[l.first, gargoyleData.yBounded]; ENDLOOP; }; }; GargoyleContainerDestroy: PRIVATE DestroyProc = CHECKED { }; GargoyleContainerSet: PRIVATE SetProc = CHECKED { gargoyleData: GargoyleData _ NARROW[self.data]; child: Viewer = NARROW[data]; IF child.parent#self THEN ERROR; IF op=$YBound THEN gargoyleData.yBounded _ CONS[child, gargoyleData.yBounded] ELSE IF op=$XBound THEN gargoyleData.xBounded _ CONS[child, gargoyleData.xBounded] ELSE ERROR; }; GargoyleContainerInit: PRIVATE InitProc = CHECKED {}; gargoyleContainerClass: ViewerClasses.ViewerClass _ NEW[ViewerClasses.ViewerClassRec _ [ init: GargoyleContainerInit, paint: GargoyleContainerPaint, destroy: GargoyleContainerDestroy, set: GargoyleContainerSet, topDownCoordSys: TRUE ]]; ViewerOps.RegisterViewerClass[$GargoyleContainer, gargoyleContainerClass]; -- plug in to Viewers END. ˜GGContainerImpl.mesa Last edited by Bier on June 21, 1985 2:44:54 pm PDT Copyright c 1985 by Xerox Corporation. All rights reserved. Created on June 5, 1985 11:16:46 pm PDT A container-type class for Gargoyle. IF gargoyleData.xBounded#NIL OR gargoyleData.yBounded#NIL THEN ViewerOps.ResetPaintCache[self, FALSE]; Add a constrained child to the list. icon: Icons.NewIconFromFile["SolidViews.icons", 0] ʘIhead1™Jšœ3™3Jšœ Ïmœ1™