%!
% 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