mirror of
https://github.com/ctm/executor.git
synced 2024-09-25 22:56:22 +00:00
191 lines
5.0 KiB
C
191 lines
5.0 KiB
C
/* Copyright 1986, 1989, 1990, 1995 by Abacus Research and
|
|
* Development, Inc. All rights reserved.
|
|
*/
|
|
|
|
#if !defined (OMIT_RCSID_STRINGS)
|
|
char ROMlib_rcsid_windMouse[] =
|
|
"$Id: windMouse.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 "EventMgr.h"
|
|
#include "OSEvent.h"
|
|
#include "MemoryMgr.h"
|
|
#include "MenuMgr.h"
|
|
|
|
#include "rsys/cquick.h"
|
|
#include "rsys/wind.h"
|
|
#include "rsys/menu.h"
|
|
|
|
#if !defined (No_STEF_zoommods)
|
|
/* WINDOW_ZOOMED returns TRUE if w is currently in stdState (big) */
|
|
|
|
#define WINDOW_ZOOMED(w) (ROMlib_window_zoomed(w))
|
|
|
|
#endif
|
|
|
|
P2(PUBLIC pascal trap, INTEGER, FindWindow, Point, p, HIDDEN_WindowPtr *, wpp)
|
|
{
|
|
WindowPeek wp;
|
|
LONGINT pointaslong, val;
|
|
INTEGER retval;
|
|
|
|
pointaslong = ((LONGINT)p.v << 16)|(unsigned short)p.h;
|
|
|
|
(*wpp).p = 0;
|
|
if (MBDFCALL(mbHit, 0, pointaslong) != -1)
|
|
return inMenuBar;
|
|
for (wp = MR (WindowList); wp ; wp = WINDOW_NEXT_WINDOW (wp))
|
|
{
|
|
if (WINDOW_VISIBLE_X (wp) && PtInRgn (p, WINDOW_STRUCT_REGION (wp)))
|
|
{
|
|
wpp->p = RM ((WindowPtr) wp);
|
|
if (WINDOW_KIND (wp) < 0)
|
|
{
|
|
retval = inSysWindow;
|
|
goto DONE;
|
|
}
|
|
val = WINDCALL((WindowPtr) wp, wHit, pointaslong);
|
|
if (val == wNoHit)
|
|
retval = DeskHook ? inSysWindow : inDesk;
|
|
else
|
|
retval = val + 2; /* datadesk showed us that this is how it's
|
|
done */
|
|
goto DONE;
|
|
}
|
|
}
|
|
retval = inDesk;
|
|
DONE:
|
|
return retval;
|
|
}
|
|
|
|
A3(PRIVATE, BOOLEAN, xTrackBox, WindowPtr, wp, Point, pt,
|
|
INTEGER, part) /* IMIV-50 */
|
|
{
|
|
BOOLEAN inpart = TRUE, inp;
|
|
EventRecord ev;
|
|
|
|
THEPORT_SAVE_EXCURSION
|
|
(MR (wmgr_port),
|
|
{
|
|
SetClip(MR(GrayRgn));
|
|
|
|
WINDCALL(wp, wDraw, part);
|
|
while (!GetOSEvent(mUpMask, &ev))
|
|
{
|
|
ev.where.h = CW(ev.where.h);
|
|
ev.where.v = CW(ev.where.v);
|
|
CALLDRAGHOOK();
|
|
if (pt.h != ev.where.h || pt.v != ev.where.v)
|
|
{
|
|
pt.h = ev.where.h;
|
|
pt.v = ev.where.v;
|
|
inp =
|
|
(WINDCALL
|
|
(wp, wHit, ((LONGINT)pt.v << 16)|(unsigned short) pt.h) == part);
|
|
if (inpart != inp)
|
|
{
|
|
WINDCALL(wp, wDraw, part);
|
|
inpart = inp;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
return inpart;
|
|
}
|
|
|
|
P3(PUBLIC pascal trap, BOOLEAN, TrackBox, WindowPtr, wp, /* IMIV-50 */
|
|
Point, pt, INTEGER, part)
|
|
{
|
|
if (part)
|
|
part -= 2;
|
|
return xTrackBox(wp, pt, part);
|
|
}
|
|
|
|
P2(PUBLIC pascal trap, BOOLEAN, TrackGoAway, WindowPtr, w, Point, p)
|
|
{
|
|
return xTrackBox(w, p, wInGoAway);
|
|
}
|
|
|
|
P3(PUBLIC pascal trap, void, ZoomWindow, WindowPtr, wp, /* IMIV-50 */
|
|
INTEGER, part, BOOLEAN, front)
|
|
{
|
|
RgnHandle behind;
|
|
#if !defined (No_STEF_zoommods)
|
|
Boolean instdstate;
|
|
Rect *u;
|
|
#if !defined (THEPORTNEEDNTBEWMGRPORT)
|
|
GrafPtr gp;
|
|
#endif /* THEPORTNEEDNTBEWMGRPORT */
|
|
|
|
instdstate = WINDOW_ZOOMED((WindowPeek) wp);
|
|
|
|
if ((part == inZoomIn && instdstate)
|
|
|| (part == inZoomOut && !instdstate))
|
|
#else /* No_STEF_zoommods */
|
|
|
|
if ((part == inZoomIn && WINDOW_SPARE_FLAG (wp) == inZoomOut)
|
|
|| (part == inZoomOut && (WINDOW_SPARE_FLAG (wp) == inZoomIn)))
|
|
#endif /* No_STEF_zoommods */
|
|
{
|
|
#if !defined (No_STEF_zoommods)
|
|
/* Save userState if not in stdstate */
|
|
if (!instdstate)
|
|
{
|
|
u = &((WStateData *) STARH (WINDOW_DATA (wp)))->userState;
|
|
u->top
|
|
= CW (CW (PORT_RECT (wp).top) - CW (PORT_BOUNDS (wp).top));
|
|
u->left
|
|
= CW (CW (PORT_RECT (wp).left) - CW (PORT_BOUNDS (wp).left));
|
|
u->bottom
|
|
= CW (CW (PORT_RECT (wp).bottom) - CW(PORT_BOUNDS (wp).top));
|
|
u->right
|
|
= CW (CW (PORT_RECT (wp).right) - CW (PORT_BOUNDS (wp).left));
|
|
}
|
|
#endif
|
|
behind = NewRgn();
|
|
CopyRgn (WINDOW_STRUCT_REGION (wp), behind);
|
|
if (part == inZoomIn)
|
|
PORT_RECT (wp) =
|
|
MR(*(WStateData **) WINDOW_DATA (wp))->userState;
|
|
else
|
|
PORT_RECT (wp) =
|
|
MR (*(WStateData **) WINDOW_DATA (wp))->stdState;
|
|
OffsetRect (&PORT_BOUNDS (wp),
|
|
-CW(PORT_RECT (wp).left) - CW(PORT_BOUNDS (wp).left),
|
|
-CW(PORT_RECT (wp).top) - CW(PORT_BOUNDS (wp).top));
|
|
|
|
OffsetRect (&PORT_RECT (wp),
|
|
-CW (PORT_RECT (wp).left), -CW (PORT_RECT (wp).top));
|
|
WINDCALL(wp, wCalcRgns, 0);
|
|
UnionRgn(behind, WINDOW_STRUCT_REGION (wp), behind);
|
|
|
|
CalcVisBehind((WindowPeek) wp, behind);
|
|
PaintBehind (WINDOW_NEXT_WINDOW (wp), behind);
|
|
|
|
#if !defined (THEPORTNEEDNTBEWMGRPORT)
|
|
gp = thePort;
|
|
SetPort (MR (wmgr_port));
|
|
#endif /* THEPORTNEEDNTBEWMGRPORT */
|
|
SetClip (WINDOW_STRUCT_REGION (wp));
|
|
ClipAbove((WindowPeek)wp);
|
|
WINDCALL((WindowPtr) wp, wDraw, 0);
|
|
EraseRgn (WINDOW_CONT_REGION (wp));
|
|
CopyRgn (WINDOW_CONT_REGION (wp), WINDOW_UPDATE_REGION (wp));
|
|
#if !defined (THEPORTNEEDNTBEWMGRPORT)
|
|
SetPort(gp);
|
|
#endif /* THEPORTNEEDNTBEWMGRPORT */
|
|
|
|
#if !defined (No_STEF_zoommods)
|
|
#else
|
|
WINDOW_SPARE_FLAG_X (wp) = part;
|
|
#endif /* No_STEF_zoommods */
|
|
DisposeRgn (behind);
|
|
if (front)
|
|
SelectWindow(wp);
|
|
}
|
|
}
|