From b483d9acdf1138f5104aea605d3a6bf06bd95ae4 Mon Sep 17 00:00:00 2001 From: owen Date: Fri, 21 Jan 2005 00:02:59 +0000 Subject: [PATCH] Colours now work properly, including 256-colour stuff. Timing stuff now there, but almost certainly bogus. git-svn-id: svn://svn.tartarus.org/sgt/putty@5160 cda61777-01e9-0310-a592-d414129be87e --- mac/mac.c | 17 ++++++++++++++ mac/macterm.c | 74 ++++++++++++++++++++++++++++++++--------------------------- 2 files changed, 57 insertions(+), 34 deletions(-) diff --git a/mac/mac.c b/mac/mac.c index f1f2bf32..b7070c04 100644 --- a/mac/mac.c +++ b/mac/mac.c @@ -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. diff --git a/mac/macterm.c b/mac/macterm.c index f308808f..c81e6359 100644 --- a/mac/macterm.c +++ b/mac/macterm.c @@ -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. */ -- 2.11.0