XFree86 3.1.2Df - xterm patch #13 - 1996/4/23 - T.Dickey
This corrects my earlier changes for colors - the inner border of the xterm was
getting painted with the wrong color, since I'd moved the call to set the
background into the logic that tracks SGR information.
--------------------------------------------------------------------------------
charproc.c | 3 ---
util.c | 45 +++++++++++++++++++++++++++++++!!!!!!!!!!!!!!
xterm.h | 1 +
3 files changed, 32 insertions, 3 deletions, 14 modifications
--------------------------------------------------------------------------------
Index: charproc.c
*** /build/x11r6/XFree86-960419/xc/programs/xterm/charproc.c Sun Mar 17 13:33:40 1996
--- /build/x11r6/XFree86-current/xc/programs/xterm/charproc.c Mon Apr 22 20:38:49 1996
***************
*** 745,753 ****
XSetForeground(screen->display, screen->reverseGC, bg);
XSetBackground(screen->display, screen->normalboldGC, bg);
XSetForeground(screen->display, screen->reverseboldGC, bg);
-
- /* update the screen's background (for XClearArea) */
- XSetWindowBackground(screen->display, TextWindow(screen), bg);
}
static void VTparse()
--- 745,750 ----
Index: util.c
*** /build/x11r6/XFree86-960419/xc/programs/xterm/util.c Mon Mar 11 13:48:46 1996
--- /build/x11r6/XFree86-current/xc/programs/xterm/util.c Tue Apr 23 06:25:29 1996
***************
*** 509,520 ****
--- 509,522 ----
cx = CursorX (screen, screen->cur_col);
cy = CursorY (screen, screen->cur_row);
+ useCurBackground(TRUE);
XFillRectangle(
screen->display,
TextWindow(screen),
screen->reverseGC,
cx, cy,
(unsigned) n * FontWidth(screen), (unsigned) FontHeight(screen));
+ useCurBackground(FALSE);
}
}
/* adjust screen->buf */
***************
*** 547,552 ****
--- 549,555 ----
screen->max_col+1 - (screen->cur_col+n),
-n);
+ useCurBackground(TRUE);
XFillRectangle
(screen->display, TextWindow(screen),
screen->reverseGC,
***************
*** 554,559 ****
--- 557,563 ----
+ Width(screen) - n*FontWidth(screen),
CursorY (screen, screen->cur_row), n * FontWidth(screen),
FontHeight(screen));
+ useCurBackground(FALSE);
}
}
/* adjust screen->buf */
***************
*** 578,588 ****
FlushScroll(screen);
if((height = screen->cur_row + top) > screen->max_row)
height = screen->max_row;
! if((height -= top) > 0)
XClearArea(screen->display, TextWindow(screen),
screen->border + screen->scrollbar, top *
FontHeight(screen) + screen->border,
Width(screen), height * FontHeight(screen), FALSE);
if(screen->cur_row - screen->topline <= screen->max_row)
ClearLeft(screen);
--- 582,595 ----
FlushScroll(screen);
if((height = screen->cur_row + top) > screen->max_row)
height = screen->max_row;
! if((height -= top) > 0) {
! useCurBackground(TRUE);
XClearArea(screen->display, TextWindow(screen),
screen->border + screen->scrollbar, top *
FontHeight(screen) + screen->border,
Width(screen), height * FontHeight(screen), FALSE);
+ useCurBackground(FALSE);
+ }
if(screen->cur_row - screen->topline <= screen->max_row)
ClearLeft(screen);
***************
*** 603,614 ****
if((top = screen->cur_row - screen->topline) <= screen->max_row) {
if(screen->scroll_amt)
FlushScroll(screen);
! if(++top <= screen->max_row)
XClearArea(screen->display, TextWindow(screen),
screen->border + screen->scrollbar, top *
FontHeight(screen) + screen->border,
Width(screen), (screen->max_row - top + 1) *
FontHeight(screen), FALSE);
}
ClearBufRows(screen, screen->cur_row + 1, screen->max_row);
}
--- 610,624 ----
if((top = screen->cur_row - screen->topline) <= screen->max_row) {
if(screen->scroll_amt)
FlushScroll(screen);
! if(++top <= screen->max_row) {
! useCurBackground(TRUE);
XClearArea(screen->display, TextWindow(screen),
screen->border + screen->scrollbar, top *
FontHeight(screen) + screen->border,
Width(screen), (screen->max_row - top + 1) *
FontHeight(screen), FALSE);
+ useCurBackground(FALSE);
+ }
}
ClearBufRows(screen, screen->cur_row + 1, screen->max_row);
}
***************
*** 631,642 ****
--- 641,654 ----
if(!AddToRefresh(screen)) {
if(screen->scroll_amt)
FlushScroll(screen);
+ useCurBackground(TRUE);
XFillRectangle(screen->display, TextWindow(screen),
screen->reverseGC,
CursorX(screen, screen->cur_col),
CursorY(screen, screen->cur_row),
Width(screen) - screen->cur_col * FontWidth(screen),
FontHeight(screen));
+ useCurBackground(FALSE);
}
}
bzero(BUF_CHARS(buf, screen->cur_row) + screen->cur_col, len);
***************
*** 669,680 ****
--- 681,694 ----
if(!AddToRefresh(screen)) {
if(screen->scroll_amt)
FlushScroll(screen);
+ useCurBackground(TRUE);
XFillRectangle (screen->display, TextWindow(screen),
screen->reverseGC,
screen->border + screen->scrollbar,
CursorY (screen, screen->cur_row),
len * FontWidth(screen),
FontHeight(screen));
+ useCurBackground(FALSE);
}
}
***************
*** 701,711 ****
--- 715,727 ----
if(!AddToRefresh(screen)) {
if(screen->scroll_amt)
FlushScroll(screen);
+ useCurBackground(TRUE);
XFillRectangle (screen->display, TextWindow(screen),
screen->reverseGC,
screen->border + screen->scrollbar,
CursorY (screen, screen->cur_row),
Width(screen), FontHeight(screen));
+ useCurBackground(FALSE);
}
}
bzero (SCRN_BUF_CHARS(screen, screen->cur_row), (screen->max_col + 1));
***************
*** 726,741 ****
if((top = -screen->topline) <= screen->max_row) {
if(screen->scroll_amt)
FlushScroll(screen);
! #if 1 /* FIXME */
! if(top == 0)
! XClearWindow(screen->display, TextWindow(screen));
! else
! #endif
! XClearArea(screen->display, TextWindow(screen),
screen->border + screen->scrollbar,
top * FontHeight(screen) + screen->border,
Width(screen), (screen->max_row - top + 1) *
FontHeight(screen), FALSE);
}
ClearBufRows (screen, 0, screen->max_row);
}
--- 742,754 ----
if((top = -screen->topline) <= screen->max_row) {
if(screen->scroll_amt)
FlushScroll(screen);
! useCurBackground(TRUE);
! XClearArea(screen->display, TextWindow(screen),
screen->border + screen->scrollbar,
top * FontHeight(screen) + screen->border,
Width(screen), (screen->max_row - top + 1) *
FontHeight(screen), FALSE);
+ useCurBackground(FALSE);
}
ClearBufRows (screen, 0, screen->max_row);
}
***************
*** 1235,1238 ****
--- 1248,1267 ----
bg = term->screen.original_fg;
return bg;
+ }
+
+ /*
+ * Update the screen's background (for XClearArea)
+ *
+ * If the argument is true, sets the window's background to the value set
+ * in the current SGR background. Otherwise, reset to the window's default
+ * background.
+ */
+ void useCurBackground(Bool flag)
+ {
+ TScreen *screen = &term->screen;
+ int color = flag ? term->cur_background : -1;
+ Pixel bg = getXtermBackground(term->flags, color);
+
+ XSetWindowBackground(screen->display, TextWindow(screen), bg);
}
Index: xterm.h
*** /build/x11r6/XFree86-960419/xc/programs/xterm/xterm.h Mon Mar 11 13:48:46 1996
--- /build/x11r6/XFree86-current/xc/programs/xterm/xterm.h Mon Apr 22 20:38:11 1996
***************
*** 190,194 ****
--- 190,195 ----
extern void recolor_cursor PROTO((Cursor cursor, unsigned long fg, unsigned long bg));
extern void resetXtermGC PROTO((TScreen *screen, int flags, Bool hilite));
extern void scrolling_copy_area PROTO((TScreen *screen, int firstline, int nlines, int amount));
+ extern void useCurBackground PROTO((Bool flag));
#endif /* included_xterm_h */