mirror of
https://github.com/ctm/executor.git
synced 2024-09-26 14:55:54 +00:00
235 lines
6.0 KiB
C
235 lines
6.0 KiB
C
|
/* Copyright 1994, 1995 by Abacus Research and
|
||
|
* Development, Inc. All rights reserved.
|
||
|
*/
|
||
|
|
||
|
#if !defined (OMIT_RCSID_STRINGS)
|
||
|
char ROMlib_rcsid_windColor[] =
|
||
|
"$Id: windColor.c 63 2004-12-24 18:19:43Z ctm $";
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/* color window manager functions; introduced in IM-V or beyond */
|
||
|
|
||
|
#include "rsys/common.h"
|
||
|
#include "QuickDraw.h"
|
||
|
#include "CQuickDraw.h"
|
||
|
#include "WindowMgr.h"
|
||
|
#include "MemoryMgr.h"
|
||
|
|
||
|
#include "rsys/cquick.h"
|
||
|
#include "rsys/wind.h"
|
||
|
|
||
|
/* return a pointer to the auxilary window record
|
||
|
associated with `w' */
|
||
|
|
||
|
AuxWinHandle default_aux_win = NULL;
|
||
|
|
||
|
#define BLACK_RGB { CWC (0), CWC (0), CWC (0), }
|
||
|
#define WHITE_RGB { CWC (0xFFFF), CWC (0xFFFF), CWC (0xFFFF), }
|
||
|
|
||
|
/* bw window colortable */
|
||
|
const ColorSpec default_bw_win_ctab[] =
|
||
|
{
|
||
|
{ CWC (wContentColor), WHITE_RGB },
|
||
|
{ CWC (wFrameColor), BLACK_RGB },
|
||
|
{ CWC (wTextColor), BLACK_RGB },
|
||
|
{ CWC (wHiliteColor), BLACK_RGB },
|
||
|
{ CWC (wTitleBarColor), WHITE_RGB },
|
||
|
{ CWC (wHiliteColorLight), WHITE_RGB },
|
||
|
{ CWC (wHiliteColorDark), BLACK_RGB },
|
||
|
{ CWC (wTitleBarLight), WHITE_RGB },
|
||
|
{ CWC (wTitleBarDark), BLACK_RGB },
|
||
|
{ CWC (wDialogLight), BLACK_RGB },
|
||
|
{ CWC (wDialogDark), BLACK_RGB },
|
||
|
{ CWC (wTingeLight), BLACK_RGB },
|
||
|
{ CWC (wTingeDark), BLACK_RGB },
|
||
|
};
|
||
|
|
||
|
#define LT_BLUISH_RGB { CWC (0xCCCC), CWC (0xCCCC), CWC (0xFFFF) }
|
||
|
#define DK_BLUISH_RGB { CWC (0x3333), CWC (0x3333), CWC (0x6666) }
|
||
|
/* the default `bluish' window color table */
|
||
|
const ColorSpec default_color_win_ctab[] =
|
||
|
{
|
||
|
{ CWC (wContentColor), WHITE_RGB },
|
||
|
{ CWC (wFrameColor), BLACK_RGB },
|
||
|
{ CWC (wTextColor), BLACK_RGB },
|
||
|
{ CWC (wHiliteColor), BLACK_RGB },
|
||
|
{ CWC (wTitleBarColor), WHITE_RGB },
|
||
|
{ CWC (wHiliteColorLight), WHITE_RGB },
|
||
|
{ CWC (wHiliteColorDark), BLACK_RGB },
|
||
|
{ CWC (wTitleBarLight), WHITE_RGB },
|
||
|
{ CWC (wTitleBarDark), BLACK_RGB },
|
||
|
{ CWC (wDialogLight), LT_BLUISH_RGB },
|
||
|
{ CWC (wDialogDark), BLACK_RGB },
|
||
|
{ CWC (wTingeLight), LT_BLUISH_RGB },
|
||
|
{ CWC (wTingeDark), DK_BLUISH_RGB },
|
||
|
};
|
||
|
#undef DK_BLUISH_RGB
|
||
|
#undef LT_BLUISH_RGB
|
||
|
|
||
|
#define GRAY_RGB { CWC (0x8888), CWC (0x8888), CWC (0x8888) }
|
||
|
/* stolen from the default colortable excel
|
||
|
tries to install */
|
||
|
const ColorSpec default_system6_color_win_ctab[] =
|
||
|
{
|
||
|
{ CWC (wContentColor), WHITE_RGB },
|
||
|
{ CWC (wFrameColor), BLACK_RGB },
|
||
|
{ CWC (wTextColor), BLACK_RGB },
|
||
|
{ CWC (wHiliteColor), BLACK_RGB },
|
||
|
{ CWC (wTitleBarColor), WHITE_RGB },
|
||
|
};
|
||
|
#undef GRAY_RGB
|
||
|
#undef WHITE_RGB
|
||
|
#undef BLACK_RGB
|
||
|
|
||
|
void
|
||
|
wind_color_init (void)
|
||
|
{
|
||
|
/* initalize the default window colortable */
|
||
|
ZONE_SAVE_EXCURSION
|
||
|
(SysZone,
|
||
|
{
|
||
|
default_aux_win = (AuxWinHandle) NewHandle (sizeof (AuxWinRec));
|
||
|
HxX (default_aux_win, awNext) = 0;
|
||
|
HxX (default_aux_win, awOwner) = 0;
|
||
|
HxX (default_aux_win, awCTable)
|
||
|
= (CTabHandle) RM (GetResource (TICK("wctb"), 0));
|
||
|
HxX (default_aux_win, dialogCItem) = 0;
|
||
|
HxX (default_aux_win, awFlags) = 0;
|
||
|
HxX (default_aux_win, awReserved) = 0;
|
||
|
HxX (default_aux_win, awRefCon) = 0;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
AuxWinHandle *
|
||
|
lookup_aux_win (WindowPtr w)
|
||
|
{
|
||
|
AuxWinHandle *t;
|
||
|
|
||
|
for (t = &AuxWinHead;
|
||
|
*t && HxP (MR (*t), awOwner) != w;
|
||
|
t = &HxX (MR (*t), awNext))
|
||
|
;
|
||
|
return t;
|
||
|
}
|
||
|
|
||
|
P2 (PUBLIC pascal trap, void, SetWinColor,
|
||
|
WindowPtr, w,
|
||
|
CTabHandle, new_w_ctab)
|
||
|
{
|
||
|
if (w)
|
||
|
{
|
||
|
AuxWinHandle aux_w;
|
||
|
|
||
|
aux_w = MR (*lookup_aux_win (w));
|
||
|
|
||
|
if (!aux_w)
|
||
|
{
|
||
|
AuxWinHandle t_aux_w;
|
||
|
|
||
|
t_aux_w = AuxWinHead;
|
||
|
aux_w = (AuxWinHandle) NewHandle (sizeof (AuxWinRec));
|
||
|
AuxWinHead = RM (aux_w);
|
||
|
HxX (aux_w, awNext) = t_aux_w;
|
||
|
HxX (aux_w, awOwner) = (WindowPtr) RM (w);
|
||
|
/* FIXME: copy? */
|
||
|
HxX (aux_w, awCTable) = RM (new_w_ctab);
|
||
|
HxX (aux_w, dialogCItem) = 0;
|
||
|
HxX (aux_w, awFlags) = /* CL (proc_id & 0x0F) */ 0;
|
||
|
HxX (aux_w, awReserved) = 0;
|
||
|
HxX (aux_w, awRefCon) = 0;
|
||
|
}
|
||
|
else
|
||
|
HxX (aux_w, awCTable) = RM (new_w_ctab);
|
||
|
|
||
|
if (CGrafPort_p (w))
|
||
|
{
|
||
|
ColorSpec *w_ctab_table;
|
||
|
RGBColor *color;
|
||
|
|
||
|
w_ctab_table = CTAB_TABLE (new_w_ctab);
|
||
|
color = &w_ctab_table[wContentColor].rgb;
|
||
|
|
||
|
CPORT_RGB_BK_COLOR (w) = *color;
|
||
|
|
||
|
/* pick the best color and store it into window's port's
|
||
|
bkColor field */
|
||
|
PORT_BK_COLOR_X (w) = CL (Color2Index (color));
|
||
|
|
||
|
if (WINDOW_VISIBLE_X (w))
|
||
|
THEPORT_SAVE_EXCURSION
|
||
|
(w,
|
||
|
{
|
||
|
RgnHandle t;
|
||
|
t = NewRgn ();
|
||
|
|
||
|
CopyRgn (WINDOW_CONT_REGION (w), t);
|
||
|
OffsetRgn (t,
|
||
|
CW (PORT_BOUNDS (w).left),
|
||
|
CW (PORT_BOUNDS (w).top));
|
||
|
EraseRgn (t);
|
||
|
DisposeRgn (t);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (WINDOW_VISIBLE_X (w))
|
||
|
{
|
||
|
/* set the port here, don't just save it while drawing the
|
||
|
window
|
||
|
FIXME: i'm not sure to what extent this should be the
|
||
|
case, at the bare minimum at least here */
|
||
|
SetPort (MR (wmgr_port));
|
||
|
|
||
|
SetClip (WINDOW_STRUCT_REGION (w));
|
||
|
ClipAbove ((WindowPeek)w);
|
||
|
WINDCALL (w, wDraw, 0);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/* modify the default color window table */
|
||
|
abort ();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* NOTE: all documentation on this function is either vague to the
|
||
|
point of certain mis-interpretation, or plain wrong.
|
||
|
|
||
|
it's second argument is `AuxWinHandle *' (or `AuxWinHndl *' in
|
||
|
Think C speak), and returns the aux window entry for the given
|
||
|
window; if NULL is passed, an handle to a `AuxWinRec' is placed in
|
||
|
the aux_w_out argument which contains the default window color
|
||
|
table
|
||
|
|
||
|
they named it correctly, but noone got the documentation right */
|
||
|
|
||
|
P2 (PUBLIC pascal trap, BOOLEAN, GetAuxWin,
|
||
|
WindowPtr, w,
|
||
|
HIDDEN_AuxWinHandle *, aux_win_out)
|
||
|
{
|
||
|
if (! w)
|
||
|
{
|
||
|
/* return default window color table */
|
||
|
aux_win_out->p = RM (default_aux_win);
|
||
|
return TRUE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AuxWinHandle t;
|
||
|
|
||
|
t = *lookup_aux_win (w);
|
||
|
if (t)
|
||
|
{
|
||
|
/* return this window's color table */
|
||
|
aux_win_out->p = t;
|
||
|
return TRUE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/* return default window color table */
|
||
|
aux_win_out->p = RM (default_aux_win);
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
}
|