% \iffalse meta-comment -------------------------------------------------------
% Copyright (C) 2021 Thomas Lambert <trigon@thl.ovh>
% Other contributors to this theme are listed here:
%     https://gitlab.com/thlamb/beamertheme-trigon/-/graphs/master
%
% The original template was heavily inspired by Metropolis from Matthias
% Vogelgesang.
%
% License CC-BY-SA 4.0
% This work is licensed under a Creative Commons Attribution-ShareAlike 4.0
% International License (https://creativecommons.org/licenses/by-sa/4.0/)
% ------------------------------------------------------------------------- \fi
% \iffalse
%<*package>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{beamerfontthemetrigon}[2021/09/06 v0.6.0 Trigon font theme]
%</package>
% \fi
% \CheckSum{0}
% \StopEventually{}
% \iffalse
%<*package>
% ------------------------------------------------------------------------- \fi
%
% \subsection{\themename font theme}
% A |beamer| font theme sets the style of the font used in the document.
%
%
% \subsubsection{Package dependencies}
%    \begin{macrocode}
\RequirePackage{pgfopts}
%    \end{macrocode}
%
%
%
% \subsubsection{Title format options}
%
% \begin{macro}{titleformat title}
%    Controls the format of the title.
%    \begin{macrocode}
\pgfkeys{
  /trigon/font/titleformat title/.cd,
    .is choice,
    regular/.code={%
      \let\trigon@titleformat\@empty%
      \setbeamerfont{title}{shape=\normalfont}%
    },
    smallcaps/.code={%
      \let\trigon@titleformat\@empty%
      \setbeamerfont{title}{shape=\scshape}%
    },
    allsmallcaps/.code={%
      \let\trigon@titleformat\lowercase%
      \setbeamerfont{title}{shape=\scshape}%
      \PackageWarning{beamerthemetrigon}{%
        Be aware that titleformat title=allsmallcaps can lead to problems%
      }
    },
    allcaps/.code={%
      \let\trigon@titleformat\uppercase%
      \setbeamerfont{title}{shape=\normalfont}
      \PackageWarning{beamerthemetrigon}{%
        Be aware that titleformat title=allcaps can lead to problems%
      }
    },
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{titleformat subtitle}
%    Controls the format of the subtitle.
%    \begin{macrocode}
\pgfkeys{
  /trigon/font/titleformat subtitle/.cd,
    .is choice,
    regular/.code={%
      \let\trigon@subtitleformat\@empty%
      \setbeamerfont{subtitle}{shape=\normalfont}%
    },
    smallcaps/.code={%
      \let\trigon@subtitleformat\@empty%
      \setbeamerfont{subtitle}{shape=\scshape}%
    },
    allsmallcaps/.code={%
      \let\trigon@subtitleformat\lowercase%
      \setbeamerfont{subtitle}{shape=\scshape}%
      \PackageWarning{beamerthemetrigon}{%
        Be aware that titleformat subtitle=allsmallcaps can lead to problems%
      }
    },
    allcaps/.code={%
      \let\trigon@subtitleformat\uppercase%
      \setbeamerfont{subtitle}{shape=\normalfont}%
      \PackageWarning{beamerthemetrigon}{%
        Be aware that titleformat subtitle=allcaps can lead to problems%
      }
    },
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{titleformat section}
%    Controls the format of the section title.
%    \begin{macrocode}
\pgfkeys{
  /trigon/font/titleformat section/.cd,
    .is choice,
    regular/.code={%
      \let\trigon@sectiontitleformat\@empty%
      \setbeamerfont{section title}{shape=\normalfont}%
    },
    smallcaps/.code={%
      \let\trigon@sectiontitleformat\@empty%
      \setbeamerfont{section title}{shape=\scshape}%
    },
    allsmallcaps/.code={%
      \let\trigon@sectiontitleformat\MakeLowercase%
      \setbeamerfont{section title}{shape=\scshape}%
      \PackageWarning{beamerthemetrigon}{%
        Be aware that titleformat section=allsmallcaps can lead to problems%
      }
    },
    allcaps/.code={%
      \let\trigon@sectiontitleformat\MakeUppercase%
      \setbeamerfont{section title}{shape=\normalfont}%
      \PackageWarning{beamerthemetrigon}{%
        Be aware that titleformat section=allcaps can lead to problems%
      }
    },
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{titleformat frame}
%    Controls the format of the frame title.
%    \begin{macrocode}
\pgfkeys{
  /trigon/font/titleformat frame/.cd,
    .is choice,
    regular/.code={%
      \let\trigon@frametitleformat\@empty%
      \setbeamerfont{frametitle}{shape=\normalfont}%
    },
    smallcaps/.code={%
      \let\trigon@frametitleformat\@empty%
      \setbeamerfont{frametitle}{shape=\scshape}%
    },
    allsmallcaps/.code={%
      \let\trigon@frametitleformat\MakeLowercase%
      \setbeamerfont{frametitle}{shape=\scshape}%
      \PackageWarning{beamerthemetrigon}{%
        Be aware that titleformat frame=allsmallcaps can lead to problems%
      }
    },
    allcaps/.code={%
      \let\trigon@frametitleformat\MakeUppercase%
      \setbeamerfont{frametitle}{shape=\normalfont}
      \PackageWarning{beamerthemetrigon}{%
        Be aware that titleformat frame=allcaps can lead to problems%
      }
    },
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{titleformat aliases}
%    Allows |titleformat title| et al. to be used in the |\usetheme|
%    declaration, where \LaTeX{} automatically removes all spaces.
%    \begin{macrocode}
\pgfkeys{
  /trigon/font/.cd,
  titleformattitle/.code=\pgfkeysalso{titleformat title=#1},
  titleformatsubtitle/.code=\pgfkeysalso{titleformat subtitle=#1},
  titleformatsection/.code=\pgfkeysalso{titleformat section=#1},
  titleformatframe/.code=\pgfkeysalso{titleformat frame=#1},
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\trigon@font@setdefaults}
%    Sets default values for font theme options.
%    \begin{macrocode}
\newcommand{\trigon@font@setdefaults}{
  \pgfkeys{/trigon/font/.cd,
    titleformat title=regular,
    titleformat subtitle=regular,
    titleformat section=regular,
    titleformat frame=regular,
  }
}
%    \end{macrocode}
% \end{macro}
%
% We first define hooks to change the case format of the titles.
%
%    \begin{macrocode}
\def\trigon@titleformat#1{#1}
\def\trigon@subtitleformat#1{#1}
\def\trigon@sectiontitleformat#1{#1}
\def\trigon@frametitleformat#1{#1}
%    \end{macrocode}
%
% To make the uppercase and lowercase macros work in the title, subtitle, etc.,
% we have to patch the appropriate |beamer| commands that set their values.
% This solution was suggested by Enrico Gregorio in an answer to
% \href{http://tex.stackexchange.com/questions/112526/}{this StackExchange
% question}.
%
%    \begin{macrocode}
\patchcmd{\beamer@title}%
  {\def\inserttitle{#2}}%
  {\def\inserttitle{\trigon@titleformat{#2}}}%
  {}%
  {\PackageError{beamerfontthemetrigon}{Patching title failed}\@ehc}
\patchcmd{\beamer@subtitle}%
  {\def\insertsubtitle{#2}}%
  {\def\insertsubtitle{\trigon@subtitleformat{#2}}}%
  {}%
  {\PackageError{beamerfontthemetrigon}{Patching subtitle failed}\@ehc}
\patchcmd{\sectionentry}
  {\def\insertsectionhead{#2}}
  {\def\insertsectionhead{\trigon@sectiontitleformat{#2}}}
  {}
  {\PackageError{beamerfontthemetrigon}{Patching section title failed}\@ehc}
\@tempswafalse
\patchcmd{\beamer@section}
  {\edef\insertsectionhead{\noexpand\hyperlink{Navigation\the\c@page}{\unexpanded{#1}}}}
  {\edef\insertsectionhead{\noexpand\hyperlink{Navigation\the\c@page}{%
    \noexpand\trigon@sectiontitleformat{\unexpanded{#1}}}}}
  {\@tempswatrue}
  {}
\patchcmd{\beamer@section}
  {\def\insertsectionhead{\hyperlink{Navigation\the\c@page}{#1}}}
  {\def\insertsectionhead{\hyperlink{Navigation\the\c@page}{%
    \trigon@sectiontitleformat{#1}}}}
  {\@tempswatrue}
  {}
\patchcmd{\beamer@section}
  {\protected@edef\insertsectionhead{\noexpand\hyperlink{Navigation\the\c@page}{#1}}}
  {\protected@edef\insertsectionhead{\noexpand\hyperlink{Navigation\the\c@page}{%
    \noexpand\trigon@sectiontitleformat{#1}}}}
  {\@tempswatrue}
  {}
\if@tempswa\else
  \PackageError{beamerfontthemetrigon}{Patching section title failed}\@ehc
\fi
\@tempswafalse
\patchcmd{\beamer@subsection}
  {\edef\insertsubsectionhead{\noexpand\hyperlink{Navigation\the\c@page}{\unexpanded{#1}}}}
  {\edef\insertsubsectionhead{\noexpand\hyperlink{Navigation\the\c@page}{%
    \noexpand\trigon@sectiontitleformat{\unexpanded{#1}}}}}
  {\@tempswatrue}
  {}
\patchcmd{\beamer@subsection}
  {\def\insertsubsectionhead{\hyperlink{Navigation\the\c@page}{#1}}}
  {\def\insertsubsectionhead{\hyperlink{Navigation\the\c@page}{%
    \trigon@sectiontitleformat{#1}}}}
  {\@tempswatrue}
  {}
\patchcmd{\beamer@subsection}
  {\protected@edef\insertsubsectionhead{\noexpand\hyperlink{Navigation\the\c@page}{#1}}}
  {\protected@edef\insertsubsectionhead{\noexpand\hyperlink{Navigation\the\c@page}{%
    \noexpand\trigon@sectiontitleformat{#1}}}}
  {\@tempswatrue}
  {}
\if@tempswa\else
  \PackageError{beamerfontthemetrigon}{Patching section title failed}\@ehc
\fi
%    \end{macrocode}
%
% Similarly, to make the |\MakeLowercase| and |\MakeUppercase| macros work in
% the frame title we have to patch |\beamer@@frametitle|.
%
%    \begin{macrocode}
\patchcmd{\beamer@@frametitle}
  {{%
      \gdef\insertframetitle{{#2\ifnum\beamer@autobreakcount>0\relax{}\space%
      \usebeamertemplate*{frametitle continuation}\fi}}%
    \gdef\beamer@frametitle{#2}%
    \gdef\beamer@shortframetitle{#1}%
    }}
  {{%
      \gdef\insertframetitle{{\trigon@frametitleformat{#2}\ifnum%
      \beamer@autobreakcount>0\relax{}\space%
      \usebeamertemplate*{frametitle continuation}\fi}}%
    \gdef\beamer@frametitle{#2}%
    \gdef\beamer@shortframetitle{#1}%
    }}
  {}
  {\PackageError{beamerfontthemetrigon}{Patching frame title failed}\@ehc}
%    \end{macrocode}
%
%
% \subsubsection{General font definitions}
%
%    \begin{macrocode}
\setbeamerfont{author}       {size=\normalsize}
\setbeamerfont{title}        {size=\LARGE,series=\bfseries}
\setbeamerfont{section title}{size=\LARGE,series=\mdseries}
\setbeamerfont{date}         {size=\small}
\setbeamerfont*{subtitle}     {size=\Large}
\setbeamerfont{frametitle}   {size=\LARGE}
\setbeamerfont{framesubtitle}{size=\large}

\setbeamerfont{alerted text} {size=\normalsize,series=\bfseries}
\setbeamerfont{block title}{size=\normalsize,series=\bfseries}
\setbeamerfont{block title alerted}{size=\normalsize,series=\bfseries}

\setbeamerfont{section in toc}{size=\Large}
\setbeamerfont{subsection in toc}{size=\large}
\setbeamerfont{page number in head/foot}{size=\scriptsize}

\setbeamerfont{description item}{series=\bfseries}
\setbeamerfont{caption}{size=\small}
\setbeamerfont{caption name}{series=\bfseries}
%   \end{macrocode}
%
% \subsubsection{Process package options}
%
%    \begin{macrocode}
\trigon@font@setdefaults
\ProcessPgfPackageOptions{/trigon/font}
%    \end{macrocode}
%
% \iffalse
%</package>
% \fi
% \Finale
\endinput
