#  Copyright (c) 1994 The Regents of the University of California.
#  Copyright (c) 1994-1996 Sun Microsystems, Inc.
#  See the file "license.terms" for information on usage and redistribution
#  of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
#

=head1 NAME

Tk_GetVisual - translate from string to visual

=for category C Programming

=head1 SYNOPSIS

B<#include E<lt>tk.hE<gt>>

Visual *
B<Tk_GetVisual(>I<interp, tkwin, string, depthPtr, colormapPtr>B<)>

=head1 ARGUMENTS

=over 4

=item Tcl_Interp *interp (in)

Interpreter to use for error reporting.

=item Tk_Window tkwin (in)

Token for window in which the visual will be used.

=item char *string (in)

String that identifies the desired visual.  See below for
valid formats.

=item int *depthPtr (out)

Depth of returned visual gets stored here.

=item Colormap *colormapPtr (out)

If non-NULL then a suitable colormap for visual is found and its
identifier is stored here.

=back

=head1 DESCRIPTION

B<Tk_GetVisual> takes a string description of a visual and
finds a suitable X Visual for use in I<tkwin>, if there is one.
It returns a pointer to the X Visual structure for the visual
and stores the number of bits per pixel for it at I<*depthPtr>.
If I<string> is unrecognizable or if no suitable visual could
be found, then NULL is returned and B<Tk_GetVisual> leaves
an error message in I<interp-E<gt>result>.
If I<colormap> is non-NULL then B<Tk_GetVisual>
also locates an appropriate colormap for use with the result visual
and stores its X identifier at I<*colormapPtr>.

The I<string> argument specifies the desired visual in one
of the following ways:

=over 4

=item I<class depth>

The string consists of a class name followed by an integer depth,
with any amount of white space (including none) in between.
I<class> selects what sort of visual is desired and must be one of
B<directcolor>, B<grayscale>, B<greyscale>, B<pseudocolor>,
B<staticcolor>, B<staticgray>, B<staticgrey>, or
B<truecolor>, or a unique abbreviation.
I<depth> specifies how many bits per pixel are needed for the
visual.
If possible, B<Tk_GetVisual> will return a visual with this depth;
if there is no visual of the desired depth then B<Tk_GetVisual>
looks first for a visual with greater depth, then one with less
depth.

=item B<default>

Use the default visual for I<tkwin>'s screen.

=item $widget

Use the visual for the window given by $widget.
$widget must be the name of a window on the same screen
as I<tkwin>.

=item I<number>

Use the visual whose X identifier is I<number>.

=item B<best> ?I<depth>?

Choose the ``best possible'' visual, using the following rules, in
decreasing order of priority:
(a) a visual that has exactly the desired depth is best, followed
by a visual with greater depth than requested (but as little extra
as possible), followed by a visual with less depth than requested
(but as great a depth as possible);
(b) if no I<depth> is specified, then the deepest available visual
is chosen;
(c) B<pseudocolor> is better than B<truecolor> or B<directcolor>,
which are better than B<staticcolor>, which is better than
B<staticgray> or B<grayscale>;
(d) the default visual for the screen is better than any other visual.

=back

=head1 CREDITS

The idea for B<Tk_GetVisual>, and the first implementation, came
from Paul Mackerras.

=head1 KEYWORDS

colormap, screen, visual
