mirror of
https://github.com/ctm/executor.git
synced 2024-06-04 17:29:30 +00:00
113 lines
2.9 KiB
C
113 lines
2.9 KiB
C
/* Copyright 1986, 1989, 1990, 1996 by Abacus Research and
|
|
* Development, Inc. All rights reserved.
|
|
*/
|
|
|
|
#if !defined (OMIT_RCSID_STRINGS)
|
|
char ROMlib_rcsid_windUpdate[] =
|
|
"$Id: windUpdate.c 63 2004-12-24 18:19:43Z ctm $";
|
|
#endif
|
|
|
|
/* Forward declarations in WindowMgr.h (DO NOT DELETE THIS LINE) */
|
|
|
|
#include "rsys/common.h"
|
|
#include "WindowMgr.h"
|
|
|
|
#include "rsys/cquick.h"
|
|
#include "rsys/wind.h"
|
|
|
|
P1(PUBLIC pascal trap, void, InvalRect, Rect *, r)
|
|
{
|
|
if (thePort)
|
|
{
|
|
RgnHandle rh;
|
|
Rect r_copy;
|
|
|
|
r_copy = *r; /* Just in case NewRgn moves memory */
|
|
rh = NewRgn();
|
|
RectRgn(rh, &r_copy);
|
|
OffsetRgn(rh, -CW (PORT_BOUNDS (thePort).left),
|
|
-CW (PORT_BOUNDS (thePort).top));
|
|
UnionRgn(rh, WINDOW_UPDATE_REGION (thePort),
|
|
WINDOW_UPDATE_REGION (thePort));
|
|
DisposeRgn(rh);
|
|
}
|
|
}
|
|
|
|
P1 (PUBLIC pascal trap, void, InvalRgn, RgnHandle, r)
|
|
{
|
|
GrafPtr current_port;
|
|
RgnHandle update_rgn;
|
|
int top, left;
|
|
|
|
current_port = thePort;
|
|
top = CW (PORT_BOUNDS (current_port).top);
|
|
left = CW (PORT_BOUNDS (current_port).left);
|
|
|
|
OffsetRgn (r, -left, -top);
|
|
|
|
update_rgn = WINDOW_UPDATE_REGION (current_port);
|
|
UnionRgn (r, update_rgn, update_rgn);
|
|
|
|
OffsetRgn (r, left, top);
|
|
}
|
|
|
|
P1(PUBLIC pascal trap, void, ValidRect, Rect *, r)
|
|
{
|
|
RgnHandle rh;
|
|
|
|
rh = NewRgn();
|
|
RectRgn(rh, r);
|
|
OffsetRgn(rh, -CW (PORT_BOUNDS (thePort).left),
|
|
-CW (PORT_BOUNDS (thePort).top));
|
|
DiffRgn (WINDOW_UPDATE_REGION (thePort), rh,
|
|
WINDOW_UPDATE_REGION (thePort));
|
|
DisposeRgn(rh);
|
|
}
|
|
|
|
P1(PUBLIC pascal trap, void, ValidRgn, RgnHandle, r)
|
|
{
|
|
OffsetRgn(r, -CW (PORT_BOUNDS (thePort).left),
|
|
-CW (PORT_BOUNDS (thePort).top));
|
|
DiffRgn (WINDOW_UPDATE_REGION (thePort), r,
|
|
WINDOW_UPDATE_REGION (thePort));
|
|
OffsetRgn (r, CW (PORT_BOUNDS (thePort).left),
|
|
CW (PORT_BOUNDS (thePort).top));
|
|
}
|
|
|
|
PUBLIC int ROMlib_emptyvis = 0;
|
|
|
|
P1(PUBLIC pascal trap, void, BeginUpdate, WindowPtr, w)
|
|
{
|
|
/* #warning Should SaveVisRgn ever become 0? */
|
|
if (!SaveVisRgn)
|
|
SaveVisRgn = (RgnHandle) RM(NewHandle(0));
|
|
|
|
CopyRgn(PORT_VIS_REGION (w), MR(SaveVisRgn));
|
|
|
|
if (EmptyRgn (WINDOW_UPDATE_REGION (w)))
|
|
ROMlib_emptyvis = 1;
|
|
#if 0
|
|
else /* our ROMlib_emptyvis hack below doesn't work if there are some
|
|
routines that write to the screen and ignore it */
|
|
#endif
|
|
{
|
|
CopyRgn (WINDOW_UPDATE_REGION (w), PORT_VIS_REGION (w));
|
|
OffsetRgn (PORT_VIS_REGION (w),
|
|
CW (PORT_BOUNDS (w).left),
|
|
CW (PORT_BOUNDS (w).top));
|
|
SectRgn (PORT_VIS_REGION (w), MR (SaveVisRgn), PORT_VIS_REGION (w));
|
|
SetEmptyRgn (WINDOW_UPDATE_REGION (w));
|
|
ROMlib_emptyvis = EmptyRgn (PORT_VIS_REGION (w));
|
|
}
|
|
}
|
|
|
|
P1(PUBLIC pascal trap, void, EndUpdate, WindowPtr, w)
|
|
{
|
|
CopyRgn(MR(SaveVisRgn), PORT_VIS_REGION (w));
|
|
CopyRgn (WINDOW_CONT_REGION (w), MR (SaveVisRgn));
|
|
OffsetRgn (MR (SaveVisRgn),
|
|
CW (PORT_BOUNDS (w).left),
|
|
CW (PORT_BOUNDS (w).top));
|
|
ROMlib_emptyvis = 0;
|
|
}
|