%PDF- %PDF-
| Direktori : /data/old/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/ |
| Current File : //data/old/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex |
% Copyright 2007 by Till Tantau
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Public License.
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
\ProvidesFileRCS $Header: /cvsroot/pgf/pgf/generic/pgf/basiclayer/pgfcoretransparency.code.tex,v 1.2 2008/01/17 20:09:16 tantau Exp $
% Sets the opacity of stroking operations.
%
% #1 = opacity, where 1 means fully opaque and 0 means fully
% transparent.
%
% Example:
%
% \pgfsetstrokeopacity{0.5}
\def\pgfsetstrokeopacity#1{%
\pgfmathparse{#1}%
\expandafter\pgfsys@stroke@opacity\expandafter{\pgfmathresult}}
% Sets the opacity of stroking operations.
%
% #1 = opacity, where 1 means fully opaque and 0 means fully
% transparent.
%
% Example:
%
% \pgfsetfillopacity{0.5}
\def\pgfsetfillopacity#1{%
\pgfmathparse{#1}%
\expandafter\pgfsys@fill@opacity\expandafter{\pgfmathresult}}
% Declares a new fading based on the contents of a box.
%
% #1 = name of the fading
% #2 = content of a TeX box that specifies the fading
%
% Description:
%
% This command declares a new fading based on the contents of
% the TeX box. The mask can later be used to mask other graphics.
%
% The box is used to determine where the mask is opaque: At the
% beginning, the mask is completely transparent. Whereever the box
% contains something (like text or a picture or whatever), the
% luminosity of the text/graphic is used to determine how opaque the
% point will be. The greater the luminosity, the more opaque. The net
% effect is that white corresponds to "completely opaque" and black to
% "completely transparent". This is rather counterintuitive. Because
% of this, the special color "pgftransparent" is defined, which is the
% same as black. By setting the color to, say,
% \color{pgftransparent!10} you get something that is 10% transparent
% and \color{pgftransparent!90} gives you 90% transparency.
%
% By default, the drawing color is set to opaque.
%
% Example:
%
% \pgfdeclarefading{mymask}{
% \fontsize{200}{200}\bfseries
% Ti\emph{k}Z
% }
% \pgfdeclarefading{myothermask}{
% \tikz \shade [left color=transparent,right color=transparent!0]
% (0,0) rectangle (5,5);
% }
\def\pgfdeclarefading#1#2{%
\setbox\pgfutil@tempboxa=\hbox{{\pgfsys@beginscope\pgfutil@color{white}\ignorespaces#2\pgfsys@endscope}}%
\pgfsys@fadingfrombox{#1}\pgfutil@tempboxa%
}
\pgfutil@colorlet{pgftransparent}{black}
% Use a previously declared fading.
%
% #1 = name of the fading
% #2 = transformation code
%
% Description:
%
% The command should be used *inside* a pgfpicture to install a
% fading. The fading is a part of the graphic state. (This command
% works much like \pgfsetstrokeopacity).
%
% The mask will be centered on the origin. The transformation code #2 is
% applied to the mask (but not the contents of the actual picture).
\def\pgfsetfading#1#2{%
{%
\pgftransformreset%
#2%
\pgfgettransform{\pgftrans@temp}%
\edef\pgf@marshal{\noexpand\pgfsys@usefading{#1}\pgftrans@temp}%
\pgf@marshal%
}%
}
% Use a previously declared fading scaled for the current path.
%
% #1 - an fading
% #2 - extra transformations
%
% Description:
%
% This command works a bit like \pgfshadepath. "Works a bit like"
% means the following: The masks's original size should
% completely cover the area between (0,0) and (100bp,100bp). The
% mask is then rescaled so that it completely covers the path. Then
% the additional transformation #2 is applied. Finally, the mask is
% made part of the graphic state (as with \pgfsetfading). The path
% used for computation purposes only -- it is not drawn or otherwise
% used.
%
% If no transformations occur, the lower left corner of the path will
% lie on (25bp, 25bp), the upper right corner on (75bp, 75bp).
%
% If the path was empty, the fading will be used at its natural size,
% centered on the origin.
%
% Example:
%
% \pgfdeclarefading{fade right}
% {\tikz[left color=transparent!0,right color=transparent!100]
% (0,0) rectangle (100bp,100bp);}
%
% \pgfpathmoveto{\pgforigin}
% \pgfpathlineto{\pgfxy(1,0)}
% \pgfpathlineto{\pgfxy(1,1)}
% \pgfsetfadingforcurrentpath{fade right}{}
% \pgfusepath{fill}
\def\pgfsetfadingforcurrentpath#1#2{%
\ifdim\pgf@pathminx=16000pt%
% Path was empty -> use natural size
\pgfsetfading{#1}{#2}%
\else%
\pgfsetfading{#1}{%
% Calculate center:
\pgf@xb=.5\pgf@pathmaxx%
\advance\pgf@xb by.5\pgf@pathminx%
\pgf@yb=.5\pgf@pathmaxy%
\advance\pgf@yb by.5\pgf@pathminy%
% Calculate scaling:
\pgf@xc=\pgf@pathmaxx%
\advance\pgf@xc by-\pgf@pathminx%
\pgf@yc=\pgf@pathmaxy%
\advance\pgf@yc by-\pgf@pathminy%
\pgf@xc=.02\pgf@xc%
\pgf@yc=.02\pgf@yc%
% Compute new transformation matrix:
\pgftransformcm{1}{0}{0}{1}{\pgfqpoint{\pgf@xb}{\pgf@yb}}%
\pgftransformcm{\pgf@sys@tonumber{\pgf@xc}}{0}{0}{\pgf@sys@tonumber{\pgf@yc}}{\pgfpointorigin}%
#2%
}%
\fi%
}
% Group things in a a transparency group
%
% Description:
%
% This takes groups pgf commands inside a pgfpicture in a transparency
% group. This means that any transparency settings apply to commands a
% whole. For instance, if a box contains two overlapping black
% circles and you draw them normally with 50% transparency, then the
% overlap will be darker than the rest. By comparison, if the circles
% are part of a transparency group, the overlap will get the same
% color as the rest.
%
%
\def\pgftransparencygroup{%
\begingroup%
\setbox\pgfutil@tempboxa=\hbox\bgroup%
}
\def\endpgftransparencygroup{%
\egroup%
% Now compute the correct position. This is a bit tricky...
\ifdim\pgf@picminx=16000pt%
% Nothing needs to be done
\else%
% Safety margin to avoid clipping:
\advance\pgf@picminx by-1cm%
\advance\pgf@picmaxx by1cm%
\advance\pgf@picminy by-1cm%
\advance\pgf@picmaxy by1cm%
% Ok, set the box size to current picture size.
\setbox\pgfutil@tempboxa=\hbox{%
\vrule width0pt height\pgf@picmaxy depth-\pgf@picminy%
\hskip-\pgf@picminx%
\box\pgfutil@tempboxa%
\hskip\pgf@picmaxx%
}%
\pgfsys@transparencygroupfrombox\pgfutil@tempboxa%
\wd\pgfutil@tempboxa=0pt%
\ht\pgfutil@tempboxa=0pt%
\dp\pgfutil@tempboxa=0pt%
\hskip\pgf@picminx\box\pgfutil@tempboxa\hskip-\pgf@picminx%
\fi%
\endgroup%
}
\let\startpgftransparencygroup=\pgftransparencygroup
\let\stoppgftransparencygroup=\endpgftransparencygroup
\endinput