summaryrefslogtreecommitdiffstats
path: root/lib/libncurses/lib_bkgd.c
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>1997-07-30 17:21:39 +0000
committerache <ache@FreeBSD.org>1997-07-30 17:21:39 +0000
commitd6cf2089bc5887f137a83ede9767e5154e3b8186 (patch)
tree2eda095cc49ccd84c07771c2714cb72c8d3a931c /lib/libncurses/lib_bkgd.c
parent2d46d6b6b7899598c975cea266468603c9a442ba (diff)
downloadFreeBSD-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.c22
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;
}
OpenPOWER on IntegriCloud