summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.pgfsys-dvipdfmx.def
blob: 59662c4edfaf00a0067eaa492fe7e1e1895ff223 (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
%--------------------------------------------
%
% Package pgfplots
%
% Provides a user-friendly interface to create function plots (normal
% plots, semi-logplots and double-logplots).
% 
% It is based on Till Tantau's PGF package.
%
% Copyright 2007-2012 by Christian Feuersänger.
%
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
% 
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.
% 
% You should have received a copy of the GNU General Public License
% along with this program.  If not, see <http://www.gnu.org/licenses/>.
%
%--------------------------------------------

\newcount\c@pgfplotslibrarysurf@streamlen

\def\pgfplotslibrarysurf@initstream{%
	% binary doesn't work due to limitations of DVI.
	% We NEED an ASCII encoding.
	%
	\def\pgfplotslibrarysurf@filter@encode{ASCIIHexEncode}%
	\def\pgfplotslibrarysurf@filter@decode{ASCIIHexDecode}%
	\global\c@pgfplotslibrarysurf@streamlen=0 %
}%

\def\pgfplotslibrarysurf@advancestreamlen#1{%
	\global\advance\c@pgfplotslibrarysurf@streamlen by#1\relax
}%

% The lowlevel call for surface shadings. It uses a pattern type 2
% dictionary as fill color and has thus several things to do. This is
% a little bit more complicated than using the '/sh' operator (as
% other pgf shadings do): the surface shading must be positioned
% exactly at the requested coordinates, otherwise it is quite useless.
%
% Since shadings are *not* affected by changes in the canvas
% transformation matrix (shifts, rotations etc), it is necessary to
% pack the shading into a separate xform object which is then rotated
% and translated correctly. 
%
% There is just one more transformation necessary: the shift inside of
% the xform. This shift is done using changes in the canvas
% transformation matrix and it is UNDONE in the /Matrix argument of
% the pattern dictionary. This last step can't be done with the /sh
% operator which is why I am using pattern dictionaries.
\def\pgfplotslibrarysurfdraw{%
	\begingroup
	\setbox\pgfutil@tempboxa=\hbox
	{%
		\pgfpicture
		\pgfplotssys@do@surfshading@fillpaths\pgfplots@loc@TMPa%
		\global\let\pgfplots@glob@TMPa=\pgfplots@loc@TMPa
		\pgfpathrectanglecorners
			{\pgfplotslibrarysurf@corner@sw}
			{\pgfplotslibrarysurf@corner@ne}%
		\pgfplotslibrarysurfusepath
		\endpgfpicture
	}%
	%
	% NOTE : this code was broken due to some driver in pgf. I fixed
	% that and brought the fix with pgfplots.
	%
	% for some reason, dvipdfmx requires to move the XObject
	% declaration out of the current stream.
	% Perhaps I should rephrase and say that for some reason, this appears to be
	% unnecessary for pdftex. 
	%
	% FIXME : this might have N^2 time due to "box-append"!
	\pgfutil@insertatbegincurrentpagefrombox
	{%
		\special{pdf: bxobj @pgfplotsX\pgfplotslibrarysurf@count\space 
			width \the\wd\pgfutil@tempboxa\space height \the\ht\pgfutil@tempboxa}%
		\special{pdf: put @resources 
			% write the pattern resource dictionary of the XObject
			% (only!):
			<< /Pattern << \pgfplots@glob@TMPa >> >> 
		}%
		%
		% no need to add the pattern to the page's resource list!
		% we do not need this:
		%\pgfutil@addpdfresource@patterns{\pgfplots@glob@TMPa}%
		\leavevmode
		\box\pgfutil@tempboxa
		\special{pdf: exobj}%
	}%
	\endgroup
	\special{pdf: uxobj @pgfplotsX\pgfplotslibrarysurf@count\space}%
	\pgfplotsutil@advancestringcounter@global\pgfplotslibrarysurf@count
}

% To be used inside of a pgfpicture.
%
% #1: a macro name. The contents of this macro needs to be written
% into the pdf pattern dictionary contained in the pdf resources of
% the current context. The current context is either the current page
% or an xform object.
%
%
\def\pgfplotssys@do@surfshading@fillpaths#1{%
	% it contain the BINARY bytes. But it is ASCII encoded, see docs of ASCIIHexEncode.
	\global\multiply\c@pgfplotslibrarysurf@streamlen by2 % 
	%
	\def\pgfplots@loc@TMPa{%
		% stream length will be computed automatically
		/ShadingType \pgfplotslibrarysurf@type\space
		/BitsPerCoordinate \pgfplotslibrarysurf@bitspercoordinate\space
		/BitsPerComponent \pgfplotslibrarysurf@bitspercomponent\space
		\if5\pgfplotslibrarysurf@type
			/VerticesPerRow \pgfkeysvalueof{/pgfplots/surf shading/cols}
		\else
			/BitsPerFlag 8
		\fi
		/ColorSpace /Device\pgfplotslibrarysurf@colorspace
		/Decode [\pgfplotslibrarysurf@decode]
		\ifpgfplotslibrarysurf@usecolormap
			/Function \pgfkeysvalueof{/pgfplots/surf shading/colormap}
		\fi
		\ifx\pgfplotslibrarysurf@filter@decode\pgfutil@empty
		\else
			/Filter /\pgfplotslibrarysurf@filter@decode\space
		\fi
		/Length \the\c@pgfplotslibrarysurf@streamlen
	}%
	%
	\pgf@process{\pgfpointdiff{\pgfplotslibrarysurf@corner@sw}{\pgfkeysvalueof{/pgfplots/surf shading/anchor}}}%
	\pgf@sys@bp@correct\pgf@x%
	\pgf@sys@bp@correct\pgf@y%
	%
	%\noexpand\pgfutil@insertatbegincurrentpagefrombox
	{%
		\special{pdf: object @pgfplotsShading\pgfplotslibrarysurf@count\space << \pgfplots@loc@TMPa >> 
			stream^^J%
			\pgfplotslibrarysurf@binarystream
			endstream
		}%
		\special{pdf: close @pgfplotsShading\pgfplotslibrarysurf@count\space }%
		\special{pdf: object @pgfplotsPattern\pgfplotslibrarysurf@count\space <<
			/Type /Pattern
			/PatternType 2
	%		/Matrix [\pgf@pt@aa\space\pgf@pt@ab\space\pgf@pt@ba\space\pgf@pt@bb\space\pgf@sys@tonumber\pgf@pt@x\space\pgf@sys@tonumber\pgf@pt@y]
			% FIXME: INCORPORATE TIKZ CM
			/Matrix [1 0 0 1 \pgf@sys@tonumber\pgf@x\space \pgf@sys@tonumber\pgf@y] %226.533 518.141] 
			%--------------------------------------------------
			% /ExtGState 
			% 	<<
			% 		/LW 2
			% 		/OP true
			% 		/OPM 1
			% 	>>
			%-------------------------------------------------- 
			/Shading @pgfplotsShading\pgfplotslibrarysurf@count
		>>
		}%
		\special{pdf: close @pgfplotsPattern\pgfplotslibrarysurf@count\space }%
	}%
	\edef#1{%
		/pgfplotsSurface\pgfplotslibrarysurf@count\space @pgfplotsPattern\pgfplotslibrarysurf@count
	}%
	%
	% I inlined \pgfsys@setpatterncolored here because it appears to be
	% natural - and in order to bring this driver to PGF 2.00 (which
	% would fail otherwise)
	\pgfsysprotocol@literal{/Pattern cs /pgfplotsSurface\pgfplotslibrarysurf@count\space scn}%
}

\endinput
% vi: ft=tex