summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.pgfsys-luatex.def
blob: 516d8e02a98266eb555b5dfcf726bffac4870f6a (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
%--------------------------------------------
% $Header: /cvsroot/pgfplots/pgfplots/generic/pgfplots/sys/pgflibrarysurfshading.pgfsys-pdftex.def,v 1.1 2009/06/11 07:14:52 ludewich Exp $
%
% 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/2008 by Christian Feuersänger.
%
% pgflibrarypgfplots.surfshading.pgfsys-luatex.def
% converted from ...-pdftex.def by replacing disappeared primitives/vars
% with their respective replacements, as laid out in the luatex manual.
% Conversion by Norbert Preining
%
% Included into the TeX Live pgfplots package with agreement of Till Tantau.
%
% 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/>.
%
%--------------------------------------------

% 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@sys{%
	\begingroup
	%\pgfinterruptpicture% needed?
	\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
	}%
	\immediate\saveboxresource resources{
		/Pattern << \pgfplots@glob@TMPa >> % write the pattern resource dictionary
	}\pgfutil@tempboxa
	\leavevmode
	\useboxresource\lastsavedboxresourceindex
	%\endpgfinterruptpicture
	\endgroup
}

% 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{%
	\ifx\pgfplotslibrarysurf@filter@decode\pgfutil@empty
	\else
		% Unfortunately, there is a bug in pdftex/luatex: if we
		% provide a /Filter as attr, and pdftex compresses the stream,
		% it overwrites the /Filter argument -- and the viewer cannot
		% decode the stream. We have to deactivate compression here:
		\pdfvariable compresslevel=0
	\fi
	\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
	}%
	%
	% \pgfplots@loc@TMPb := final boolean luaBinaryEncoding;
	\pgfutil@IfUndefined{directlua}{%
		\def\pgfplots@loc@TMPb{0}%
	}{%
		\ifx\pgfplotslibrarysurf@filter@decode\pgfutil@empty
			% ah - we have binary encoding (the standard).
			\def\pgfplots@loc@TMPb{1}%
		\else
			% ah - base 16 ASCII encoding:
			\def\pgfplots@loc@TMPb{0}%
		\fi
	}%
	\if0\pgfplots@loc@TMPb
		% no lua binary encoding. Use standard pdftex operations:
		\immediate\pdfextension obj  stream attr {%
			\pgfplots@loc@TMPa
		} {%
			\pgfplotslibrarysurf@binarystream
		}%
		\edef\pgfplots@loc@TMPa{\the\numexpr\pdffeedback lastobj\relax}%
	\else
		% special handling for luatex binary encoding (see docs for \pgfplotsbinarytoluabinary):
		\pgfplotsbinarytoluabinary{\pgfplotslibrarysurf@binarystream}%
		\edef\pgfplots@loc@TMPa{%
			\directlua{%
				tex.print(pdf.immediateobj(\pgfplotsDQ stream\pgfplotsDQ , pgfplotsretval, \pgfplotsDQ \pgfplots@loc@TMPa\pgfplotsDQ ));
				pgfplotsretval=nil;
			}%
		}%
	\fi
	\pgf@process{\pgfpointdiff{\pgfplotslibrarysurf@corner@sw}{\pgfkeysvalueof{/pgfplots/surf shading/anchor}}}%
	\pgf@sys@bp@correct\pgf@x%
	\pgf@sys@bp@correct\pgf@y%
	\immediate\pdfextension obj  {<<
		/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 \pgfplots@loc@TMPa\space 0 R 
	>>}%
	\edef#1{%
		/pgfpatPlotsurface\pgfplotslibrarysurf@count\space \the\numexpr\pdffeedback lastobj\relax\space 0 R
	}%
	\pgfsys@setpatterncolored{Plotsurface\pgfplotslibrarysurf@count}%
	\pgfplotsutil@advancestringcounter@global\pgfplotslibrarysurf@count
}

\endinput
% vi: ft=tex