diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex b/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex new file mode 100644 index 00000000000..3048e6077fe --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex @@ -0,0 +1,222 @@ +% 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 |