summaryrefslogtreecommitdiff
path: root/usergrps/uktug/baskervi/6_2/spqr/gradient.pro
blob: 44dba7a442e18edfbf8e7a185c75453089adfa10 (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
%!
% PostScript header file gradient.ps
% For the PSTricks gradient fillstyle.
% Version: 0.94
% Date:    93/05/12
% For copying restrictions, see pstricks.doc or pstricks.tex.
%
% Based on some EPS files by leeweyr!bill@nuchat.sccsi.com (W. R. Lee).
%
% Syntax:
%   R0 G0 B0 R1 G1 B1 MidPoint NumLines Angle GradientFill

/tx@GradientDict 40 dict def
tx@GradientDict begin
/GradientFill {
  rotate
  /MidPoint ED
  /NumLines ED
  /LastBlue ED
  /LastGreen ED
  /LastRed ED
  /FirstBlue ED
  /FirstGreen ED
  /FirstRed ED
  % This avoids gaps due to rounding errors:
  clip
  pathbbox           %leave llx,lly,urx,ury on stack
  /y ED /x ED
  2 copy translate
  y sub neg /y ED
  x sub neg /x ED
  % This avoids gaps due to rounding errors:
  LastRed FirstRed add 2 div
  LastGreen FirstGreen add 2 div
  LastBlue FirstBlue add 2 div
  setrgbcolor
  fill
  /YSizePerLine y NumLines div def
  /CurrentY 0 def
  /MidLine NumLines 1 MidPoint sub mul abs cvi def
  MidLine NumLines 2 sub gt
  { /MidLine NumLines def }
  { MidLine 2 lt { /MidLine 0 def } if }
  ifelse
  MidLine 0 gt
  {
    /Red FirstRed def
    /Green FirstGreen def
    /Blue FirstBlue def
    /RedIncrement LastRed FirstRed sub MidLine 1 sub div def
    /GreenIncrement LastGreen FirstGreen sub MidLine 1 sub div def
    /BlueIncrement LastBlue FirstBlue sub MidLine 1 sub div def
    MidLine { GradientLoop } repeat
  } if
  MidLine NumLines lt
  {
    /Red LastRed def
    /Green LastGreen def
    /Blue LastBlue def
    /RedIncrement FirstRed LastRed sub NumLines MidLine sub 1 sub div def
    /GreenIncrement FirstGreen LastGreen sub NumLines MidLine sub 1 sub div def
    /BlueIncrement FirstBlue LastBlue sub NumLines MidLine sub 1 sub div def
    NumLines MidLine sub { GradientLoop } repeat
  } if
} def
/GradientLoop {
  0 CurrentY moveto
  x 0 rlineto
  0 YSizePerLine rlineto
  x neg 0 rlineto
  closepath
  Red Green Blue setrgbcolor fill
  /CurrentY CurrentY YSizePerLine add def
  /Blue Blue BlueIncrement add def
  /Green Green GreenIncrement add def
  /Red Red RedIncrement add def
} def

end
% END gradient.ps