--- rxvt-unicode/src/screen.C 2006/01/25 21:09:21 1.252 +++ rxvt-unicode/src/screen.C 2006/01/31 00:25:16 1.257 @@ -128,7 +128,7 @@ l.touch (); - efs &= ~RS_baseattrMask; + efs &= ~RS_baseattrMask; // remove italic etc. fontstyles efs = SET_FONT (efs, FONTSET (efs)->find_font (' ')); text_t *et = l.t + col; @@ -643,14 +643,18 @@ // erase newly scrolled-in lines for (int i = count; i--; ) { - // basically this is a slightly optimized scr_blank_screen_mem - // it is worth the effort on slower machines line_t &l = ROW(nrow - 1 - i); - scr_blank_line (l, 0, l.l, rstyle); - - l.l = 0; - l.f = 0; + // optimize if already cleared, can be significant on slow machines + // could be rolled into scr_blank_screen_mem + if (l.r && l.l < ncol - 1 && !((l.r[l.l + 1] ^ rstyle) & RS_bgMask)) + { + scr_blank_line (l, 0, l.l, rstyle); + l.l = 0; + l.f = 0; + } + else + scr_blank_screen_mem (l, rstyle); } // now copy lines below the scroll region bottom to the @@ -1112,7 +1116,7 @@ * Move cursor left in row. If we're at the left boundary, shift everything * in that row right. Clear left column. */ -#if ENABLE_FRILLS +#if !ENABLE_MINIMAL void rxvt_term::scr_backindex () NOTHROW { @@ -1129,7 +1133,7 @@ * Move cursor right in row. If we're at the right boundary, shift everything * in that row left. Clear right column. */ -#if ENABLE_FRILLS +#if !ENABLE_MINIMAL void rxvt_term::scr_forwardindex () NOTHROW { @@ -1353,7 +1357,7 @@ } } -#if ENABLE_FRILLS +#if !ENABLE_MINIMAL void rxvt_term::scr_erase_savelines () NOTHROW { @@ -1752,10 +1756,9 @@ for (int i = 0; i < nrow; i++) { - int col = 0; rend_t *drp = drawn_buf[i].r; - for (; col < ncol; col++, drp++) + for (int col = 0; col < ncol; col++, drp++) if ((*drp & mask) == value) { found = true; @@ -2256,11 +2259,11 @@ // force redraw after "careful" characters to avoid pixel droppings for (int i = 0; srp[col + i] & RS_Careful && col + i < ncol - 1; i++) - drp[col + i + 1] = ~srp[col + i + 1]; + drp[col + i + 1] = srp[col + i + 1] ^ RS_redraw; // force redraw before "careful" characters to avoid pixel droppings for (int i = 0; srp[text - stp - i] & RS_Careful && text - i > stp; i++) - drp[text - stp - i - 1] = ~srp[text - stp - i - 1]; + drp[text - stp - i - 1] = srp[text - stp - i - 1] ^ RS_redraw; #endif bool invert = rend & RS_RVid; @@ -2328,9 +2331,7 @@ rxvt_font *font = (*fontset[GET_STYLE (rend)])[GET_FONT (rend)]; if (back == fore) - font->clear_rect (*drawable, xpixel, ypixel, - fwidth * count, fheight, - back); + font->clear_rect (*drawable, xpixel, ypixel, fwidth * count, fheight, back); else if (back == Color_bg) { if (must_clear) @@ -2547,7 +2548,7 @@ && current_screen == selection.screen && selection.end.row >= view_start) { -#if ENABLE_FRILLS +#if !ENABLE_MINIMAL if (selection.rect) scr_xor_rect (selection.beg.row, selection.beg.col, selection.end.row, selection.end.col, @@ -2772,7 +2773,7 @@ char **cl; int cr; -#if ENABLE_FRILLS +#if !ENABLE_MINIMAL // xlib is horribly broken with respect to UTF8_STRING, and nobody cares to fix it // so recode it manually if (ct.encoding == xa[XA_UTF8_STRING]) @@ -2953,7 +2954,7 @@ for (; row <= selection.end.row; row++, col = 0) { -#if ENABLE_FRILLS +#if !ENABLE_MINIMAL if (selection.rect) { col = selection.beg.col; @@ -2966,7 +2967,7 @@ col = max (col, 0); if (row == selection.end.row -#if ENABLE_FRILLS +#if !ENABLE_MINIMAL || selection.rect #endif ) @@ -2999,7 +3000,7 @@ new_selection_text[ofs++] = *t++; } -#if ENABLE_FRILLS +#if !ENABLE_MINIMAL if (selection.rect) { while (ofs @@ -3370,7 +3371,7 @@ { if (selection.beg.col > ROW(selection.beg.row).l //TODO//FIXME//LEN && !ROW(selection.beg.row).is_longer () -#if ENABLE_FRILLS +#if !ENABLE_MINIMAL && !selection.rect #endif ) @@ -3379,7 +3380,7 @@ if ( selection.end.col > ROW(selection.end.row).l //TODO//FIXME//LEN && !ROW(selection.end.row).is_longer () -#if ENABLE_FRILLS +#if !ENABLE_MINIMAL && !selection.rect #endif ) @@ -3406,7 +3407,9 @@ { selection.end.row = end_row; selection.end.col = ROW(end_row).l; +# if !ENABLE_MINIMAL selection_remove_trailing_spaces (); +# endif break; } } @@ -3445,13 +3448,13 @@ } } -#if ENABLE_FRILLS +#if !ENABLE_MINIMAL if (selection.rect && selection.beg.col > selection.end.col) ::swap (selection.beg.col, selection.end.col); #endif } -#if ENABLE_FRILLS +#if !ENABLE_MINIMAL void rxvt_term::selection_remove_trailing_spaces () NOTHROW { @@ -3586,7 +3589,7 @@ style = enc_text; else if (target == xa[XA_COMPOUND_TEXT]) style = enc_compound_text; -#if ENABLE_FRILLS +#if !ENABLE_MINIMAL else if (target == xa[XA_UTF8_STRING]) style = enc_utf8; #endif @@ -3607,7 +3610,7 @@ selectlen = 0; } -#if ENABLE_FRILLS +#if !ENABLE_MINIMAL // xlib is horribly broken with respect to UTF8_STRING, and nobody cares to fix it // so recode it manually if (style == enc_utf8)