% \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{beamerinnerthemetrigon}[2021/03/25 v0.5.0 Trigon inner theme]
%</package>
% \fi
% \CheckSum{0}
% \StopEventually{}
% \iffalse
%<*package>
% ------------------------------------------------------------------------- \fi
%
% \subsection{\themename inner theme}
%
% A |beamer| inner theme dictates the style of the frame elements traditionally
% set in the ``body'' of each slide. These include:
%
% \begin{itemize}
%   \item title, part, and section pages;
%   \item main background elements;
%   \item itemize, enumerate, and description environments;
%   \item block environments including theorems and proofs;
%   \item figures and tables; and
%   \item footnotes and plain text.
% \end{itemize}
%
%
% \subsubsection{Package dependencies}
%
%    \begin{macrocode}
\RequirePackage{pgfopts}
\RequirePackage{tikz}
\usetikzlibrary{calc,3d}
%    \end{macrocode}
%
%
% \subsubsection{Definitions}
% We define the command |\logobig| to specify the logo that needs to be applied
% displayed on the title frame.
%    \begin{macrocode}
\def\logbig{}
\newcommand\biglogo[1]{
	\def\logbig{#1}
}
%    \end{macrocode}
%
%
% \subsubsection{Options}
%
% \begin{macro}{sectionpage}
%   Controls whereas a slide with the section title should be inserted at the
%   beginning of the section or not.
%    \begin{macrocode}
\pgfkeys{
	/trigon/inner/sectionpage/.cd,
	.is choice,
	none/.code=\trigon@disablesectionpage,
	simple/.code=\trigon@enablesectionpage
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{slidestyle}
%   Controls the layout that should be used for regular slides.
%    \begin{macrocode}
\def\slidestyle{}
\pgfkeys{
	/trigon/inner/slidestyle/.cd,
	.is choice,
	blank/.code=\def\slidestyle{blank},
	style1/.code=\def\slidestyle{smallcornertriangle},
	cyber/.code=\def\slidestyle{cyberbottom}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{titlestyle}
%   Controls the layout that should be used for the title page.
%    \begin{macrocode}
\def\titlestyle{}
\pgfkeys{
	/trigon/inner/titlestyle/.cd,
	.is choice,
	plain/.code=\def\titlestyle{bottomtrianglescolor},
	style1/.code=\def\titlestyle{titlesmallimage},
	style2/.code=\def\titlestyle{titlebigimage}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{sectionstyle}
%   Controls the layout that should be used for the title page.
%    \begin{macrocode}
\def\sectionstyle{}
\pgfkeys{
	/trigon/inner/sectionstyle/.cd,
	.is choice,
	plain/.code=\def\sectionstyle{bottomtrianglescolor},
	style1/.code=\def\sectionstyle{bigtriangles},
	style2/.code=\def\sectionstyle{lefttriangles},
	style3/.code=\def\sectionstyle{bottomtrianglesbw}
}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\trigon@inner@setdefaults}
%   Sets default values for the inner theme options.
%    \begin{macrocode}
\newcommand{\trigon@inner@setdefaults}{
	\pgfkeys{/trigon/inner/.cd,
		sectionpage=simple,
		slidestyle=blank,
		titlestyle=style2,
		sectionstyle=plain
	}
}
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{Backgrounds}
%
% First of all, we define a few commands in order easily create the triangles
% used as the main design elements of the theme. All these are defined with
% respect to the |\paperwidth| and |\paperheight| of the document, so that it
% fits the different aspect ratio possible.
%
% \begin{macro}{\leftTriangle}
%   Defines a triangle with the base on the left side (pointing right).
%    \begin{macrocode}
\newcommand{\leftTriangle}[2]{
	(#1,#2)
	-- (0,{#2 + tan(30)*#1} )
	-- (0,{#2 - tan(30)*#1} )
	-- cycle;
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\righTriangle}
%   Defines a triangle with the base on the right side (pointing left).
%    \begin{macrocode}
\newcommand{\rightTriangle}[2]{
	(#1,#2)
	-- (\the\paperwidth,{#2 + tan(30)*(\the\paperwidth-#1)} )
	-- (\the\paperwidth,{#2 - tan(30)*(\the\paperwidth-#1)} )
	-- cycle;
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\topTriangle}
%   Defines a triangle with the base on the bottom side (pointing top).
%    \begin{macrocode}
\newcommand{\topTriangle}[2]{
	(#1,#2)
	-- ({#1 - tan(60)*#2},0)
	-- ({#1 + tan(60)*#2},0)
	-- cycle;
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\leftColorTriangle}
%   Defines a colored triangle with the base on the left side (pointing right).
%    \begin{macrocode}
\newcommand{\leftColorTriangle}[3]{
	\path[fill=#3]
	\leftTriangle{#1}{#2}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\righColorTriangle}
%   Defines a colored triangle with the base on the right side (pointing left).
%    \begin{macrocode}
\newcommand{\rightColorTriangle}[3]{
	\path[fill=#3]
	\rightTriangle{#1}{#2}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\topColorTriangle}
%   Defines a colored triangle with the base on the bottom side (pointing top).
%    \begin{macrocode}
\newcommand{\topColorTriangle}[3]{
	\path[fill=#3]
	\topTriangle{#1}{#2}
}
%    \end{macrocode}
% \end{macro}
%
%
% We then define the different backgrounds choices.
%
% \begin{macro}{blank}
%   Blank slide background.
%    \begin{macrocode}
\defbeamertemplate{background}{blank}{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{smallcornertriangle}
%   Background with a small triangle in bottom left corner (used for normal
%   frames when the appropriate option is selected).
%    \begin{macrocode}
\defbeamertemplate{background}{smallcornertriangle}{
	\begin{tikzpicture}[blend group=multiply]
		\useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight);
		\leftColorTriangle{0.62\paperwidth}{0}{tGrey!30}
	\end{tikzpicture}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{cyberbottom}
%   Background with "mesh" effect on the bottom left corner (used for normal
%   frames when the appropriate option is selected).
%    \begin{macrocode}
\defbeamertemplate{background}{cyberbottom}{
\tikzstyle{cyberVertex}=[scale=1,draw=tGrey!60,circle,fill=white]
\tikzstyle{cyberVertex2}=[scale=0.5,draw=tGrey!60,circle,fill=tGrey!60]
\tikzstyle{cyberEdge} = [draw,color=tGrey!60]
\begin{tikzpicture}[blend group=multiply]
	\useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight);
	\foreach \pos/\name in {
			{(-0.05\paperwidth,0.75\paperheight)/0},
			{(0.02\paperwidth,0.53\paperheight)/1},
			{(-0.04\paperwidth,0.38\paperheight)/2},
			{(0.08\paperwidth,0.40\paperheight)/3},
			{(0.052\paperwidth,0.21\paperheight)/5},
			{(0.24\paperwidth,0.26\paperheight)/6},
			{(-0.08\paperwidth,-0.06\paperheight)/7},
			{(0.12\paperwidth,0.07\paperheight)/8},
			{(0.2\paperwidth,0.-0.08\paperheight)/9},
			{(0.38\paperwidth,0.06\paperheight)/10},
			{(0.56\paperwidth,-0.08\paperheight)/11}}
	\node[cyberVertex] (\name) at \pos {};
	\foreach \pos/\name in {
			{(-0.05\paperwidth,0.75\paperheight)/0},
			{(0.02\paperwidth,0.53\paperheight)/1},
			{(-0.04\paperwidth,0.38\paperheight)/2},
			{(0.08\paperwidth,0.40\paperheight)/3},
			{(0.052\paperwidth,0.21\paperheight)/5},
			{(0.24\paperwidth,0.26\paperheight)/6},
			{(-0.08\paperwidth,-0.06\paperheight)/7},
			{(0.12\paperwidth,0.07\paperheight)/8},
			{(0.2\paperwidth,0.-0.08\paperheight)/9},
			{(0.38\paperwidth,0.06\paperheight)/10},
			{(0.56\paperwidth,-0.08\paperheight)/11}}
	\node[cyberVertex2] (\name_2) at \pos {};
	\foreach \source/ \dest in
		{0/1,1/2,1/3,2/3,2/5,3/5,3/6,5/6,5/7,7/8,5/8,8/6,8/9,6/9,9/10,10/6,10/11}
	\path[cyberEdge] (\source) --  (\dest);
\end{tikzpicture}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{titlebigimage}
%   Background for title page with a big image in the top left corener.
%    \begin{macrocode}
\defbeamertemplate{background}{titlebigimage}{
	\begin{tikzpicture}
		\useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight);
		\begin{scope}[blend group=multiply]
			\path[fill=tPrim]\leftTriangle{0.5\paperwidth}{0};
			\topColorTriangle{0.73\paperwidth}{0.70\paperheight}{tGrey!30};
			\ifx\inserttitlegraphic\@empty
				\leftColorTriangle{0.73\paperwidth}{0.70\paperheight}{tPrim}
			\else
				\path[clip]\leftTriangle{0.73\paperwidth}{0.70\paperheight};
				\node[anchor=north west, inner sep=0pt, outer sep=0pt] at (0,\the\paperheight) {\inserttitlegraphic};
			\fi
		\end{scope}
		\path[fill=white]\rightTriangle{0.45\paperwidth}{\the\paperheight};
		\ifx\logbig\@empty \else
			\node[anchor=north east,inner sep=0mm] at
			(.96*\the\paperwidth,.96*\the\paperheight) {\includegraphics[width=0.28\textwidth]{\logbig}};
		\fi
	\end{tikzpicture}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{titlesmallimage}
%   Background for the titlepage with a small image in the top left corner.
%    \begin{macrocode}
\defbeamertemplate{background}{titlesmallimage}{
	\begin{tikzpicture}[blend group=multiply]
		\useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight);
		\leftColorTriangle{0.58\paperwidth}{0}{tGrey!30}
		\ifx\logbig\@empty \else
			\node[anchor=north east,inner sep=0mm] at (.94*\the\paperwidth,.94*\the\paperheight) {\includegraphics[width=0.33\textwidth]{\logbig}};
		\fi
		\ifx\inserttitlegraphic\@empty
			\leftColorTriangle{0.58\paperwidth}{\the\paperheight}{tPrim}
		\else
			\path[clip]\leftTriangle{0.58\paperwidth}{\the\paperheight};
			\node[anchor=north west, inner sep=0pt, outer sep=0pt] at (0,\the\paperheight) {\inserttitlegraphic};
		\fi
	\end{tikzpicture}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{bottomtrianglescolor}
%   Background for title/section pages with two colored triangles in the
%   bottom.
%    \begin{macrocode}
\defbeamertemplate{background}{bottomtrianglescolor}{
	\begin{tikzpicture}[blend group=multiply]
		\useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight);
		\leftColorTriangle{0.62\paperwidth}{0}{tPrim}
		\rightColorTriangle{0.38\paperwidth}{0}{tSec}
	\end{tikzpicture}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{bottomtrianglesbw}
%   Background for title/section pages with two black and white triangles in
%   the bottom.
%    \begin{macrocode}
\defbeamertemplate{background}{bottomtrianglesbw}{
	\begin{tikzpicture}[blend group=multiply]
		\useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight);
		\leftColorTriangle{0.62\paperwidth}{0}{tPrim}
		\rightColorTriangle{0.38\paperwidth}{0}{tGrey}
	\end{tikzpicture}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{bigtriangles}
%   Background for section pages with a big triangle on the left.
%    \begin{macrocode}
\defbeamertemplate{background}{bigtriangles}{
	\begin{tikzpicture}[blend group=multiply]
		\useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight);
		\leftColorTriangle{0.80\paperwidth}{0.62\paperheight}{tPrim}
		\rightColorTriangle{0.68\paperwidth}{0.58\paperheight}{tGrey}
	\end{tikzpicture}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{lefttriangles}
%   Background for section pages with small triangles on the left.
%    \begin{macrocode}
\defbeamertemplate{background}{lefttriangles}{
	\begin{tikzpicture}[blend group=multiply]
		\useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight);
		\leftColorTriangle{0.52\paperwidth}{\the\paperheight}{tPrim}
		\leftColorTriangle{0.775\paperwidth}{0}{tGrey}
	\end{tikzpicture}
}
%    \end{macrocode}
% \end{macro}
%
% Before anything, the regular frame background is selected.
%    \begin{macrocode}
\setbeamertemplate{background}[\slidestyle]
%    \end{macrocode}
%
% Finally, we need to set the backgrounds properly before creating the different
% frames, create the special frames (title, section) and restore the regular
% background afterwards.
%
% \begin{macro}{\titleframe}
%   Sets the titleframe.
%    \begin{macrocode}
\newcommand{\titleframe}{
	\setbeamertemplate{title page}[\titlestyle]
	\setbeamertemplate{background}[\titlestyle]
	\frame[plain,noframenumbering]{\titlepage}
	\setbeamertemplate{background}[\slidestyle]
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\sectionframe}
%   Sets the titleframe.
%    \begin{macrocode}
\newcommand{\sectionframe}{
	\setbeamertemplate{section page}[\sectionstyle]
	\setbeamertemplate{background}[\sectionstyle]
	\frame[plain,noframenumbering]{\sectionpage}
	\setbeamertemplate{background}[\slidestyle]
}
\newcommand{\trigon@disablesectionpage}{
	\AtBeginSection{
		% intentionally empty
	}
}
\newcommand{\trigon@enablesectionpage}{
	\AtBeginSection{
		\sectionframe
	}
}
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{Layout}
% The following macros define the proper position of the various elements of the
% frame, so the fit nicely with the different background selected.
%
% \begin{macro}{titlebigimage}
%   Place the text on the title frame with a big image on the top left side.
%    \begin{macrocode}
\defbeamertemplate{title page}{titlebigimage}
{
	\vskip140pt
	\begin{flushright}
		\begin{minipage}[t][][c]{0.5\textwidth}%
			\centering
			\usebeamerfont{title}\usebeamercolor[fg]{title}
			\inserttitle\par
		\end{minipage}
		\ifx \insertsubtitle\@empty
		\else
			\vskip15pt
			\begin{minipage}[t][][c]{0.5\textwidth}%
				\centering
				\usebeamerfont{subtitle}\insertsubtitle\par%
			\end{minipage}
		\fi
		\vskip15pt
		\begin{minipage}[t][][c]{0.5\textwidth}%
			\centering
			\usebeamerfont{author}\insertauthor%
			\vskip10pt
			\usebeamerfont{date}\insertdate%
		\end{minipage}
	\end{flushright}
	\vfill
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{titlesmallimage}
%   Place the text on the title frame with a small image on the top left side.
%    \begin{macrocode}
\defbeamertemplate{title page}{titlesmallimage}
{
	\vskip140pt%
	\begin{beamercolorbox}[wd=\textwidth,sep=4pt]{title page header}
		\usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle\par%
	\end{beamercolorbox}%
	\ifx \insertsubtitle\@empty
	\else
		\vskip8pt
		\begin{beamercolorbox}[wd=\textwidth,sep=4pt]{subtitle page header}
			\usebeamerfont{subtitle}\insertsubtitle\par%
		\end{beamercolorbox}%
	\fi
	\vskip10pt
	\begin{beamercolorbox}[wd=\textwidth,sep=4pt]{author}
		\usebeamerfont{author}\insertauthor%
	\end{beamercolorbox}
	\vskip2pt%
	\begin{beamercolorbox}[wd=\textwidth,sep=4pt]{date}
		\usebeamerfont{date}\insertdate%
	\end{beamercolorbox}
	\vfill
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{bottomtrianglescolor}
%   Place the text on the title frame with two triangles on the bottom.
%    \begin{macrocode}
\defbeamertemplate{title page}{bottomtrianglescolor}
{
	\vskip0pt
	\begin{center}
		\begin{minipage}[t][][t]{\textwidth}
			\centering%
			\ifx\logbig\@empty \else
				\includegraphics[height=0.15\textheight]{\logbig}
			\fi
		\end{minipage}
		\vskip15pt
		\begin{minipage}[t][][c]{\textwidth}%
			\centering
			\usebeamerfont{title}\usebeamercolor[fg]{title}
			\inserttitle\par
		\end{minipage}
		\ifx \insertsubtitle\@empty
		\else
			\vskip15pt
			\begin{minipage}[t][][c]{\textwidth}%
				\centering
				\usebeamerfont{subtitle}\insertsubtitle\par%
			\end{minipage}
		\fi
		\vskip20pt
		\begin{minipage}[t][][c]{0.5\textwidth}%
			\centering
			\usebeamerfont{author}\insertauthor\\[0.3cm]%
			\usebeamerfont{date}\insertdate
		\end{minipage}
	\end{center}
	\vfill
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{bottomtrianglescolor}
%   Place the text on the section frame with two colored triangles on the
%   bottom.
%    \begin{macrocode}
\defbeamertemplate{section page}{bottomtrianglescolor}
{
	\vskip40pt
	\begin{center}
		\begin{minipage}[t][][c]{\textwidth}%
			\centering
			\usebeamerfont{section title}\usebeamercolor[fg]{title}
			\insertsectionhead\par
		\end{minipage}
	\end{center}
	\vfill
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{bottomtrianglesbw}
%   Place the text on the section frame with two black and white triangles on
%   the bottom.
%    \begin{macrocode}
\defbeamertemplate{section page}{bottomtrianglesbw}
{
	\vskip40pt
	\begin{center}
		\begin{minipage}[t][][c]{\textwidth}%
			\centering
			\usebeamerfont{section title}\usebeamercolor[fg]{title}
			\insertsectionhead\par
		\end{minipage}
	\end{center}
	\vfill
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{bigtriangles}
%   Place the text on the section frame with two big triangles.
%    \begin{macrocode}
\defbeamertemplate{section page}{bigtriangles}
{
	\vskip200pt
	\begin{flushright}
		\begin{minipage}[t]{0.62\textwidth}%7
			\usebeamerfont{section title}\usebeamercolor[fg]{title}
			\raggedleft
			\insertsectionhead\par
		\end{minipage}
	\end{flushright}
	\vfill
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{lefttriangles}
%   Place the text on the section frame with two small left triangles.
%    \begin{macrocode}
\defbeamertemplate{section page}{lefttriangles}
{
	\vskip25pt
	\begin{beamercolorbox}[wd=\textwidth,leftskip=100pt,sep=4pt]{section page header}
		\usebeamerfont{section title}\usebeamercolor[fg]{title}
		\insertsectionhead\par
	\end{beamercolorbox}%
	\vfill
}
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{Lists and floats}
%
%    \begin{macrocode}
\setbeamertemplate{caption label separator}{: }
\setbeamertemplate{caption}[numbered]
%    \end{macrocode}
%
%
% \subsubsection{Margins}
% The margins are defined as
%    \begin{macrocode}
\setbeamersize{text margin left=.05\paperwidth, text margin right=.05\paperwidth}
%    \end{macrocode}
%
% \subsubsection{Process package options}
%
%    \begin{macrocode}
\trigon@inner@setdefaults
\ProcessPgfPackageOptions{/trigon/inner}
%    \end{macrocode}
%
% \iffalse
%</package>
% \fi
% \Finale
\endinput
