mirror of
https://github.com/ctm/executor.git
synced 2024-09-28 11:54:53 +00:00
230 lines
5.2 KiB
C
230 lines
5.2 KiB
C
|
/* Copyright 1986, 1989, 1990 by Abacus Research and
|
||
|
* Development, Inc. All rights reserved.
|
||
|
*/
|
||
|
|
||
|
#if !defined (OMIT_RCSID_STRINGS)
|
||
|
char ROMlib_rcsid_qPen[] =
|
||
|
"$Id: qPen.c 63 2004-12-24 18:19:43Z ctm $";
|
||
|
#endif
|
||
|
|
||
|
/* Forward declarations in QuickDraw.h (DO NOT DELETE THIS LINE) */
|
||
|
|
||
|
#include "rsys/common.h"
|
||
|
#include "QuickDraw.h"
|
||
|
#include "CQuickDraw.h"
|
||
|
#include "MemoryMgr.h"
|
||
|
|
||
|
#include "rsys/cquick.h"
|
||
|
#include "rsys/picture.h"
|
||
|
|
||
|
P0(PUBLIC pascal trap, void, HidePen)
|
||
|
{
|
||
|
if (thePortX)
|
||
|
PORT_PEN_VIS_X (thePort) = CW (PORT_PEN_VIS (thePort) - 1);
|
||
|
}
|
||
|
|
||
|
P0(PUBLIC pascal trap, void, ShowPen)
|
||
|
{
|
||
|
if (thePortX)
|
||
|
PORT_PEN_VIS_X (thePort) = CW (PORT_PEN_VIS (thePort) + 1);
|
||
|
}
|
||
|
|
||
|
P1(PUBLIC pascal trap, void, GetPen, Point *, ptp)
|
||
|
{
|
||
|
if (thePortX)
|
||
|
*ptp = PORT_PEN_LOC (thePort);
|
||
|
}
|
||
|
|
||
|
P1(PUBLIC pascal trap, void, GetPenState, PenState *, ps)
|
||
|
{
|
||
|
if (!thePortX)
|
||
|
return;
|
||
|
|
||
|
if (CGrafPort_p (thePort))
|
||
|
{
|
||
|
PixPatHandle pen_pixpat;
|
||
|
|
||
|
ps->pnLoc = PORT_PEN_LOC (thePort);
|
||
|
ps->pnSize = PORT_PEN_SIZE (thePort);
|
||
|
ps->pnMode = PORT_PEN_MODE_X (thePort);
|
||
|
|
||
|
pen_pixpat = CPORT_PEN_PIXPAT (theCPort);
|
||
|
/*
|
||
|
* NOTE: it's not clear what the Mac does here. Cotton has been
|
||
|
* wrong about this stuff before.
|
||
|
*/
|
||
|
if (PIXPAT_TYPE_X (pen_pixpat) == CWC (pixpat_type_orig))
|
||
|
/* #warning GetPenState not necessarily implemented correctly... */
|
||
|
PATASSIGN (ps->pnPat, PIXPAT_1DATA (pen_pixpat));
|
||
|
else
|
||
|
{
|
||
|
/* high bit indicates there is a pixpat (not a pattern)
|
||
|
stored in the pnPat field */
|
||
|
ps->pnMode |= CWC (0x8000);
|
||
|
*(PixPatHandle *) &ps->pnPat[0] = pen_pixpat;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
*ps = *(PenState *) &PORT_PEN_LOC (thePort);
|
||
|
}
|
||
|
|
||
|
P1(PUBLIC pascal trap, void, SetPenState, PenState *, ps)
|
||
|
{
|
||
|
if (!thePortX)
|
||
|
return;
|
||
|
|
||
|
PORT_PEN_LOC (thePort) = ps->pnLoc;
|
||
|
PORT_PEN_SIZE (thePort) = ps->pnSize;
|
||
|
|
||
|
if (ps->pnMode & CWC (0x8000))
|
||
|
{
|
||
|
PORT_PEN_MODE_X (thePort) = ps->pnMode & CWC (~0x8000);
|
||
|
PenPixPat (*(PixPatHandle *) &ps->pnPat[0]);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
PORT_PEN_MODE_X (thePort) = ps->pnMode;
|
||
|
PenPat (ps->pnPat);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void
|
||
|
draw_state_save (draw_state_t *draw_state)
|
||
|
{
|
||
|
GrafPtr current_port;
|
||
|
|
||
|
current_port = thePort;
|
||
|
|
||
|
GetPenState (&draw_state->pen_state);
|
||
|
if (CGrafPort_p (current_port))
|
||
|
{
|
||
|
draw_state->fg_color = CPORT_RGB_FG_COLOR (current_port);
|
||
|
draw_state->bk_color = CPORT_RGB_BK_COLOR (current_port);
|
||
|
}
|
||
|
draw_state->fg = PORT_FG_COLOR_X (current_port);
|
||
|
draw_state->bk = PORT_BK_COLOR_X (current_port);
|
||
|
|
||
|
draw_state->tx_font = PORT_TX_FONT_X (current_port);
|
||
|
draw_state->tx_face = PORT_TX_FACE_X (current_port);
|
||
|
draw_state->tx_size = PORT_TX_SIZE_X (current_port);
|
||
|
draw_state->tx_mode = PORT_TX_MODE_X (current_port);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
draw_state_restore (draw_state_t *draw_state)
|
||
|
{
|
||
|
GrafPtr current_port;
|
||
|
|
||
|
current_port = thePort;
|
||
|
|
||
|
SetPenState (&draw_state->pen_state);
|
||
|
if (CGrafPort_p (current_port))
|
||
|
{
|
||
|
CPORT_RGB_FG_COLOR (current_port) = draw_state->fg_color;
|
||
|
CPORT_RGB_BK_COLOR (current_port) = draw_state->bk_color;
|
||
|
}
|
||
|
PORT_FG_COLOR_X (current_port) = draw_state->fg;
|
||
|
PORT_BK_COLOR_X (current_port) = draw_state->bk;
|
||
|
|
||
|
PORT_TX_FONT_X (current_port) = draw_state->tx_font;
|
||
|
PORT_TX_FACE_X (current_port) = draw_state->tx_face;
|
||
|
PORT_TX_SIZE_X (current_port) = draw_state->tx_size;
|
||
|
PORT_TX_MODE_X (current_port) = draw_state->tx_mode;
|
||
|
}
|
||
|
|
||
|
P2(PUBLIC pascal trap, void, PenSize, INTEGER, w, INTEGER, h)
|
||
|
{
|
||
|
if (thePortX)
|
||
|
{
|
||
|
PORT_PEN_SIZE (thePort).h = CW (w);
|
||
|
PORT_PEN_SIZE (thePort).v = CW (h);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
P1(PUBLIC pascal trap, void, PenMode, INTEGER, m)
|
||
|
{
|
||
|
if (thePortX)
|
||
|
PORT_PEN_MODE_X (thePort) = CW (m);
|
||
|
}
|
||
|
|
||
|
P1(PUBLIC pascal trap, void, PenPat, Pattern, pp)
|
||
|
{
|
||
|
if (thePortX)
|
||
|
{
|
||
|
if (CGrafPort_p (thePort))
|
||
|
{
|
||
|
PixPatHandle old_pen;
|
||
|
|
||
|
old_pen = CPORT_PEN_PIXPAT (theCPort);
|
||
|
if (PIXPAT_TYPE_X (old_pen) == CWC (pixpat_type_orig))
|
||
|
PATASSIGN (PIXPAT_1DATA (old_pen), pp);
|
||
|
else
|
||
|
{
|
||
|
PixPatHandle new_pen = NewPixPat ();
|
||
|
|
||
|
PIXPAT_TYPE_X (new_pen) = CWC (0);
|
||
|
PATASSIGN (PIXPAT_1DATA (new_pen), pp);
|
||
|
|
||
|
PenPixPat (new_pen);
|
||
|
}
|
||
|
/* #warning PenPat not currently implemented correctly... */
|
||
|
}
|
||
|
else
|
||
|
PATASSIGN (PORT_PEN_PAT (thePort), pp);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
P0(PUBLIC pascal trap, void, PenNormal)
|
||
|
{
|
||
|
if (thePortX) {
|
||
|
PenSize(1, 1);
|
||
|
PenMode(patCopy);
|
||
|
PenPat(black);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
P2(PUBLIC pascal trap, void, MoveTo, INTEGER, h, INTEGER, v)
|
||
|
{
|
||
|
if (thePortX)
|
||
|
{
|
||
|
PORT_PEN_LOC (thePort).h = CW (h);
|
||
|
PORT_PEN_LOC (thePort).v = CW (v);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
P2(PUBLIC pascal trap, void, Move, INTEGER, dh, INTEGER, dv)
|
||
|
{
|
||
|
if (thePortX)
|
||
|
{
|
||
|
PORT_PEN_LOC (thePort).h = CW (CW (PORT_PEN_LOC (thePort).h) + (dh));
|
||
|
thePort->pnLoc.v = CW (CW (PORT_PEN_LOC (thePort).v) + (dv));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
P2(PUBLIC pascal trap, void, LineTo, INTEGER, h, INTEGER, v)
|
||
|
{
|
||
|
Point p;
|
||
|
|
||
|
if (thePortX) {
|
||
|
p.h = h;
|
||
|
p.v = v;
|
||
|
CALLLINE(p);
|
||
|
PORT_PEN_LOC (thePort).h = CW(p.h);
|
||
|
PORT_PEN_LOC (thePort).v = CW(p.v);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
P2(PUBLIC pascal trap, void, Line, INTEGER, dh, INTEGER, dv)
|
||
|
{
|
||
|
Point p;
|
||
|
|
||
|
if (thePortX) {
|
||
|
p.h = CW (PORT_PEN_LOC (thePort).h) + dh;
|
||
|
p.v = CW (PORT_PEN_LOC (thePort).v) + dv;
|
||
|
CALLLINE(p);
|
||
|
PORT_PEN_LOC (thePort).h = CW(p.h);
|
||
|
PORT_PEN_LOC (thePort).v = CW(p.v);
|
||
|
}
|
||
|
}
|
||
|
|