% Copyright 2019 by Till Tantau
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Free Documentation License.
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.


\section{Shadings Library}
\label{section-library-shadings}

\begin{pgflibrary}{shadings}
    The package defines a number of shadings in addition to the ball and axis
    shadings that are available by default.
\end{pgflibrary}

In the following, the shadings defined in the library are listed in
alphabetical order. The colors of some of these shadings can be configured
using special options (like |left color|). These options implicitly select the
shading.

The three shadings |axis|, |ball|, and |radial| are always defined, even when
this library is not used.

\begin{shading}{axis}
    In this always-defined shading the colors change gradually between three
    horizontal lines. The top line is at the top (uppermost) point of the path,
    the middle is in the middle, the bottom line is at the bottom of the path.
    %
    \begin{key}{/tikz/top color=\meta{color}}
        This option sets the color to be used at the top in an |axis| shading.
        When this option is given, several things happen:
        %
        \begin{enumerate}
            \item The |shade| option is selected.
            \item The |shading=axis| option is selected.
            \item The middle color of the axis shading is set to the average of
                the given top color \meta{color} and of whatever color is
                currently selected for the bottom.
            \item The rotation angle of the shading is set to 0.
        \end{enumerate}
        %
\begin{codeexample}[preamble={\usepgflibrary{shadings}}]
\tikz \draw[top color=red] (0,0) rectangle (2,1);
\end{codeexample}
    \end{key}

    \begin{key}{/tikz/bottom color=\meta{color}}
        This option works like |top color|, only for the bottom color.
    \end{key}

    \begin{key}{/tikz/middle color=\meta{color}}
        This option specifies the color for the middle of an axis shading. It
        also sets the |shade| and |shading=axis| options, but it does not
        change the rotation angle.

        \emph{Note:} Since both |top color| and |bottom color| change the
        middle color, this option should be given \emph{last} if all of these
        options need to be given:
        %
\begin{codeexample}[preamble={\usepgflibrary{shadings}}]
\tikz \draw[top color=white,bottom color=black,middle color=red]
  (0,0) rectangle (2,1);
\end{codeexample}
    \end{key}

    \begin{key}{/tikz/left color=\meta{color}}
        This option does exactly the same as |top color|, except that the
        shading angle is set to $90^\circ$.
    \end{key}

    \begin{key}{/tikz/right color=\meta{color}}
        Works like |left color|.
    \end{key}
\end{shading}

\begin{shading}{ball}
    This always-defined shading fills the path with a shading that ``looks like
    a ball''. The default ``color'' of the ball is blue (for no particular
    reason).

    \begin{key}{/tikz/ball color=\meta{color}}
        This option sets the color used for the ball shading. It sets the
        |shade| and |shading=ball| options. Note that the ball will never
        ``completely'' have the color \meta{color}. At its ``highlight'' spot a
        certain amount of white is mixed in, at the border a certain amount of
        black. Because of this, it also makes sense to say |ball color=white|
        or |ball color=black|
        %
\begin{codeexample}[preamble={\usepgflibrary{shadings}}]
\begin{tikzpicture}
  \shade[ball color=white] (0,0) circle (2ex);
  \shade[ball color=red] (1,0) circle (2ex);
  \shade[ball color=black] (2,0) circle (2ex);
\end{tikzpicture}
\end{codeexample}
    \end{key}
\end{shading}

\begin{shading}{bilinear interpolation}
    This shading fills a rectangle with colors that a bilinearly interpolated
    between the colors in the four corners of the rectangle. These four colors
    are called |lower left|, |lower right|, |upper left|, and |upper right|. By
    changing these color, you can change the way the shading looks. The library
    also defines four options, called the same way, that can be used to set
    these colors and select the shading implicitly.
    %
\begin{codeexample}[preamble={\usepgflibrary{shadings}}]
\tikz
  \shade[upper left=red,upper right=green,
         lower left=blue,lower right=yellow]
    (0,0) rectangle (3,2);
\end{codeexample}

    \begin{key}{/tikz/lower left=\meta{color} (initially white)}
        Sets the color to be used in a |bilinear interpolation| shading for the
        lower left corner. Also, this options selects this shading and sets the
        |shade| option.
    \end{key}

    \begin{key}{/tikz/upper left=\meta{color} (initially white)}
        Works like |lower left|.
    \end{key}

    \begin{key}{/tikz/upper right=\meta{color} (initially white)}
        Works like |lower left|.
    \end{key}

    \begin{key}{/tikz/lower right=\meta{color} (initially white)}
        Works like |lower left|.
    \end{key}
\end{shading}

\begin{shading}{color wheel}
\label{shading-color-wheel}%
    This shading fills the path with a color wheel.
    %
\begin{codeexample}[preamble={\usepgflibrary{shadings}}]
\tikz \shade[shading=color wheel] (0,0) circle (1.5);
\end{codeexample}
    %
    To produce a color ring, cut out a circle from the color wheel:
    %
\begin{codeexample}[preamble={\usepgflibrary{shadings}}]
\tikz \shade[shading=color wheel] [even odd rule]
  (0,0) circle (1.5)
  (0,0) circle (1);
\end{codeexample}
    %
\end{shading}

\begin{shading}{color wheel black center}
    This shading looks like a color wheel, but the brightness drops to zero in
    the center.
    %
\begin{codeexample}[preamble={\usepgflibrary{shadings}}]
\tikz \shade[shading=color wheel black center] (0,0) circle (1.5);
\end{codeexample}
    %
\end{shading}

\begin{shading}{color wheel white center}
    This shading looks like a color wheel, but the saturation drops to zero in
    the center.
    %
\begin{codeexample}[preamble={\usepgflibrary{shadings}}]
\tikz \shade[shading=color wheel white center] (0,0) circle (1.5);
\end{codeexample}
    %
\end{shading}

\makeatletter
\begin{shading}{Mandelbrot set}
    This shading is just for fun. It fills the path with a zoomable Mandelbrot
    set. Note that this is \emph{not} a bitmap graphic. Rather, the Mandelbrot
    set is \emph{computed by the \textsc{pdf} renderer} and can be zoomed
    arbitrarily (give it a try, if you have a fast computer).
    %
\begin{codeexample}[preamble={\usepgflibrary{shadings}}]
\tikz \shade[shading=Mandelbrot set] (0,0) rectangle (2,2);
\end{codeexample}
    %
\end{shading}
\makeatother

\begin{shading}{radial}
    This always-defined shading fills the path with a gradual sweep from a
    certain color in the middle to another color at the border. If the path is
    a circle, the outer color will be reached exactly at the border. If the
    shading is not a circle, the outer color will continue a bit towards the
    corners. The default inner color is gray, the default outer color is white.
    %
    \begin{key}{/tikz/inner color=\meta{color}}
        This option sets the color used at the center of a |radial| shading.
        When this option is used, the |shade| and |shading=radial| options are
        set.
        %
\begin{codeexample}[preamble={\usepgflibrary{shadings}}]
\tikz \draw[inner color=red] (0,0) rectangle (2,1);
\end{codeexample}
    \end{key}

    \begin{key}{/tikz/outer color=\meta{color}}
        This option sets the color used at the border and outside of a |radial|
        shading.
        %
\begin{codeexample}[preamble={\usepgflibrary{shadings}}]
\tikz \draw[outer color=red,inner color=white]
  (0,0) rectangle (2,1);
\end{codeexample}
    \end{key}
\end{shading}


%%% Local Variables:
%%% mode: latex
%%% TeX-master: "pgfmanual-pdftex-version"
%%% End:
