%!
% PostScript prologue for pst-grad.tex.
% Version 1.05, 2006/11/04
% prepared by Herbert Voss
% For copying restrictions, see pstricks.tex.
%
% For the PSTricks gradient fillstyle.%
% Based on some EPS files by [email protected] (W. R. Lee).%
% Syntax:% D.G. modification begin - Apr.  9, %1998
%%%%%% R0 G0 B0 R1 G1 B1 NumLines MidPoint Angle GradientFill
%   ifGradientCircle GradientScale %GradientPosX GradientPosY
%     R0 G0 B0 R1 G1 B1 NumLines MidPoint %Angle GradientFill
% D.G. modification end
%
/tx@GradientDict 40 dict def
tx@GradientDict begin
/GradientFill {
/ifCMYK exch def   % do we have rgb or cmyk? hv 1.06
rotate
/MidPoint ED
/NumLines ED
ifCMYK {
   /LastBlack ED       % 1.06
   /LastYellow ED      % 1.06
   /LastMagenta ED     % 1.06
   /LastCyan ED        % 1.06
   /FirstBlack ED      % 1.06
   /FirstYellow ED     % 1.06
   /FirstMagenta ED    % 1.06
   /FirstCyan ED       % 1.06
}{ /LastBlue ED
   /LastGreen ED
   /LastRed ED
   /FirstBlue ED
   /FirstGreen ED
   /FirstRed ED
} ifelse
/GradientPosY ED
/GradientPosX ED
/GradientScale ED
/ifGradientCircle ED
% This avoids gaps due to rounding errors:
clip
pathbbox           %leave llx,lly,urx,ury on stack
4 copy /ury ED /urx ED /lly ED /llx ED
/y ED /x ED
ifGradientCircle
  { 0 GradientPosX eq { 0 GradientPosX eq {2 copy translate} if } if }
  {2 copy translate} ifelse
y sub neg /y ED
x sub neg /x ED  % This avoids gaps due to rounding errors:
ifCMYK {                               % 1.06
   LastCyan FirstCyan add 2 div        % 1.06
   LastMagenta FirstMagenta add 2 div  % 1.06
   LastYellow FirstYellow add 2 div    % 1.06
   LastBlack FirstBlack add 2 div      % 1.06
   setcmykcolor                        % 1.06
 }{
   LastRed FirstRed add 2 div
   LastGreen FirstGreen add 2 div
   LastBlue FirstBlue add 2 div
   setrgbcolor
 } ifelse
ifGradientCircle
  { /YSizePerLine y NumLines div def
    /CurrentY y 2 div def
    /MidLine NumLines 2 div 1 MidPoint sub mul abs cvi def
  }{
    fill
    /YSizePerLine y NumLines div def
    /CurrentY 0 def
    /MidLine NumLines 1 MidPoint sub mul abs cvi def
  } ifelse
MidLine NumLines 2 sub gt
  { /MidLine NumLines def }
  { MidLine 2 lt { /MidLine 0 def } if } ifelse
MidLine 0 gt {
 ifCMYK {
   /Cyan FirstCyan def
   /Magenta FirstMagenta def
   /Yellow FirstYellow def
   /Black FirstBlack def
   /CyanIncrement LastCyan FirstCyan sub MidLine 1 sub div def
   /MagentaIncrement LastMagenta FirstMagenta sub MidLine 1 sub div def
   /YellowIncrement LastYellow FirstYellow sub MidLine 1 sub div def
   /BlackIncrement LastBlack FirstBlack sub MidLine 1 sub div def
 }{
   /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
 } ifelse
 MidLine { GradientLoop } repeat
} if
MidLine NumLines lt {
 ifCMYK {
   /Cyan LastCyan def
   /Magenta LastMagenta def
   /Yellow LastYellow def
   /Black LastBlack def
   /CyanIncrement FirstCyan LastCyan sub NumLines MidLine sub 1 sub div def
   /MagentaIncrement FirstMagenta LastMagenta sub NumLines MidLine sub 1 sub div def
   /YellowIncrement FirstYellow LastYellow sub NumLines MidLine sub 1 sub div def
   /BlackIncrement FirstBlack LastBlack sub NumLines MidLine sub 1 sub div def
 }{
   /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
 } ifelse
 NumLines MidLine sub { GradientLoop } repeat
} if
} def/GradientLoop {
% D.G. modification begin - Jul. 23, 1997 / Apr.  9, 1998
 ifGradientCircle
  {CurrentY 0 gt {
% The default center used is the center of the bounding box of the object
     0 GradientPosX eq        {0 GradientPosX eq
          {/GradientPosX urx llx sub 2 div def
           /GradientPosY ury lly sub 2 div def} if} if
     GradientPosX GradientPosY CurrentY GradientScale mul 0 360 arc
     ifCMYK { Cyan Magenta Yellow Black setcmykcolor }
          { Red Green Blue setrgbcolor } ifelse
     fill
     /CurrentY CurrentY YSizePerLine sub def
     ifCMYK {
       /Cyan Cyan CyanIncrement add def
       /Magenta Magenta MagentaIncrement add def
       /Yellow Yellow YellowIncrement add def
       /Black Black BlackIncrement add def
     }{
       /Blue Blue BlueIncrement add def
       /Green Green GreenIncrement add def
       /Red Red RedIncrement add def
     } ifelse
 } if }   { 0 CurrentY moveto    x 0 rlineto
   0 YSizePerLine rlineto    x neg 0 rlineto    closepath
     ifCMYK { Cyan Magenta Yellow Black setcmykcolor }
          { Red Green Blue setrgbcolor } ifelse
     fill
     /CurrentY CurrentY YSizePerLine add def
     ifCMYK {
       /Cyan Cyan CyanIncrement add def
       /Magenta Magenta MagentaIncrement add def
       /Yellow Yellow YellowIncrement add def
       /Black Black BlackIncrement add def
     }{
       /Blue Blue BlueIncrement add def
       /Green Green GreenIncrement add def
       /Red Red RedIncrement add def
     } ifelse
     } ifelse% D.G. modification end
   }def
%
/GradientFillHSB { %    hv 2006-11-04
 rotate
 /MidPoint ED
 /NumLines ED
 /LastBrightness ED
 /LastSaturation ED
 /LastHue ED
 /FirstBrightness ED
 /FirstSaturation ED
 /FirstHue 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:
 LastHue FirstHue add 2 div
 LastSaturation FirstSaturation add 2 div
 LastBrightness FirstBrightness add 2 div
 sethsbcolor
 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
 {
   /Hue FirstHue def
   /Saturation FirstSaturation def
   /Brightness FirstBrightness def
   /HueIncrement LastHue FirstHue sub MidLine 1 sub div def
   /SaturationIncrement LastSaturation FirstSaturation sub MidLine 1 sub
                        div def
   /BrightnessIncrement LastBrightness FirstBrightness sub MidLine 1 sub
                        div def
   MidLine { GradientLoopHSB } repeat
 } if
 MidLine NumLines lt
 {
   /Hue LastHue def
   /Saturation LastSaturation def
   /Brightness LastBrightness def
   /HueIncrement FirstHue LastHue sub NumLines MidLine sub 1 sub div def
   /SaturationIncrement FirstSaturation LastSaturation sub
                        NumLines MidLine sub 1 sub div def
   /BrightnessIncrement FirstBrightness LastBrightness sub
                        NumLines MidLine sub 1 sub div def
   NumLines MidLine sub { GradientLoopHSB } repeat
 } if
} def
/GradientLoopHSB {
 0 CurrentY moveto
 x 0 rlineto
 0 YSizePerLine rlineto
 x neg 0 rlineto
 closepath
 Hue Saturation Brightness sethsbcolor fill
 /CurrentY CurrentY YSizePerLine add def
 /Brightness Brightness BrightnessIncrement add def
 /Saturation Saturation SaturationIncrement add def
 /Hue Hue HueIncrement add def
} def
%
end
%
% END pst-grad.pro