diff options
author | ache <ache@FreeBSD.org> | 1997-07-30 17:21:39 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 1997-07-30 17:21:39 +0000 |
commit | d6cf2089bc5887f137a83ede9767e5154e3b8186 (patch) | |
tree | 2eda095cc49ccd84c07771c2714cb72c8d3a931c /lib/libncurses/lib_bkgd.c | |
parent | 2d46d6b6b7899598c975cea266468603c9a442ba (diff) | |
download | FreeBSD-src-d6cf2089bc5887f137a83ede9767e5154e3b8186.zip FreeBSD-src-d6cf2089bc5887f137a83ede9767e5154e3b8186.tar.gz |
Fix logical background handling by merging it from ncurses 4.1
No new user-visible functions added
Diffstat (limited to 'lib/libncurses/lib_bkgd.c')
-rw-r--r-- | lib/libncurses/lib_bkgd.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/lib/libncurses/lib_bkgd.c b/lib/libncurses/lib_bkgd.c index 4b8043a..d75585c 100644 --- a/lib/libncurses/lib_bkgd.c +++ b/lib/libncurses/lib_bkgd.c @@ -23,14 +23,26 @@ int wbkgd(WINDOW *win, chtype ch) { int x, y; +chtype old_bkgd = getbkgd(win); +chtype new_bkgd = ch; T(("wbkgd(%x, %x) called", win, ch)); - for (y = 0; y <= win->_maxy; y++) - for (x = 0; x <= win->_maxx; x++) - if (win->_line[y][x]&A_CHARTEXT == ' ') - win->_line[y][x] |= ch; + + if (TextOf(new_bkgd) == 0) + new_bkgd |= BLANK; + wbkgdset(win, new_bkgd); + wattrset(win, AttrOf(new_bkgd)); + + for (y = 0; y <= win->_maxy; y++) { + for (x = 0; x <= win->_maxx; x++) { + if (win->_line[y][x] == old_bkgd) + win->_line[y][x] = new_bkgd; else - win->_line[y][x] |= (ch&A_ATTRIBUTES); + win->_line[y][x] = + TextOf(win->_line[y][x]) + | AttrOf(new_bkgd); + } + } touchwin(win); return OK; } |