216 lines
5.3 KiB
C
216 lines
5.3 KiB
C
/* Copyright 1986, 1988, 1989, 1990, 1995 by Abacus Research and
|
|
* Development, Inc. All rights reserved.
|
|
*/
|
|
|
|
#if !defined (OMIT_RCSID_STRINGS)
|
|
char ROMlib_rcsid_ctlMisc[] =
|
|
"$Id: ctlMisc.c 63 2004-12-24 18:19:43Z ctm $";
|
|
#endif
|
|
|
|
/* Forward declarations in ControlMgr.h (DO NOT DELETE THIS LINE) */
|
|
|
|
#include "rsys/common.h"
|
|
#include "WindowMgr.h"
|
|
#include "ControlMgr.h"
|
|
#include "EventMgr.h"
|
|
#include "MemoryMgr.h"
|
|
|
|
#include "rsys/cquick.h"
|
|
#include "rsys/ctl.h"
|
|
#include "rsys/resource.h"
|
|
#include "rsys/hook.h"
|
|
|
|
/* cheat, and make this a plain ctab, so we can use our old accessor
|
|
macros */
|
|
AuxCtlHandle default_aux_ctl;
|
|
|
|
#define BLACK_RGB { CWC (0), CWC (0), CWC (0), }
|
|
#define WHITE_RGB { CWC (0xFFFF), CWC (0xFFFF), CWC (0xFFFF), }
|
|
|
|
#define LT_BLUISH_RGB { CWC (0xCCCC), CWC (0xCCCC), CWC (0xFFFF) }
|
|
#define DK_BLUISH_RGB { CWC (0x3333), CWC (0x3333), CWC (0x6666) }
|
|
|
|
#define DK_GRAY { CWC (0x5555), CWC (0x5555), CWC (0x5555) }
|
|
|
|
const ColorSpec default_ctl_colors[] =
|
|
{
|
|
{ CWC (cFrameColor), BLACK_RGB },
|
|
{ CWC (cBodyColor), WHITE_RGB },
|
|
{ CWC (cTextColor), BLACK_RGB },
|
|
{ CWC (cThumbColor), WHITE_RGB },
|
|
{ CWC (4), DK_GRAY },
|
|
{ CWC (cArrowsColorLight), WHITE_RGB },
|
|
{ CWC (cArrowsColorDark), BLACK_RGB },
|
|
{ CWC (cThumbLight), WHITE_RGB },
|
|
{ CWC (cThumbDark), BLACK_RGB },
|
|
/* used same as the w... color component */
|
|
{ CWC (cHiliteLight), WHITE_RGB },
|
|
{ CWC (cHiliteDark), BLACK_RGB },
|
|
{ CWC (cTitleBarLight), WHITE_RGB },
|
|
{ CWC (cTitleBarDark), BLACK_RGB },
|
|
{ CWC (cTingeLight), LT_BLUISH_RGB },
|
|
{ CWC (cTingeDark), DK_BLUISH_RGB },
|
|
};
|
|
|
|
#define KEEP_DEFAULT_CTL_CTAB_AROUND_FOR_OLD_SYSTEM_FILE_USERS
|
|
|
|
#if defined (KEEP_DEFAULT_CTL_CTAB_AROUND_FOR_OLD_SYSTEM_FILE_USERS)
|
|
PUBLIC CTabHandle default_ctl_ctab;
|
|
#endif
|
|
|
|
void
|
|
ctl_color_init (void)
|
|
{
|
|
default_aux_ctl = (AuxCtlHandle) NewHandle (sizeof (AuxCtlRec));
|
|
|
|
#if defined (KEEP_DEFAULT_CTL_CTAB_AROUND_FOR_OLD_SYSTEM_FILE_USERS)
|
|
default_ctl_ctab = (CTabHandle) ROMlib_getrestid (TICK ("cctb"), 0);
|
|
|
|
if (!default_ctl_ctab)
|
|
{
|
|
default_ctl_ctab
|
|
= (CTabHandle) NewHandle (CTAB_STORAGE_FOR_SIZE (14));
|
|
CTAB_SIZE_X (default_ctl_ctab) = CWC (14);
|
|
CTAB_SEED_X (default_ctl_ctab) = CLC (0);
|
|
CTAB_FLAGS_X (default_ctl_ctab) = CWC (0);
|
|
memcpy (&CTAB_TABLE (default_ctl_ctab)[0],
|
|
&default_ctl_colors[0],
|
|
15 * sizeof default_ctl_colors[0]);
|
|
}
|
|
#endif
|
|
|
|
HxX (default_aux_ctl, acNext) = CLC_NULL;
|
|
HxX (default_aux_ctl, acOwner) = CLC_NULL;
|
|
HxX (default_aux_ctl, acCTable) = (CCTabHandle) RM (GetResource (TICK("cctb"), 0));
|
|
HxX (default_aux_ctl, acFlags) = CWC (0);
|
|
HxX (default_aux_ctl, acReserved) = CLC (0);
|
|
HxX (default_aux_ctl, acRefCon) = CLC (0);
|
|
}
|
|
|
|
AuxCtlHandle *
|
|
lookup_aux_ctl (ControlHandle ctl)
|
|
{
|
|
AuxCtlHandle *t;
|
|
|
|
for (t = &AuxCtlHead;
|
|
*t && HxP (MR (*t), acOwner) != ctl;
|
|
t = &HxX (MR (*t), acNext))
|
|
;
|
|
return t;
|
|
}
|
|
|
|
|
|
P2(PUBLIC pascal trap, void, SetCRefCon, ControlHandle, c, /* IMI-327 */
|
|
LONGINT, data)
|
|
{
|
|
HxX(c, contrlRfCon) = CL(data);
|
|
}
|
|
|
|
P1(PUBLIC pascal trap, LONGINT, GetCRefCon, ControlHandle, c) /* IMI-327 */
|
|
{
|
|
return Hx(c, contrlRfCon);
|
|
}
|
|
|
|
P2(PUBLIC pascal trap, void, SetCtlAction, ControlHandle, c, /* IMI-328 */
|
|
ProcPtr, a)
|
|
{
|
|
if ((LONGINT) a != CLC (-1))
|
|
HxX(c, contrlAction) = RM(a);
|
|
else
|
|
HxX(c, contrlAction) = (ProcPtr) CLC (-1);
|
|
}
|
|
|
|
P1(PUBLIC pascal trap, ProcPtr, GetCtlAction, ControlHandle, c) /* IMI-328 */
|
|
{
|
|
return HxP(c, contrlAction);
|
|
}
|
|
|
|
P1(PUBLIC pascal trap, INTEGER, GetCVariant, ControlHandle, c) /* IMV-222 */
|
|
{
|
|
AuxCtlHandle h;
|
|
|
|
for (h = MR(AuxCtlHead) ; h != 0 && HxP(h, acOwner) != c ; h = HxP(h, acNext))
|
|
;
|
|
return h != 0 ? Hx(h, acFlags) : 0;
|
|
}
|
|
|
|
/* according to IM-MTE; this has been renamed
|
|
`GetAuxiliaryControlRecord ()', possibly because of the
|
|
inconsistency below, i can only assume they have the same trap word */
|
|
P2 (PUBLIC pascal trap, BOOLEAN, GetAuxCtl, ControlHandle, ctl, /* IMV-222 */
|
|
HIDDEN_AuxCtlHandle *, aux_ctl)
|
|
{
|
|
/* according to testing on the Mac+
|
|
`GetAuxCtl ()' returns FALSE (not TRUE) and leaves
|
|
aux_ctl untouched; this is not the case of later
|
|
mac version, such as the color classic v7.1 */
|
|
|
|
if (! ctl)
|
|
{
|
|
aux_ctl->p = RM (default_aux_ctl);
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
AuxCtlHandle t;
|
|
|
|
t = *lookup_aux_ctl (ctl);
|
|
if (t)
|
|
{
|
|
aux_ctl->p = t;
|
|
return FALSE;
|
|
}
|
|
else
|
|
{
|
|
aux_ctl->p = RM (default_aux_ctl);
|
|
return TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
int32
|
|
ROMlib_ctlcall (ControlHandle c, int16 i, int32 l)
|
|
{
|
|
Handle defproc;
|
|
int32 retval;
|
|
ctlfuncp cp;
|
|
|
|
switch (i)
|
|
{
|
|
case calcCRgns:
|
|
case calcCntlRgn:
|
|
case calcThumbRgn:
|
|
case thumbCntl:
|
|
l = US_TO_SYN68K_CHECK0(l);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
defproc = CTL_DEFPROC (c);
|
|
|
|
if (defproc->p == NULL)
|
|
LoadResource (defproc);
|
|
|
|
cp = (ctlfuncp) STARH (defproc);
|
|
|
|
if (cp == P_cdef0)
|
|
retval = C_cdef0 (VAR (c), c, i, l);
|
|
else if (cp == P_cdef16)
|
|
retval = C_cdef16 (VAR (c), c, i, l);
|
|
else if (cp == P_cdef1008)
|
|
retval = C_cdef1008 (VAR (c), c, i, l);
|
|
else
|
|
{
|
|
ROMlib_hook (ctl_cdefnumber);
|
|
LOCK_HANDLE_EXCURSION_1
|
|
(defproc,
|
|
{
|
|
retval = CToPascalCall ((ctlfuncp) STARH (defproc),
|
|
CTOP_cdef0, VAR (c), c, i, l);
|
|
});
|
|
}
|
|
|
|
return retval;
|
|
}
|