/* File: LayerWDEF.c Contains: Layer definition function Written by: Ed Tecot Copyright: © 1989-1990 by Apple Computer, Inc., all rights reserved. Change History (most recent first): <4> 8/28/90 DFH Speedups to calc. <3> 7/2/90 EMT Miscellaneous size and performance improvements: Content region is now empty instead of "wide open". <2> 2/13/90 EMT Made wide open region "less wide" because Darin thinks there's a bug in Mac Plus QuickDraw. <1.1> 12/11/89 EMT Include Layers.h instead of Windows.h. <1.0> 5/13/89 EMT Added to EASE. */ #include /* Layer definition function */ pascal long LayerProc(short, LayerPeek layer, short message, long parameter) { /* Since we only pass the layerStrucRgn along, weÕll do something very sick. * WeÕll keep it in a long local variable, so the compiler will use a data register. */ register long layerStrucRgnLong = (long) layer->strucRgn; #define layerStrucRgn ((RgnHandle) layerStrucRgnLong) if (message == wCalcRgns) { register WindowPeek child; /* Structure region is union of children's. * This reflects the fact that a layer encompasses all its children. */ if ((child = layer->subWindows) != nil) { register WindowPeek next; if ((next = child->nextWindow) != nil) { /* Two or more children. * Union the first two, and loop through the rest. */ UnionRgn(child->strucRgn, next->strucRgn, layerStrucRgn); while ((next = next->nextWindow) != nil) UnionRgn(layerStrucRgn, next->strucRgn, layerStrucRgn); } else /* One child. Copy his strucRgn. */ CopyRgn(child->strucRgn, layerStrucRgn); } else /* No children. No strucRgn. */ SetEmptyRgn(layerStrucRgn); /* Content region is always empty. No need to recalculate it. */ } else if (message == wHit) { /* If the point is inside our structure region, we've been hit. */ if (PtInRgn(*((Point *) ¶meter), layerStrucRgn)) return wInContent; } return wNoHit; }