% Florian Sihler, 2022
% Licensed under GNU General Public License version 3
% https://opensource.org/licenses/gpl-3.0.html
\pingu@create@extra{glasses}{%
    glasses/.code               = \pingu@set@extra{glasses}{true}\pingu@color{glasses}{#1},
    glasses/.default            = pingu@black,
    glasses left fill/.code     = \pingu@color{glasses@fill@l}{#1},
    glasses right fill/.code    = \pingu@color{glasses@fill@r}{#1},
    glasses left opacity/.code  = \def\pingu@x@glasses@op@l{#1},
    glasses right opacity/.code = \def\pingu@x@glasses@op@r{#1},
    glasses fill/.style         = {/pingu/glasses left fill=#1, /pingu/glasses right fill=#1},
    glasses opacity/.style      = {/pingu/glasses left opacity=#1, /pingu/glasses right opacity=#1},
    glasses line width/.code    = \def\pingu@x@glasses@lw{#1},
    sunglasses/.forward to      = /pingu/sun glasses,
    glasses bend left/.code     = \def\pingu@x@glasses@bend@l{#1},
    glasses bend right/.code    = \def\pingu@x@glasses@bend@r{#1},
    glasses bend/.style         = {/pingu/glasses bend left=#1,/pingu/glasses bend right=#1},
    sun glasses/.style          = {/pingu/glasses, /pingu/glasses fill=#1},
    sun glasses/.default        = pingu@black,
}{glasses line width=1.125\p@,glasses fill=\@pingu@none,glasses opacity=.825,glasses bend left=32.5,glasses bend right=32.5}

\def\pingu@draw@ea@glasses{% fact: 1.33; modified first shift and ht
    \pingu@block[opacity=\pingu@x@glasses@op@l]{\pingu@color@glasses@fill@l} (\pingu@name-eye-left)++(-2.66mm,1.75mm) to[bend left=8] ++(5.586mm,0) to[out=-80,in=70] ++(-.266mm,-3.6mm) to[bend left=\pingu@x@glasses@bend@l] ++(-4.8545mm,\z@) to[out=135,in=-90] ++(-1.064mm,3.5mm) -- cycle;
    \pingu@block[opacity=\pingu@x@glasses@op@r]{\pingu@color@glasses@fill@r} (\pingu@name-eye-right)++(2.66mm,1.75mm) to[bend right=8] ++(-5.586mm,0) to[out=-100,in=110] ++(.266mm,-3.6mm) to[bend right=\pingu@x@glasses@bend@r] ++(4.8545mm,\z@) to[out=45,in=-90] ++(1.064mm,3.5mm) -- cycle;
    \pingu@draw[line width=\pingu@x@glasses@lw]{\pingu@color@glasses} [rounded corners=.25mm](\pingu@name-eye-left)++(-2.66mm,1.75mm) coordinate (\pingu@name-glasses-left-mid) to[bend left=8] ++(5.586mm,0) coordinate (\pingu@name-glasses-left-outer) to[out=-80,in=70] ++(-.266mm,-3.6mm) to[bend left=\pingu@x@glasses@bend@l] ++(-4.8545mm,\z@) to[out=135,in=-90] coordinate[pos=.9] (\pingu@name-glasses-left-mid-b) ++(-1.064mm,3.5mm) -- cycle;
    \pingu@draw[line width=\pingu@x@glasses@lw]{\pingu@color@glasses} [rounded corners=.25mm] (\pingu@name-eye-right)++(2.66mm,1.75mm) coordinate (\pingu@name-glasses-right-mid) to[bend right=8] ++(-5.586mm,0) coordinate (\pingu@name-glasses-right-outer) to[out=-100,in=110] ++(.266mm,-3.6mm) to[bend right=\pingu@x@glasses@bend@r] ++(4.8545mm,\z@) to[out=45,in=-90] coordinate[pos=.9] (\pingu@name-glasses-right-mid-b) ++(1.064mm,3.5mm) -- cycle;
    \pingu@draw[line width=\pingu@x@glasses@lw]{\pingu@color@glasses} (\pingu@name-glasses-right-mid) to[bend right=10] (\pingu@name-glasses-left-mid);
    \pingu@draw[line width=\pingu@x@glasses@lw]{\pingu@color@glasses} (\pingu@name-glasses-right-mid-b) to[bend left=20] (\pingu@name-glasses-left-mid-b);
    \scope
    \clip[use path=\pingu@upperpingu];
    \pingu@draw[line width=\pingu@x@glasses@lw]{\pingu@color@glasses}
    (\pingu@name-glasses-right-mid) to[bend right=8] ++(-5.586mm,0) -- ++(-5mm,.5mm);
    \pingu@draw[line width=\pingu@x@glasses@lw]{\pingu@color@glasses}
    (\pingu@name-glasses-left-mid) to[bend left=8] ++(5.586mm,0) -- ++(5mm,.5mm);
    \endscope
}
\pingu@create@extra{glassesround}{%
    glasses round/.code               = \pingu@set@extra{glassesround}{true}\pingu@color{glassesround}{#1},
    glasses round/.default            = pingu@black,
    glasses round left fill/.code     = \pingu@color{glassesround@fill@l}{#1},
    glasses round right fill/.code    = \pingu@color{glassesround@fill@r}{#1},
    glasses round fill/.style         = {/pingu/glasses round left fill=#1, /pingu/glasses round right fill=#1},
    glasses round left opacity/.code  = \def\pingu@x@glassesround@op@l{#1},
    glasses round right opacity/.code = \def\pingu@x@glassesround@op@r{#1},
    glasses round opacity/.style      = {/pingu/glasses round left opacity=#1, /pingu/glasses round right opacity=#1},
    glasses round left radius/.code  = \def\pingu@x@glassesround@r@l{#1},
    glasses round right radius/.code = \def\pingu@x@glassesround@r@r{#1},
    glasses round radius/.style      = {/pingu/glasses round left radius=#1, /pingu/glasses round right radius=#1},
    glasses round line width/.code    = \def\pingu@x@glassesround@lw{#1},
    sunglasses round/.forward to      = /pingu/sun glasses round,
    sun glasses round/.style          = {/pingu/glasses round, /pingu/glasses round fill=#1},
    sun glasses round/.default        = pingu@black,
    % todo: width/radius allow for different
}{glasses round line width=.75\p@,glasses round fill=\@pingu@none,glasses round opacity=.825,glasses round radius=3.15mm}
\def\pingu@draw@ea@glassesround{% fact: 1.33; modified first shift and ht
    \pingu@block[opacity=\pingu@x@glassesround@op@l]{\pingu@color@glassesround@fill@l} (\pingu@name-eye-left) circle [radius=\pingu@x@glassesround@r@l];
    \pingu@block[opacity=\pingu@x@glassesround@op@r]{\pingu@color@glassesround@fill@r} (\pingu@name-eye-right) circle [radius=\pingu@x@glassesround@r@r];
    \pingu@draw[line width=\pingu@x@glassesround@lw]{\pingu@color@glassesround} [rounded corners=.25mm](\pingu@name-eye-left) ++(150:\pingu@x@glassesround@r@l) coordinate (\pingu@name-glassesround-left-mid) arc (150:510:\pingu@x@glassesround@r@l);
    \pingu@draw[line width=\pingu@x@glassesround@lw]{\pingu@color@glassesround} [rounded corners=.25mm] (\pingu@name-eye-right) ++(30:\pingu@x@glassesround@r@r) coordinate (\pingu@name-glassesround-right-mid) arc (30:390:\pingu@x@glassesround@r@r);
    \pingu@draw[line width=\pingu@x@glassesround@lw]{\pingu@color@glassesround} (\pingu@name-glassesround-left-mid) to[bend right=30] (\pingu@name-glassesround-right-mid);
    \scope
    \clip[use path=\pingu@upperpingu];
    \pingu@draw[line width=\pingu@x@glassesround@lw]{\pingu@color@glassesround}
     (\pingu@name-glassesround-right-mid) arc(30:150:\pingu@x@glassesround@r@l) -- ++(-5mm,.65mm);
     \pingu@draw[line width=\pingu@x@glassesround@lw]{\pingu@color@glassesround}
     (\pingu@name-glassesround-left-mid) arc(150:30:\pingu@x@glassesround@r@r) -- ++(5mm,.65mm);
    \endscope
}
\pingu@create@extra{monocleleft}{%
    monocle left/.code              = \pingu@set@extra{monocleleft}{true}\pingu@color{monocleleft}{#1},
    monocle left/.default           = pingu@black,
    monocle left glass/.code        = \pingu@color{monocleleft@glass}{#1},
    monocle left fill/.forward to   = /pingu/monocle left glass,
    monocle left opacity/.code      = \def\pingu@x@monocleleft@opacity{#1},
    monocle left fill opacity/.forward to   = /pingu/monocle left opacity,
    monocle left string/.code       = \pingu@color{monocleleft@string}{#1},
    monocle left string length/.code= \def\pingu@x@monocleleft@string@l{#1},
    monocle left blob/.code         = \pingu@color{monocleleft@blob}{#1},
}{monocle left glass=pingu@blue,monocle left opacity=.155,monocle left string=\pingu@color@monocleleft,monocle left blob=\pingu@color@monocleleft,monocle left string length=5.55mm}

\def\pingu@draw@eb@monocle@l{%
    \pingu@block[/pingu/glow,opacity=\pingu@x@monocleleft@opacity]{\pingu@color@monocleleft@glass} (\pingu@name-eye-left) circle[radius=2mm];
    \pingu@draw[thin]{\pingu@color@monocleleft@string} (\pingu@name-eye-left)++(2mm,0)
    to[out=-75,in=100] ++(0,-\pingu@x@monocleleft@string@l);
    \pingu@block{\pingu@color@monocleleft@blob} (\pingu@name-eye-left)++(2mm,-\pingu@x@monocleleft@string@l) circle [radius=.65\p@];
    \pingu@draw[semithick]{\pingu@color@monocleleft} (\pingu@name-eye-left) circle[radius=2mm];
}
\pingu@create@extra{monocleright}{%
    monocle right/.code              = \pingu@set@extra{monocleright}{true}\pingu@color{monocleright}{#1},
    monocle right/.default           = pingu@black,
    monocle right glass/.code        = \pingu@color{monocleright@glass}{#1},
    monocle right fill/.forward to   = /pingu/monocle right glass,
    monocle right opacity/.code      = \def\pingu@x@monocleright@opacity{#1},
    monocle right fill opacity/.forward to   = /pingu/monocle right opacity,
    monocle right string/.code       = \pingu@color{monocleright@string}{#1},
    monocle right string length/.code= \def\pingu@x@monocleright@string@r{#1},
    monocle right blob/.code         = \pingu@color{monocleright@blob}{#1},
}{monocle right glass=pingu@blue,monocle right opacity=.155,monocle right string=\pingu@color@monocleright,monocle right blob=\pingu@color@monocleright,monocle right string length=5.55mm}
\def\pingu@draw@eb@monocle@r{%
    \pingu@block[/pingu/glow,opacity=\pingu@x@monocleright@opacity]{\pingu@color@monocleright@glass} (\pingu@name-eye-right) circle[radius=2mm];
    \pingu@draw[thin]{\pingu@color@monocleright@string} (\pingu@name-eye-right)++(-2mm,0)
    to[out=-105,in=80] ++(0,-\pingu@x@monocleright@string@r);
    \pingu@block{\pingu@color@monocleright@blob} (\pingu@name-eye-right)++(-2mm,-\pingu@x@monocleright@string@r) circle [radius=.65\p@];
    \pingu@draw[semithick]{\pingu@color@monocleright} (\pingu@name-eye-right) circle[radius=2mm];
}