X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/e0cbe032b5b88e97796176a877fbf5674be2fedd..d2060a26c5e44b3ffb978cf77a307a57670daf2e:/mac/macterm.c diff --git a/mac/macterm.c b/mac/macterm.c index 73ce742f..299debfe 100644 --- a/mac/macterm.c +++ b/mac/macterm.c @@ -1,4 +1,4 @@ -/* $Id: macterm.c,v 1.3 2002/11/19 23:59:27 ben Exp $ */ +/* $Id: macterm.c,v 1.12 2002/11/26 01:32:51 ben Exp $ */ /* * Copyright (c) 1999 Simon Tatham * Copyright (c) 1999, 2002 Ben Harris @@ -152,7 +152,7 @@ void mac_newsession(void) { s->window = GetNewWindow(wTerminal, NULL, (WindowPtr)-1); SetWRefCon(s->window, (long)s); s->scrollbar = GetNewControl(cVScroll, s->window); - s->term = term_init(s); + s->term = term_init(&s->cfg, s); s->logctx = log_init(s); term_provide_logctx(s->term, s->logctx); @@ -165,7 +165,7 @@ void mac_newsession(void) { mac_adjustsize(s, s->cfg.height, s->cfg.width); term_size(s->term, s->cfg.height, s->cfg.width, s->cfg.savelines); - s->ldisc = ldisc_create(s->term, s->back, s->backhandle, s); + s->ldisc = ldisc_create(&s->cfg, s->term, s->back, s->backhandle, s); ldisc_send(s->ldisc, NULL, 0, 0);/* cause ldisc to notice changes */ mac_initfont(s); @@ -228,13 +228,15 @@ static void mac_adjustsize(Session *s, int newrows, int newcols) { static void mac_initpalette(Session *s) { int i; + if (!HAVE_COLOR_QD()) + return; /* * Most colours should be inhibited on 2bpp displays. * Palette manager documentation suggests inhibiting all tolerant colours * on greyscale displays. */ -#define PM_NORMAL pmTolerant | pmInhibitC2 | \ - pmInhibitG2 | pmInhibitG4 | pmInhibitG8 | pmInhibitC2 +#define PM_NORMAL ( pmTolerant | pmInhibitC2 | \ + pmInhibitG2 | pmInhibitG4 | pmInhibitG8 ) #define PM_TOLERANCE 0x2000 s->palette = NewPalette(22, NULL, PM_NORMAL, PM_TOLERANCE); if (s->palette == NULL) @@ -246,7 +248,7 @@ static void mac_initpalette(Session *s) { PM_NORMAL &~ pmInhibitC2, PM_TOLERANCE); SetEntryUsage(s->palette, DEFAULT_FG_BOLD, PM_NORMAL &~ pmInhibitC2, PM_TOLERANCE); - SetEntryUsage(s->palette, CURSOR_FG, + SetEntryUsage(s->palette, CURSOR_BG, PM_NORMAL &~ pmInhibitC2, PM_TOLERANCE); palette_reset(s); } @@ -554,7 +556,11 @@ void mac_keyterm(WindowPtr window, EventRecord *event) { s = (Session *)GetWRefCon(window); len = mac_keytrans(s, event, buf); - s->back->send(s, (char *)buf, len); + ldisc_send(s->ldisc, (char *)buf, len, 1); + ObscureCursor(); + term_seen_key_event(s->term); + term_out(s->term); + term_update(s->term); } static int mac_keytrans(Session *s, EventRecord *event, @@ -729,7 +735,7 @@ void mac_activateterm(WindowPtr window, Boolean active) { Session *s; s = (Session *)GetWRefCon(window); - s->has_focus = active; + s->term->has_focus = active; term_update(s->term); if (active) ShowControl(s->scrollbar); @@ -787,7 +793,6 @@ static void mac_drawgrowicon(Session *s) { struct do_text_args { Session *s; Rect textrect; - Rect leadrect; char *text; int len; unsigned long attr; @@ -821,12 +826,6 @@ void do_text(Context ctx, int x, int y, char *text, int len, a.len = len; a.attr = attr; a.lattr = lattr; - if (s->font_leading > 0) - SetRect(&a.leadrect, - a.textrect.left, a.textrect.bottom - s->font_leading, - a.textrect.right, a.textrect.bottom); - else - SetRect(&a.leadrect, 0, 0, 0, 0); SetPort(s->window); TextFont(s->fontnum); if (s->cfg.fontisbold || (attr & ATTR_BOLD) && !s->cfg.bold_colour) @@ -835,6 +834,7 @@ void do_text(Context ctx, int x, int y, char *text, int len, style |= underline; TextFace(style); TextSize(s->cfg.fontheight); + TextMode(srcOr); SetFractEnable(FALSE); /* We want characters on pixel boundaries */ if (HAVE_COLOR_QD()) if (style & bold) { @@ -858,55 +858,53 @@ void do_text(Context ctx, int x, int y, char *text, int len, static pascal void do_text_for_device(short depth, short devflags, GDHandle device, long cookie) { struct do_text_args *a; - int bgcolour, fgcolour, bright; + int bgcolour, fgcolour, bright, reverse, tmp; a = (struct do_text_args *)cookie; bright = (a->attr & ATTR_BOLD) && a->s->cfg.bold_colour; + reverse = a->attr & ATTR_REVERSE; - TextMode(a->attr & ATTR_REVERSE ? notSrcCopy : srcCopy); + if (depth == 1 && (a->attr & TATTR_ACTCURS)) + reverse = !reverse; - switch (depth) { - case 1: - /* XXX This should be done with a _little_ more configurability */ - ForeColor(whiteColor); - BackColor(blackColor); - if (a->attr & TATTR_ACTCURS) - TextMode(a->attr & ATTR_REVERSE ? srcCopy : notSrcCopy); - break; - case 2: - if (a->attr & TATTR_ACTCURS) { - PmForeColor(CURSOR_FG); - PmBackColor(CURSOR_BG); - TextMode(srcCopy); + if (HAVE_COLOR_QD()) { + if (depth > 2) { + fgcolour = ((a->attr & ATTR_FGMASK) >> ATTR_FGSHIFT) * 2; + bgcolour = ((a->attr & ATTR_BGMASK) >> ATTR_BGSHIFT) * 2; } else { - PmForeColor(bright ? DEFAULT_FG_BOLD : DEFAULT_FG); - PmBackColor(DEFAULT_BG); + /* + * NB: bold reverse in 2bpp breaks with the usual PuTTY model and + * boldens the background, because that's all we can do. + */ + fgcolour = bright ? DEFAULT_FG_BOLD : DEFAULT_FG; + bgcolour = DEFAULT_BG; } - break; - default: - if (a->attr & TATTR_ACTCURS) { + if (reverse) { + tmp = fgcolour; + fgcolour = bgcolour; + bgcolour = tmp; + } + if (bright && depth > 2) + fgcolour++; + if ((a->attr & TATTR_ACTCURS) && depth > 1) { fgcolour = CURSOR_FG; bgcolour = CURSOR_BG; - TextMode(srcCopy); - } else { - fgcolour = ((a->attr & ATTR_FGMASK) >> ATTR_FGSHIFT) * 2; - bgcolour = ((a->attr & ATTR_BGMASK) >> ATTR_BGSHIFT) * 2; - if (bright) - if (a->attr & ATTR_REVERSE) - bgcolour++; - else - fgcolour++; } PmForeColor(fgcolour); PmBackColor(bgcolour); - break; + } else { /* No Color Quickdraw */ + /* XXX This should be done with a _little_ more configurability */ + if (reverse) { + ForeColor(blackColor); + BackColor(whiteColor); + } else { + ForeColor(whiteColor); + BackColor(blackColor); + } } - if (a->attr & ATTR_REVERSE) - PaintRect(&a->leadrect); - else - EraseRect(&a->leadrect); + EraseRect(&a->textrect); MoveTo(a->textrect.left, a->textrect.top + a->s->font_ascent); /* FIXME: Sort out bold width adjustments on Original QuickDraw. */ DrawText(a->text, 0, a->len); @@ -1203,8 +1201,6 @@ static void real_palette_set(Session *s, int n, int r, int g, int b) col.red = r * 0x0101; col.green = g * 0x0101; col.blue = b * 0x0101; - fprintf(stderr, "p%d <- (0x%x, 0x%x, 0x%x)\n", n, col.red, col.green, - col.blue); SetEntryColor(s->palette, n, &col); } @@ -1269,10 +1265,9 @@ void do_scroll(void *frontend, int topline, int botline, int lines) { /* FIXME: This is seriously broken on Original QuickDraw. No idea why. */ SetPort(s->window); + PenNormal(); if (HAVE_COLOR_QD()) PmBackColor(DEFAULT_BG); - else - BackColor(blackColor); update = NewRgn(); SetRect(&r, 0, topline * s->font_height, s->term->cols * s->font_width, (botline + 1) * s->font_height);