.\"***************************************************************************
.\" Copyright 2018-2020,2021 Thomas E. Dickey                                *
.\" Copyright 1998-2015,2017 Free Software Foundation, Inc.                  *
.\"                                                                          *
.\" Permission is hereby granted, free of charge, to any person obtaining a  *
.\" copy of this software and associated documentation files (the            *
.\" "Software"), to deal in the Software without restriction, including      *
.\" without limitation the rights to use, copy, modify, merge, publish,      *
.\" distribute, distribute with modifications, sublicense, and/or sell       *
.\" copies of the Software, and to permit persons to whom the Software is    *
.\" furnished to do so, subject to the following conditions:                 *
.\"                                                                          *
.\" The above copyright notice and this permission notice shall be included  *
.\" in all copies or substantial portions of the Software.                   *
.\"                                                                          *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
.\"                                                                          *
.\" Except as contained in this notice, the name(s) of the above copyright   *
.\" holders shall not be used in advertising or otherwise to promote the     *
.\" sale, use or other dealings in this Software without prior written       *
.\" authorization.                                                           *
.\"***************************************************************************
.\"
.\" $Id: curs_bkgd.3x,v 1.32 2021/06/17 21:30:22 tom Exp $
.de bP
.ie n  .IP \(bu 4
.el    .IP \(bu 2
..
.TH curs_bkgd 3X ""
.SH NAME
\fBbkgdset\fR, \fBwbkgdset\fR,
\fBbkgd\fR, \fBwbkgd\fR,
\fBgetbkgd\fR \- \fBcurses\fR window background manipulation routines
.SH SYNOPSIS
\fB#include <curses.h>\fR
.PP
\fBvoid bkgdset(chtype \fP\fIch\fP\fB);\fR
.br
\fBvoid wbkgdset(WINDOW *\fP\fIwin, chtype \fP\fIch\fP\fB);\fR
.sp
\fBint bkgd(chtype \fP\fIch\fP\fB);\fR
.br
\fBint wbkgd(WINDOW *\fP\fIwin\fP\fB, chtype \fP\fIch\fP\fB);\fR
.sp
\fBchtype getbkgd(WINDOW *\fP\fIwin\fP\fB);\fR
.br
.SH DESCRIPTION
.SS bkgdset
The \fBbkgdset\fR and \fBwbkgdset\fR routines manipulate the
background of the named window.
The window background is a \fBchtype\fR consisting of
any combination of attributes (i.e., rendition) and a character.
The attribute part of the background is combined (OR'ed) with all non-blank
characters that are written into the window with \fBwaddch\fR.
Both the character and attribute parts of the background are combined with
the blank characters.
The background becomes a property of the
character and moves with the character through any scrolling and
insert/delete line/character operations.
.PP
To the extent possible on a particular terminal,
the attribute part of the background is displayed
as the graphic rendition of the character put on the screen.
.SS bkgd
.PP
The \fBbkgd\fR and \fBwbkgd\fR functions
set the background property of the current or specified window
and then apply this setting to every character position in that window.
According to X/Open Curses, it should do this:
.PP
.bP
The rendition of every character on the screen is changed to
the new background rendition.
.bP
Wherever the former background character
appears, it is changed to the new background character.
.PP
Neither X/Open Curses nor the SVr4 manual pages give details about
the way the rendition of characters on the screen is updated when
\fBbkgd\fP or \fBwbkgd\fP is used to change the background character.
.PP
This implementation, like SVr4 curses, does not store the background
and window attribute contributions to each cell separately.
It updates the rendition by comparing the character, non-color attributes and
colors contained in the background.
For each cell in the window, whether or not it is blank:
.bP
The library first compares the \fIcharacter\fP,
and if it matches the current character part of the background,
it replaces that with the new background character.
.bP
The library then checks if the cell uses color,
i.e., its color pair value is nonzero.
If not, it simply replaces the attributes and color pair in the
cell with those from the new background character.
.bP
If the cell uses color,
and that matches the color in the current background,
the library removes attributes
which may have come from the current background
and adds attributes from the new background.
It finishes by setting the cell
to use the color from the new background.
.bP
If the cell uses color,
and that does not match the color in the current background,
the library updates only the non-color attributes,
first removing those which may have come from the current background,
and then adding attributes from the new background.
.PP
If the background's character value is zero, a space is assumed.
.PP
If the terminal does not support color,
or if color has not been started with \fBstart_color\fP,
the new background character's color attribute will be ignored.
.SS getbkgd
.PP
The \fBgetbkgd\fR function returns the given window's current background
character/attribute pair.
.SH RETURN VALUE
.PP
These functions are described in the XSI Curses standard, Issue 4.
It specifies that \fBbkgd\fR and \fBwbkgd\fR return \fBERR\fR on failure,
but gives no failure conditions.
.PP
The routines \fBbkgd\fR and \fBwbkgd\fR return the integer \fBOK\fR,
unless the library has not been initialized.
.PP
In contrast,
the SVr4.0 manual says \fBbkgd\fR and \fBwbkgd\fR may return \fBOK\fP
"or a non-negative integer if \fBimmedok\fR is set",
which refers to the return value from \fBwrefresh\fP
(used to implement the immediate repainting).
The SVr4 curses \fBwrefresh\fP returns the number of characters
written to the screen during the refresh.
This implementation does not do that.
.SH NOTES
.PP
Note that \fBbkgdset\fR and \fBbkgd\fR may be macros.
.PP
X/Open Curses mentions that the character part of the background must
be a single-byte value.
This implementation, like SVr4, checks to ensure that,
and will reuse the old background character if the check fails.
.SH PORTABILITY
.PP
These functions are described in the XSI Curses standard, Issue 4
(X/Open Curses).
.SH SEE ALSO
.na
.PP
\fBcurses\fR(3X),
\fBcurs_addch\fR(3X),
\fBcurs_attr\fR(3X),
\fBcurs_outopts\fR(3X)
