1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-03-12 18:13:50 -05:00

Colours now work properly, including 256-colour stuff.

Timing stuff now there, but almost certainly bogus.

[originally from svn r5160]
This commit is contained in:
Owen Dunn 2005-01-21 00:02:59 +00:00
parent 961319c14c
commit c29e61381a
2 changed files with 57 additions and 34 deletions

View File

@ -71,6 +71,7 @@ static int cold = 1;
static int borednow = FALSE;
struct mac_gestalts mac_gestalts;
UInt32 sleeptime;
static long timing_next_time;
static void mac_startup(void);
static void mac_eventloop(void);
@ -244,16 +245,32 @@ static void mac_startup(void) {
NewAEEventHandlerUPP(&mac_aevt_quit), 0, FALSE);
}
void timer_change_notify(long next)
{
timing_next_time = next;
}
static void mac_eventloop(void) {
Boolean gotevent;
EventRecord event;
RgnHandle cursrgn;
long next;
long ticksleft;
cursrgn = NewRgn();
sleeptime = 0;
for (;;) {
mac_adjustcursor(cursrgn);
ticksleft=timing_next_time-GETTICKCOUNT();
if (sleeptime > ticksleft && ticksleft >=0)
sleeptime=ticksleft;
gotevent = WaitNextEvent(everyEvent, &event, sleeptime, cursrgn);
if (timing_next_time <= GETTICKCOUNT()) {
if (run_timers(timing_next_time, &next)) {
timer_change_notify(next);
}
}
/*
* XXX For now, limit sleep time to 1/10 s to work around
* wake-before-sleep race in MacTCP code.

View File

@ -63,14 +63,12 @@
#include "mac.h"
#include "terminal.h"
#define NCOLOURS (lenof(((Config *)0)->colours))
#define DEFAULT_FG 16
#define DEFAULT_FG_BOLD 17
#define DEFAULT_BG 18
#define DEFAULT_BG_BOLD 19
#define CURSOR_FG 20
#define CURSOR_BG 21
#define DEFAULT_FG 256
#define DEFAULT_FG_BOLD 257
#define DEFAULT_BG 258
#define DEFAULT_BG_BOLD 259
#define CURSOR_FG 260
#define CURSOR_BG 261
#define PTOCC(x) ((x) < 0 ? -(-(x - s->font_width - 1) / s->font_width) : \
(x) / s->font_width)
@ -350,7 +348,7 @@ static void mac_initpalette(Session *s)
#define PM_NORMAL ( pmTolerant | pmInhibitC2 | \
pmInhibitG2 | pmInhibitG4 | pmInhibitG8 )
#define PM_TOLERANCE 0x2000
s->palette = NewPalette(22, NULL, PM_NORMAL, PM_TOLERANCE);
s->palette = NewPalette(262, NULL, PM_NORMAL, PM_TOLERANCE);
if (s->palette == NULL)
fatalbox("Unable to create palette");
/* In 2bpp, these are the colours we want most. */
@ -1150,7 +1148,7 @@ void do_text(Context ctx, int x, int y, wchar_t *text, int len,
#endif
char mactextbuf[1024];
wchar_t *unitextptr;
int i, fontwidth;
int fontwidth;
ByteCount iread, olen;
OSStatus err;
static DeviceLoopDrawingUPP do_text_for_device_upp = NULL;
@ -1286,9 +1284,7 @@ static pascal void do_text_for_device(short depth, short devflags,
if (HAVE_COLOR_QD()) {
if (depth > 2) {
fgcolour = ((a->attr & ATTR_FGMASK) >> ATTR_FGSHIFT);
fgcolour = (fgcolour & 0xF) * 2 + (fgcolour & 0x10 ? 1 : 0);
bgcolour = ((a->attr & ATTR_BGMASK) >> ATTR_BGSHIFT);
bgcolour = (bgcolour & 0xF) * 2 + (bgcolour & 0x10 ? 1 : 0);
} else {
/*
* NB: bold reverse in 2bpp breaks with the usual PuTTY model and
@ -1303,7 +1299,8 @@ static pascal void do_text_for_device(short depth, short devflags,
bgcolour = tmp;
}
if (bright && depth > 2)
fgcolour |= 1;
if (fgcolour < 16) fgcolour |=8;
else if (fgcolour >= 256) fgcolour |=1;
if ((a->attr & TATTR_ACTCURS) && depth > 1) {
fgcolour = CURSOR_FG;
bgcolour = CURSOR_BG;
@ -1355,7 +1352,7 @@ static pascal void do_text_for_device(short depth, short devflags,
}
}
void do_cursor(Context ctx, int x, int y, char *text, int len,
void do_cursor(Context ctx, int x, int y, wchar_t *text, int len,
unsigned long attr, int lattr)
{
@ -1693,19 +1690,13 @@ static void real_palette_set(Session *s, int n, int r, int g, int b)
void palette_set(void *frontend, int n, int r, int g, int b)
{
Session *s = frontend;
static const int first[21] = {
0, 2, 4, 6, 8, 10, 12, 14,
1, 3, 5, 7, 9, 11, 13, 15,
16, 17, 18, 20, 21
};
if (!HAVE_COLOR_QD())
return;
real_palette_set(s, first[n], r, g, b);
if (first[n] == 18)
real_palette_set(s, first[n]+1, r, g, b);
if (first[n] == DEFAULT_BG)
mac_adjustwinbg(s);
real_palette_set(s, n, r, g, b);
if (n == DEFAULT_BG)
mac_adjustwinbg(s);
ActivatePalette(s->window);
}
@ -1717,23 +1708,38 @@ void palette_reset(void *frontend)
Session *s = frontend;
/* This maps colour indices in cfg to those used in our palette. */
static const int ww[] = {
6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21,
0, 1, 2, 3, 4, 5
256, 257, 258, 259, 260, 261,
0, 8, 1, 9, 2, 10, 3, 11,
4, 12, 5, 13, 6, 14, 7, 15
};
int i;
if (!HAVE_COLOR_QD())
return;
assert(lenof(ww) == NCOLOURS);
for (i = 0; i < NCOLOURS; i++) {
real_palette_set(s, i,
s->cfg.colours[ww[i]][0],
s->cfg.colours[ww[i]][1],
s->cfg.colours[ww[i]][2]);
for (i = 0; i < 22; i++) {
int w = ww[i];
real_palette_set(s,w,
s->cfg.colours[i][0],
s->cfg.colours[i][1],
s->cfg.colours[i][2]);
}
for (i = 0; i < 240; i++) {
if (i < 216) {
int r = i / 36, g = (i / 6) % 6, b = i % 6;
real_palette_set(s,i+16,
r * 0x33,
g * 0x33,
b * 0x33);
} else {
int shade = i - 216;
shade = (shade + 1) * 0xFF / (240 - 216 + 1);
real_palette_set(s,i+16,shade,shade,shade);
}
}
mac_adjustwinbg(s);
ActivatePalette(s->window);
/* Palette Manager will generate update events as required. */