diff --git a/sdl1/pdcdisp.c b/sdl1/pdcdisp.c index 0e85e179..58f61546 100644 --- a/sdl1/pdcdisp.c +++ b/sdl1/pdcdisp.c @@ -13,7 +13,7 @@ #include "pdcsdl.h" -RCSID("$Id: pdcdisp.c,v 1.20 2007/06/24 16:35:33 wmcbrine Exp $") +RCSID("$Id: pdcdisp.c,v 1.21 2007/06/27 02:51:09 wmcbrine Exp $") #include #include @@ -61,7 +61,7 @@ chtype acs_map[128] = static SDL_Rect uprect[MAXRECT]; static chtype oldch = (chtype)(-1); static int rectcount = 0; -static short foregr, backgr; +static short foregr = -1, backgr = -1; /* do the real updates on a delay */ @@ -86,25 +86,33 @@ static void _set_attr(chtype ch) if (oldch != ch) { - SDL_Color attr[2]; + short newfg, newbg; - pair_content(PAIR_NUMBER(ch), &foregr, &backgr); + pair_content(PAIR_NUMBER(ch), &newfg, &newbg); - foregr |= (ch & A_BOLD) ? 8 : 0; - backgr |= (ch & A_BLINK) ? 8 : 0; + newfg |= (ch & A_BOLD) ? 8 : 0; + newbg |= (ch & A_BLINK) ? 8 : 0; if (ch & A_REVERSE) { - attr[0] = pdc_color[backgr]; - attr[1] = pdc_color[foregr]; - } - else - { - attr[0] = pdc_color[foregr]; - attr[1] = pdc_color[backgr]; + short tmp = newfg; + newfg = newbg; + newbg = tmp; } - SDL_SetPalette(pdc_font, SDL_LOGPAL, attr, 0, 2); + if (newfg != foregr) + { + SDL_SetPalette(pdc_font, SDL_LOGPAL, + pdc_color + newfg, 0, 1); + foregr = newfg; + } + + if (newbg != backgr) + { + SDL_SetPalette(pdc_font, SDL_LOGPAL, + pdc_color + newbg, pdc_flastc, 1); + backgr = newbg; + } oldch = ch; } @@ -176,7 +184,7 @@ static void _highlight(SDL_Rect *src, SDL_Rect *dest, chtype ch) src->x = '_' % 32 * pdc_fwidth; src->y = '_' / 32 * pdc_fheight; - SDL_SetColorKey(pdc_font, SDL_SRCCOLORKEY, 1); + SDL_SetColorKey(pdc_font, SDL_SRCCOLORKEY, (Uint32)pdc_flastc); SDL_BlitSurface(pdc_font, src, pdc_screen, dest); SDL_SetColorKey(pdc_font, 0, 0); @@ -190,7 +198,7 @@ static void _highlight(SDL_Rect *src, SDL_Rect *dest, chtype ch) if (ch & (A_LEFTLINE|A_RIGHTLINE)) { if (col == -1) - col = (ch & A_REVERSE) ? backgr : foregr; + col = foregr; dest->w = 1; diff --git a/sdl1/pdcscrn.c b/sdl1/pdcscrn.c index 70a7daaa..eca87a6e 100644 --- a/sdl1/pdcscrn.c +++ b/sdl1/pdcscrn.c @@ -13,7 +13,7 @@ #include "pdcsdl.h" -RCSID("$Id: pdcscrn.c,v 1.21 2007/06/25 12:47:13 wmcbrine Exp $") +RCSID("$Id: pdcscrn.c,v 1.22 2007/06/27 02:51:09 wmcbrine Exp $") #include "deffont.h" #include "deficon.h" @@ -23,7 +23,7 @@ int pdc_sheight = 0, pdc_swidth = 0, pdc_yoffset = 0, pdc_xoffset = 0; SDL_Color pdc_color[16]; Uint32 pdc_mapped[16]; -int pdc_fheight, pdc_fwidth; +int pdc_fheight, pdc_fwidth, pdc_flastc; bool pdc_own_screen; WINDOW *pdc_lastscr; @@ -83,8 +83,15 @@ int PDC_scr_open(int argc, char **argv) return ERR; } + if (!pdc_font->format->palette) + { + fprintf(stderr, "Font must have a palette\n"); + return ERR; + } + pdc_fheight = pdc_font->h / 8; pdc_fwidth = pdc_font->w / 32; + pdc_flastc = pdc_font->format->palette->ncolors - 1; if (pdc_own_screen && !pdc_icon) { diff --git a/sdl1/pdcsdl.h b/sdl1/pdcsdl.h index 3519869d..64f048e9 100644 --- a/sdl1/pdcsdl.h +++ b/sdl1/pdcsdl.h @@ -11,7 +11,7 @@ * See the file maintain.er for details of the current maintainer. * ************************************************************************/ -/* $Id: pdcsdl.h,v 1.9 2007/06/24 16:35:33 wmcbrine Exp $ */ +/* $Id: pdcsdl.h,v 1.10 2007/06/27 02:51:09 wmcbrine Exp $ */ #include @@ -22,7 +22,7 @@ PDCEX int pdc_sheight, pdc_swidth, pdc_yoffset, pdc_xoffset; extern SDL_Color pdc_color[16]; extern Uint32 pdc_mapped[16]; -extern int pdc_fheight, pdc_fwidth; +extern int pdc_fheight, pdc_fwidth, pdc_flastc; extern bool pdc_own_screen; extern WINDOW *pdc_lastscr;