% style `glitch': jagged shards that merge into their neighbours, with two
% displaced ghosts behind them; tunables \fancyqr@glitch@tear,
% \fancyqr@glitch@radius, \fancyqr@glitch@spread, \fancyqr@glitch@bleed,
% \fancyqr@glitch@detach, \fancyqr@glitch@gap, \fancyqr@glitch@ghost
\@ifundefined{fancyqr@glitch@tear}{\def\fancyqr@glitch@tear{.26}}{}%
\@ifundefined{fancyqr@glitch@radius}{\def\fancyqr@glitch@radius{.44}}{}%
\@ifundefined{fancyqr@glitch@spread}{\def\fancyqr@glitch@spread{.34}}{}%
\@ifundefined{fancyqr@glitch@bleed}{\def\fancyqr@glitch@bleed{.34}}{}%
\@ifundefined{fancyqr@glitch@detach}{\def\fancyqr@glitch@detach{.3}}{}%
\@ifundefined{fancyqr@glitch@gap}{\def\fancyqr@glitch@gap{.06}}{}%
\@ifundefined{fancyqr@glitch@ghost}{\def\fancyqr@glitch@ghost{26}}{}%
% how far the shard reaches towards a neighbour: the full bleed, or a gap if
% this side tore off
\def\fancyqr@glitch@reach#1#2{%
\edef#1{\fpeval{#2=0 ? 0 : (rand()<\fancyqr@glitch@detach
   ? -\fancyqr@glitch@gap : \fancyqr@glitch@bleed)}}%
}%
\def\fancyqr@glitch@vertex{%
\edef\@fq@r{\fpeval{\fancyqr@glitch@radius+\fancyqr@glitch@spread*rand()}}%
\edef\@fq@x{\fpeval{.5+\@fq@r*cosd(\@tempcnta)}}%
\edef\@fq@y{\fpeval{.5+\@fq@r*sind(\@tempcnta)}}%
\edef\@fq@x{\fpeval{\@fq@x+(\@fq@x>.5 ? \fancyqr@glitch@rr : -\fancyqr@glitch@rl)}}%
\edef\@fq@y{\fpeval{\@fq@y+(\@fq@y>.5 ? \fancyqr@glitch@ru : -\fancyqr@glitch@rd)}}%
}%
\def\fancyqr@glitch@shard#1#2#3#4{%
\roundjoin\roundcap
\fancyqr@glitch@reach\fancyqr@glitch@ru{#1}\fancyqr@glitch@reach\fancyqr@glitch@rl{#2}%
\fancyqr@glitch@reach\fancyqr@glitch@rr{#3}\fancyqr@glitch@reach\fancyqr@glitch@rd{#4}%
\@tempcnta=\z@ \fancyqr@glitch@vertex
\moveto(\@fq@x,\@fq@y)%
\loop\advance\@tempcnta by 45
   \ifnum\@tempcnta<360\relax \fancyqr@glitch@vertex\lineto(\@fq@x,\@fq@y)\fi
\ifnum\@tempcnta<360\relax\repeat
\closepath\fillpath
}%
\def\fancyqr@glitch@ghosttile#1#2#3#4#5#6{%
\put(\fpeval{#1\fancyqr@glitch@tear*rand()},\fpeval{.4*\fancyqr@glitch@tear*(rand()-.5)}){%
   \color{.!#2}\fancyqr@glitch@shard{#3}{#4}{#5}{#6}}%
}%
\def\fancyqr@glitch@tile#1#2#3#4{%
\ifcase\fancyqr@pass\or
   \fancyqr@glitch@ghosttile-\fancyqr@glitch@ghost{#1}{#2}{#3}{#4}\or
   \fancyqr@glitch@ghosttile+{\fpeval{round(min(100,1.8*\fancyqr@glitch@ghost))}}{#1}{#2}{#3}{#4}\else
   \fancyqr@glitch@shard{#1}{#2}{#3}{#4}\fi
}%
\FancyQrSidePatterns\fancyqr@glitch@tile
\FancyQrPasses{3}
