mac-rom/Toolbox/WindowMgr/LayerWDEF.c
Elliot Nunn 0ba83392d4 Bring in CubeE sources
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included.

The Tools directory, containing mostly junk, is also excluded.
2017-09-20 18:04:16 +08:00

64 lines
2.0 KiB
C

/*
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 <Layers.h>
/* 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 *) &parameter), layerStrucRgn))
return wInContent;
}
return wNoHit;
}