summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvips.def
blob: e6ef83b5adedc9491b4009a85bbf935ded6604c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
\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 <tantau@cs.tu-berlin.de>.
%
% 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: