%%
%% This is file `tikzlibraryshadows.blur.code.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% pgf-blur.dtx  (with options: `texfile')
%% Copyright 2012 Martin Giese, martingi@ifi.uio.no
%% Copyright 2012 Andrew Stacey
%% Copyright 2018 Norbert Preining, norbert@preining.info
%% 
%% This file is under the LaTeX Project Public License
%% See CTAN archives in directory macros/latex/base/lppl.txt.
%% 
%% DESCRIPTION:
%%   `pgf-blur' adds blurred/faded/fuzzy shadows to TikZ/PGF
%% 


\def\fileversion{1.02}
\def\filedate{2012/12/09}
\message{ v\fileversion, \filedate}
\usetikzlibrary{shadows}
\usetikzlibrary{calc}
\newif\ifpgfbs@invert@fading
\newcount\pgfbs@fading@count
\pgfbs@fading@count=0\relax
\tikzset{
  /tikz/shadow blur radius/.store in=\pgfbs@radius,
  /tikz/shadow blur radius=.4ex,
  /tikz/shadow blur extra rounding/.store in=\pgfbs@extra@rounding,
  /tikz/shadow blur extra rounding=\pgfutil@empty,
  /tikz/shadow blur extra rounding/.default=\pgfbs@radius,
  /tikz/shadow blur steps/.store in=\pgfbs@steps,
  /tikz/shadow blur steps=4,
  /tikz/shadow blur invert/.is if=pgfbs@invert@fading,
  /tikz/shadow opacity/.store in=\pgfbs@opacity,
  /tikz/shadow opacity=40,
  /tikz/blur shadow/.style={
    shadow scale=1,
    shadow xshift=.5ex,
    shadow yshift=-.5ex,
    preaction=render blur shadow,
    every shadow,
    #1,
  },
  /tikz/render blur shadow/.code={
    \pgfbs@savebb
    \global\advance\pgfbs@fading@count by 1\relax
    \pgfsyssoftpath@getcurrentpath{\pgfbs@input@path}%
    \pgfbs@compute@shadow@bbox
    \pgfbs@process@rounding{\pgfbs@input@path}{\pgfbs@fadepath}%
    \pgfbs@apply@canvas@transform
    \colorlet{pstb@shadow@color}{white!\pgfbs@opacity!black}%
    \ifpgfbs@invert@fading
    \pgfdeclarefading{shadowfading-\the\pgfbs@fading@count}{\pgfbs@paint@invert@fading}%
    \else
    \pgfdeclarefading{shadowfading-\the\pgfbs@fading@count}{\pgfbs@paint@fading}%
    \fi
    \pgfsetfillcolor{black}%
    \pgfsetfading{shadowfading-\the\pgfbs@fading@count}%
       {\pgftransformshift{\pgfpoint{\pgfbs@midx}{\pgfbs@midy}}}%
    \pgfbs@usebbox{fill}%
    \pgfbs@restorebb
  },
}
\def\pgfbs@savebb{%
  \edef\pgfbs@restorebb{%
    \global\pgf@picminx=\the\pgf@picminx\relax
    \global\pgf@picmaxx=\the\pgf@picmaxx\relax
    \global\pgf@picminy=\the\pgf@picminy\relax
    \global\pgf@picmaxy=\the\pgf@picmaxy\relax
  }%
}
\def\restorebb{}%
\def\pgfbs@process@rounding#1#2{
  \expandafter\ifx\pgfbs@extra@rounding\pgfutil@empty%
    \pgfprocessround{#1}{#2}%
  \else%
    \pgfmathsetmacro\pgfbs@exrd@val{\pgfbs@extra@rounding}%
    \pgfbs@roundpath{#1}{\pgfbs@exrd@val pt}%
    \pgfsyssoftpath@getcurrentpath{\pgfbs@extraroundedpath}%
    \pgfprocessround{\pgfbs@extraroundedpath}{#2}%
  \fi%
}
\def\pgfbs@roundpath#1#2{%
  {%
    \def\pgfbs@rp@skipround{%
      \let\pgfbs@rp@possibleround\pgfbs@rp@insertround}%
    \def\pgfbs@rp@insertround{\pgfsyssoftpath@specialround{#2}{#2}}%
    \let\pgfbs@rp@possibleround\pgfbs@rp@insertround%
    %
    \def\pgfsyssoftpath@movetotoken##1##2{%
      \pgfsyssoftpath@moveto{##1}{##2}}%
    \def\pgfsyssoftpath@linetotoken##1##2{%
      \pgfbs@rp@possibleround\pgfsyssoftpath@lineto{##1}{##2}}%
    \def\pgfsyssoftpath@rectcornertoken##1##2##3##4##5{%
      \pgf@xa=##1\relax%
      \advance\pgf@xa by##4%
      \pgf@ya=##2\relax%
      \advance\pgf@ya by##5%
      \pgfsyssoftpath@moveto{##1}{##2}%
      \pgfbs@rp@possibleround%
      \pgfsyssoftpath@lineto{\the\pgf@xa}{##2}%
      \pgfbs@rp@possibleround%
      \pgfsyssoftpath@lineto{\the\pgf@xa}{\the\pgf@ya}%
      \pgfbs@rp@possibleround%
      \pgfsyssoftpath@lineto{##1}{\the\pgf@ya}%
      \pgfbs@rp@possibleround%
      \pgfsyssoftpath@closepath}%
    \def\pgfsyssoftpath@curvetosupportatoken%
       ##1##2##3##4##5##6##7##8{%
      \pgfbs@rp@possibleround%
      \pgfsyssoftpath@curveto{##1}{##2}{##4}{##5}{##7}{##8}}%
    \def\pgfsyssoftpath@closepathtoken##1##2{%
      \pgfbs@rp@possibleround\pgfsyssoftpath@closepath}%
    \def\pgfsyssoftpath@specialroundtoken##1##2{%
      \pgfmathsetmacro\pgfbs@rp@ra{max(##1,#2)}%
      \pgfmathsetmacro\pgfbs@rp@rb{max(##2,#2)}%
      \pgfsyssoftpath@specialround%
          {\pgfbs@rp@ra pt}{\pgfbs@rp@rb pt}%
      \let\pgfbs@rp@possibleround\pgfbs@rp@skipround%
    }
    #1%
  }
}
\def\pgfbs@compute@shadow@bbox{%
  \edef\pgfbs@minx{\the\pgf@pathminx}%
  \edef\pgfbs@miny{\the\pgf@pathminy}%
  \edef\pgfbs@maxx{\the\pgf@pathmaxx}%
  \edef\pgfbs@maxy{\the\pgf@pathmaxy}%
  \pgfmathsetmacro\pgfbs@midx{0.5*(\pgfbs@minx + \pgfbs@maxx)}%
  \pgfmathsetmacro\pgfbs@midy{0.5*(\pgfbs@miny + \pgfbs@maxy)}%
  \pgfmathsetmacro\pgfbs@minx{\pgfbs@minx - 2*\pgfbs@radius}%
  \pgfmathsetmacro\pgfbs@miny{\pgfbs@miny - 2*\pgfbs@radius}%
  \pgfmathsetmacro\pgfbs@maxx{\pgfbs@maxx + 2*\pgfbs@radius}%
  \pgfmathsetmacro\pgfbs@maxy{\pgfbs@maxy + 2*\pgfbs@radius}%
  \pgfmathsetmacro\pgfbs@wd{\pgfbs@maxx - \pgfbs@minx}%
  \pgfmathsetmacro\pgfbs@ht{\pgfbs@maxy - \pgfbs@miny}%
  \pgfsyssoftpath@setcurrentpath\pgfutil@empty%
  \pgfsyssoftpath@rect{\pgfbs@minx pt}{\pgfbs@miny pt}%
                      {\pgfbs@wd pt}{\pgfbs@ht pt}%
  \pgfsyssoftpath@getcurrentpath{\pgfbs@shadow@bbox}%
  \pgfsyssoftpath@setcurrentpath\pgfutil@empty%
}

\def\pgfbs@set@fading@pic@bbox{
  \global\pgf@picminx=\pgfbs@minx pt\relax
  \global\pgf@picminy=\pgfbs@miny pt\relax
  \global\pgf@picmaxx=\pgfbs@maxx pt\relax
  \global\pgf@picmaxy=\pgfbs@maxy pt\relax
}
\def\pgfbs@usefadepath#1{%
  \pgfsyssoftpath@setcurrentpath{\pgfbs@fadepath}%
  \pgfsyssoftpath@flushcurrentpath%
  \pgfusepath{#1}%
}
\def\pgfbs@usebbox#1{%
  \pgfsyssoftpath@setcurrentpath{\pgfbs@shadow@bbox}%
  \pgfsyssoftpath@flushcurrentpath%
  \pgfusepath{#1}%
}
\def\pgfbs@usefadeandbbox#1{%
  \let\pgfbs@temppath\pgfbs@fadepath
  \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\pgfbs@temppath\expandafter\expandafter\expandafter{\expandafter\pgfbs@temppath\pgfbs@shadow@bbox}%
  \pgfsyssoftpath@setcurrentpath{\pgfbs@temppath}%
  \pgfsyssoftpath@flushcurrentpath%
  \pgfusepath{#1}%
}
\def\pgfbs@apply@canvas@transform{
  \pgflowlevel{
    \pgftransformshift{\pgfpoint{\pgfbs@midx}{\pgfbs@midy}}
    \pgftransformscale{\pgfkeysvalueof{/tikz/shadow scale}}
    \pgftransformshift{\pgfpoint%
      {\pgfkeysvalueof{/tikz/shadow xshift}-\pgfbs@midx}
      {\pgfkeysvalueof{/tikz/shadow yshift}-\pgfbs@midy}
    }
  }
}
\def\pgfbs@paint@fading{
  \pgfpicture
  \pgfsetbaseline{\pgf@picminy}%
    % fix bounding box.
    \pgfbs@set@fading@pic@bbox
    % compute increments for line width and opacity
    \pgfmathsetmacro\pgfbs@op@step{50/\pgfbs@steps}
    \pgfmathsetmacro\pgfbs@wth@step{4*\pgfbs@radius/(2*\pgfbs@steps-1)}
    % draw the outer part of the fading,
    % starting with lightest, outermost line
    \pgfsetroundjoin
    \pgfmathsetmacro\pgfbs@max@i{\pgfbs@steps-2}
    \pgfmathsetmacro\pgfbs@wth{2*\pgfbs@radius}
    \pgfmathsetmacro\pgfbs@op{100-0.5*\pgfbs@op@step}
    \foreach \pgfbs@i in {0,...,\pgfbs@max@i} {
      \pgfsetlinewidth{\pgfbs@wth pt}
      \pgfsetstrokecolor{black!\pgfbs@op!pstb@shadow@color}
      \pgfbs@usefadepath{stroke}
      \pgfmathsetmacro\pgfbs@wth{\pgfbs@wth-\pgfbs@wth@step}
      \global\let\pgfbs@wth=\pgfbs@wth
      \pgfmathsetmacro\pgfbs@op{\pgfbs@op-\pgfbs@op@step}
      \global\let\pgfbs@op=\pgfbs@op
    }
    % clip to inside of path
    \scope
    \pgfbs@usefadepath{clip}
    % fill inside with final darkest shadow color
    \pgfsetfillcolor{pstb@shadow@color}
    \pgfbs@usebbox{fill}
    % draw the inner part of the fading,
    % starting with the darkest, innermost line
    \pgfmathsetmacro\pgfbs@wth{2*\pgfbs@radius}
    \pgfmathsetmacro\pgfbs@op{0.5*\pgfbs@op@step}
    \foreach \pgfbs@i in {0,...,\pgfbs@max@i} {
      \pgfsetlinewidth{\pgfbs@wth pt}
      \pgfsetstrokecolor{black!\pgfbs@op!pstb@shadow@color}
      \pgfbs@usefadepath{stroke}
      \pgfmathsetmacro\pgfbs@wth{\pgfbs@wth-\pgfbs@wth@step}
      \global\let\pgfbs@wth=\pgfbs@wth
      \pgfmathsetmacro\pgfbs@op{\pgfbs@op+\pgfbs@op@step}
      \global\let\pgfbs@op=\pgfbs@op
    }
    \endscope
    % a final stroke to hide clip/antialiasing artifcats
    \pgfsetstrokecolor{black!50!pstb@shadow@color}
    \pgfsetlinewidth{0.5*\pgfbs@wth@step}
    \pgfbs@usefadepath{stroke}
  \endpgfpicture
}
\def\pgfbs@paint@invert@fading{
  \pgfpicture
  \pgfsetbaseline{\pgf@picminy}%
    % fix bounding box.
    \pgfbs@set@fading@pic@bbox
    % compute increments for line width and opacity
    \pgfmathsetmacro\pgfbs@op@step{50/\pgfbs@steps}
    \pgfmathsetmacro\pgfbs@wth@step{4*\pgfbs@radius/(2*\pgfbs@steps-1)}
    % draw the outer part of the fading,
    % starting with lightest, outermost line
    \pgfsetroundjoin
    \pgfmathsetmacro\pgfbs@max@i{\pgfbs@steps-2}
    \pgfmathsetmacro\pgfbs@wth{2*\pgfbs@radius}
    \pgfmathsetmacro\pgfbs@op{0.5*\pgfbs@op@step}
    \foreach \pgfbs@i in {0,...,\pgfbs@max@i} {
      \pgfsetlinewidth{\pgfbs@wth pt}
      \pgfsetstrokecolor{black!\pgfbs@op!pstb@shadow@color}
      \pgfbs@usefadepath{stroke}
      \pgfmathsetmacro\pgfbs@wth{\pgfbs@wth-\pgfbs@wth@step}
      \global\let\pgfbs@wth=\pgfbs@wth
      \pgfmathsetmacro\pgfbs@op{\pgfbs@op+\pgfbs@op@step}
      \global\let\pgfbs@op=\pgfbs@op
    }
    % clip to inside of path
    \scope
    \pgfseteorule
    \pgfbs@usefadeandbbox{clip}
    % fill inside with final darkest shadow color
    \pgfsetfillcolor{pstb@shadow@color}
    \pgfbs@usebbox{fill}
    \endscope
    \scope
    \pgfbs@usefadepath{clip}
    % draw the inner part of the fading,
    % starting with the darkest, innermost line
    \pgfmathsetmacro\pgfbs@wth{2*\pgfbs@radius}
    \pgfmathsetmacro\pgfbs@op{100-0.5*\pgfbs@op@step}
    \foreach \pgfbs@i in {0,...,\pgfbs@max@i} {
      \pgfsetlinewidth{\pgfbs@wth pt}
      \pgfsetstrokecolor{black!\pgfbs@op!pstb@shadow@color}
      \pgfbs@usefadepath{stroke}
      \pgfmathsetmacro\pgfbs@wth{\pgfbs@wth-\pgfbs@wth@step}
      \global\let\pgfbs@wth=\pgfbs@wth
      \pgfmathsetmacro\pgfbs@op{\pgfbs@op-\pgfbs@op@step}
      \global\let\pgfbs@op=\pgfbs@op
    }
    \endscope
    % a final stroke to hide clip/antialiasing artifcats
    \pgfsetstrokecolor{black!50!pstb@shadow@color}
    \pgfsetlinewidth{0.5*\pgfbs@wth@step}
    \pgfbs@usefadepath{stroke}
  \endpgfpicture
}
\endinput
%%
%% End of file `tikzlibraryshadows.blur.code.tex'.
