% \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}[2022/03/19 v0.6.4 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
