\ProvidesFileRCS $Header: /cvsroot/pgf/pgf/generic/pgf/systemlayer/pgfsys-dvips.def,v 1.9 2005/10/18 18:03:38 tantau Exp $ % Copyright 2005 by Till Tantau . % % This program can be redistributed and/or modified under the terms % of the GNU Public License, version 2. % Driver commands for dvips % % Load common postscript commands: % \input pgfsys-common-postscript.def % % dvips-specific stuff: % \def\pgfsys@invoke#1{\special{ps:: #1}} \def\pgfsys@outerinvoke#1{\special{ps: #1}} \def\pgfsys@beginpicture{\special{ps: }\special{ps::[begin]}\pgfsys@invoke{pgfo}} \def\pgfsys@endpicture{\pgfsys@invoke{pgfc}\special{ps::[end]}} \def\pgfsys@hbox#1{% \pgfsys@invoke{pgfs}% \special{ps::[end]}% \wd#1=0pt% \ht#1=0pt% \dp#1=0pt% \box#1 \special{ps::[begin]}% \pgfsys@invoke{pgfr}% } \def\pgfsys@begininvisible{% \special{ps::[begin]}% \pgfsys@invoke{gsave nulldevice}% \special{ps::[end]}} \def\pgfsys@endinvisible{% \special{ps::[begin]}% \pgfsys@invoke{grestore}% \special{ps::[end]}% } \def\pgfsys@color@unstacked#1{\special{ps: \XC@usecolor{#1}}} \newcount\pgf@objectcount \def\pgfsys@defobject#1#2#3#4{% \global\advance\pgf@objectcount by 1 \expandafter\xdef\csname#1\endcsname{\the\pgf@objectcount} \pgfsysprotocol@getcurrentprotocol\pgfsys@temp% {% \pgfsysprotocol@setcurrentprotocol\@empty% \pgfsysprotocol@bufferedtrue% #4% \pgfsysprotocol@getcurrentprotocol\pgfsys@@temp% \special{! /pgf\csname#1\endcsname{gsave exec \pgfsys@@temp\space grestore} bind def}% }% \pgfsysprotocol@setcurrentprotocol\pgfsys@temp% } \def\pgfsys@useobject#1#2{% \pgfsysprotocol@getcurrentprotocol\pgfsys@temp% {% \pgfsysprotocol@setcurrentprotocol\@empty% \pgfsysprotocol@bufferedfalse% #2% \pgfsysprotocol@invokecurrentprotocol% \pgfsys@invoke{pgf\csname#1\endcsname}% }% \pgfsysprotocol@setcurrentprotocol\pgfsys@temp} \def\pgfsys@imagesuffixlist{epsi:eps:ps} \def\pgfsys@horishading#1#2#3{% {% \pgf@parsefunc{#3}% \setlength\pgf@x{#2}% \pgf@xa=\pgf@x% \pgf@sys@bp@correct{\pgf@x}% \pgf@y=\pgf@max% \pgf@sys@bp@correct{\pgf@y}% \expandafter\xdef\csname @pgfshading#1!\endcsname{\hbox to \the\pgf@max{% \noexpand\vrule width0pt height\the\pgf@xa% \noexpand\pgfsys@beginpurepicture% \noexpand\pgfsys@rect{0pt}{0pt}{\the\pgf@y}{\the\pgf@x}% \noexpand\pgfsys@clipnext% \noexpand\pgfsys@discardpath% \noexpand\pgfsys@invoke{\pgf@domb\space \pgf@sys@tonumber{\pgf@x} pgfH \pgf@psfuncs\space pop}% \hss% \noexpand\pgfsys@endpurepicture}}% }% } \def\pgfsys@vertshading#1#2#3{% {% \pgf@parsefunc{#3}% \setlength\pgf@x{#2}% \pgf@xa=\pgf@x% \pgf@sys@bp@correct{\pgf@x}% \pgf@y=\pgf@max% \pgf@sys@bp@correct{\pgf@y}% \expandafter\xdef\csname @pgfshading#1!\endcsname{\hbox to\the\pgf@xa{% \noexpand\vrule width0pt height\the\pgf@max% \noexpand\pgfsys@beginpurepicture% \noexpand\pgfsys@rect{0pt}{0pt}{\the\pgf@x}{\the\pgf@y}% \noexpand\pgfsys@clipnext% \noexpand\pgfsys@discardpath% \noexpand\pgfsys@invoke{\pgf@domb\space \pgf@sys@tonumber{\pgf@x} pgfV \pgf@psfuncs\space pop}% \hss% \noexpand\pgfsys@endpurepicture}}% }% } \def\pgfsys@radialshading#1#2#3{% {% \pgf@parsefunc{#3}% \pgf@process{#2}% \pgf@xa=2\pgf@max% \pgf@sys@bp@correct{\pgf@max}% \advance\pgf@x by \pgf@max% \advance\pgf@y by \pgf@max% \expandafter\xdef\csname @pgfshading#1!\endcsname{\hbox to \the\pgf@xa{% \noexpand\vrule width0pt height\the\pgf@xa% \noexpand\pgfsys@beginpurepicture% \noexpand\pgfsys@invoke{% \pgf@domb\space \pgf@sys@tonumber{\pgf@y} \pgf@sys@tonumber{\pgf@x} \pgf@sys@tonumber{\pgf@max} pgfR1 \pgf@psfuncs\space \pgf@firstcolor\space \pgf@doma\space pgfR2}% \hss% \noexpand\pgfsys@endpurepicture}}% }% } \AtBeginDocument{ % Always present specials. \special{! /pgfsc{}B% stroke color is empty by default /pgffc{}B% fill color is empty by default /pgfstr{stroke}B% /pgffill{fill}B% /pgfeofill{eofill}B% /pgfe{a dup 0 rlineto exch 0 exch rlineto neg 0 rlineto closepath}B% rectangle /pgfw{setlinewidth}B% setlinewidth /pgfs{save pgfpd 72 Resolution div 72 VResolution div neg scale magscale{1 DVImag div dup scale}if pgfx neg pgfy neg translate pgffoa .setopacityalpha}B% save /pgfr{pgfsd restore}B %restore userdict begin% /pgfo{pgfsd /pgfx currentpoint /pgfy exch def def @beginspecial}B %open /pgfc{newpath @endspecial pgfpd}B %close /pgfsd{globaldict /pgfdelta /delta where {pop delta} {0} ifelse put}B% save delta /pgfpd{/delta globaldict /pgfdelta get def}B % put delta /.setopacityalpha where {pop} {/.setopacityalpha{pop}def} ifelse % install .setopacityalpha /.pgfsetfillopacityalpha{/pgffoa exch def /pgffill{gsave pgffoa .setopacityalpha fill 1 .setopacityalpha newpath fill grestore}B /pgfeofill{gsave pgffoa .setopacityalpha eofill1 .setopacityalpha newpath eofill grestore}B}B /.pgfsetstrokeopacityalpha{/pgfsoa exch def /pgfstr{gsave pgfsoa .setopacityalpha stroke grestore}B}B /pgffoa 1 def /pgfsoa 1 def end } % Parameters to horizontal pre axishade: \pgf@domb x \special{! /pgfH{% /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfA} def /pgfdir { dup 0 moveto dup 5 index lineto } bind def} B}% % Parameters to vertical pre axishade: \pgf@domb x \special{! /pgfV{% /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfA} def /pgfdir { dup 0 exch moveto dup 5 index exch lineto } bind def} B}% % Parameters to axishade: end x, start x, r-, g-, b- of first color, r-, g-, b- of second color % Stack afterwards: end x \special{! /pgfA{ /pgfdiff 8 index round cvi 8 index round cvi sub 2 mul 1 add def 2 index 6 index sub pgfdiff div % put red-step on stack 2 index 6 index sub pgfdiff div % put green-step on stack 2 index 6 index sub pgfdiff div % put green-step on stack pgfheight 9 index 9 index 9 index 14 index pgfdiff { 3 index 3 index 3 index setrgbcolor % Set color pgfdir stroke 4 -1 roll 7 index add % red += incred 4 -1 roll 6 index add % green += incgreen 4 -1 roll 5 index add % blue += incblue 4 -1 roll .5 sub % x += 0.5 } repeat mark 15 1 roll cleartomark exch pop % leave only start x on stack }B } % Parameters to radialshade pre: \pgf@domb y x max \special{! /pgfR1{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfR} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }B } % Parameters to radialshade post: \pgf@firstcolor \pgf@doma \special{! /pgfR2{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setrgbcolor fill pop}B }% % Parameters to radialshade: end x, start x, r-, g-, b- of first color, r-, g-, b- of second color % Stack afterwards: end x \special{! /pgfR{ /pgfdiff 8 index round cvi 8 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 9 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 9 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 8 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 8 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 2 index 6 index sub pgfdiff div % put red-step on stack 2 index 6 index sub pgfdiff div % put green-step on stack 2 index 6 index sub pgfdiff div % put green-step on stack 8 index 8 index 8 index 13 index pgfdiff { 3 index 3 index 3 index setrgbcolor % Set color pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 4 -1 roll 6 index add % red += incred 4 -1 roll 5 index add % green += incgreen 4 -1 roll 4 index add % blue += incblue 4 -1 roll .25 sub % x += 0.25 /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 14 1 roll cleartomark exch pop % leave only start x on stack }B} } \endinput %%% Local Variables: %%% mode: latex %%% End: