% Author: Nelson Lago
% This file is distributed under the MIT Licence

\ProvidesPackage{beamerthemeimeusp}[2018/10/16 v1.0 IME/USP Beamer theme]

% Caso LaTeX faça alguma substituição de fontes, vamos garantir que ele
% use Latin Modern e não outra versão das fontes Computer Modern.
\RequirePackage{lmodern}
\RequirePackage{fix-cm}

\RequirePackage{etoolbox}

\RequirePackage{calc}

\usetheme[sectionpage=progressbar,subsectionpage=none,numbering=fraction,progressbar=frametitle]{metropolis}

\usefonttheme{professionalfonts}

% Estas packages precisam ser carregadas depois do tema metropolis
\PassOptionsToPackage{mono=false}{libertine}
\PassOptionsToPackage{scale=.85}{sourcecodepro}
\RequirePackage{sourcecodepro}
\RequirePackage{libertine}

% As margens default são muito grandes
\setbeamersize{
  text margin left=.03\paperwidth,
  text margin right=.03\paperwidth
}

\usefonttheme{structurebold}
\useinnertheme{circles}

% Customizando "itemize" (bold/itálico, formato dos bullets, margens)
\setbeamerfont{itemize/enumerate body}{series=\bfseries}
\setbeamerfont{itemize/enumerate subbody}{series=\normalfont}
\setbeamerfont{itemize/enumerate subsubbody}{series=\itshape}
% Os triângulos ficam MUITO grandes, acho que por conta do
% inner theme "circles"; vamos definir manualmente.
%\setbeamertemplate{itemize items}[triangle]
\setbeamertemplate{itemize item}{\raisebox{-.05em}{\Large\textbf{\textbullet}}}
% O triângulo fica de tamanhos diferentes com pdflatex e lualatex;
% para contornar isso, vamos (1) redimensionar para o tamanho do
% \strut e (2) redimensionar para 25% desse valor.
\setbeamertemplate{itemize subitem}{{\normalsize\raisebox{.4\totalheight}{\scalebox{.25}{\resizebox*{!}{\totalheightof{\strut}}{\ensuremath{\blacktriangleright}}}}}}
\setbeamertemplate{itemize subsubitem}{\raisebox{.02em}{{\textbf{\guillemotright}}}}
\addtolength{\leftmargini}{-.9em}
\addtolength{\leftmarginii}{-1.3em}
\addtolength{\leftmarginiii}{-1em}
\addtolength{\labelsep}{-.3em}

\setbeamertemplate{caption}[numbered]
% Os triângulos ficam MUITO grandes, acho que por conta do
% inner theme "circles"; vamos definir manualmente.
%\setbeamertemplate{bibliography item}[triangle]
\setbeamertemplate{bibliography item}{{\normalsize\raisebox{.4\totalheight}{\scalebox{.25}{\resizebox*{!}{\totalheightof{\strut}}{\ensuremath{\blacktriangleright}}}}}}
\AtEndPreamble{
  \@ifpackageloaded{biblatex}
    {\setlength{\biblabelsep}{0pt}}
    {}
}

% Remove ícones de navegação
\beamertemplatenavigationsymbolsempty

%%%%%%%%%%%%%%%%%%%%%%%%%%% COMANDOS AUXILIARES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\RequirePackage{qrcode}

\newcommand\presentationurl[1]{
  \gdef\thepresentationurl{#1}
}

\newcommand\showqrcode{
  \ifcsvoid{thepresentationurl}{\relax}{% else
    \begin{frame}[plain]
      \vfill
      {\centering\noindent\qrcode[height=.8\paperheight,level=H]{\thepresentationurl}\par}
      \vfill
    \end{frame}
  }
}

\newcommand\includeqrcodeintoc{
  \ifcsvoid{thepresentationurl}{\relax}{% else
    \gdef\qrcodecontents{\thepresentationurl}
  }
}

\newcommand\qrcodeintoc{
  \ifcsvoid{qrcodecontents}{\relax}{% else
    \vskip 2\baselineskip plus \baselineskip minus 2.5\baselineskip
    {\centering\noindent\qrcode[height=.27\paperheight,level=H]{\thepresentationurl}\par}
  }
}

\newcommand\spaceforqrcode{
  \ifcsvoid{qrcodecontents}{\relax}{% else
    \vskip 2\baselineskip plus \baselineskip minus 2.5\baselineskip
    ~\vspace{.3\paperheight}\par
  }
}

\newcommand\toccolumns[1]{
  \gdef\thetoccolumns{#1}
}

\newcommand{\theoverview}{\tableofcontents\qrcodeintoc}
\newcommand{\intermezzo}{\tableofcontents[currentsection]\spaceforqrcode}

\newcommand\overview{
  \ifcsvoid{thetoccolumns}{\relax}{% else

    \gdef\theoverview{%
      \begin{columns}[t]
        \column{.45\textwidth}
          \tableofcontents[sections={1-\thetoccolumns}]
        \column{.45\textwidth}
          \tableofcontents[sections={\the\numexpr 1 + \thetoccolumns\relax-}]

	      \qrcodeintoc
      \end{columns}
    }

    \gdef\intermezzo{%
      \begin{columns}[t]
        \column{.45\textwidth}
          \tableofcontents[currentsection,sections={1-\thetoccolumns}]
        \column{.45\textwidth}
          \tableofcontents[currentsection,sections={\the\numexpr 1 + \thetoccolumns\relax-}]

          \spaceforqrcode
      \end{columns}
    }
  } % end ifnumequal

  \theoverview
}

\newcommand\bgimage[1]{
  \gdef\thebgimage{%
      \noindent\begin{minipage}[b][\paperheight][b]{\paperwidth}
        \vfill
        \centering\noindent#1\par
      \end{minipage}%
  }
}

\newcommand\logos[1]{
  \gdef\thelogos{%
      \noindent\begin{minipage}[b][\paperheight][b]{\paperwidth}
          % O centro da área de impressão não é o centro do papel;
          % aqui queremos centralizar no papel, então compensamos
          % a diferença (esse ajuste foi feito "no olho") com
          % \hspace
          \vfill
          \centering%
          % "\strut" para garantir que "\hfil" à direita funcione
          \noindent\hspace*{-.04\textwidth}#1\strut\par
          \noindent\hspace*{-.04\textwidth}\includegraphics[height=.0311\paperheight]{cc-by}\par
          \vspace{.3\baselineskip}
      \end{minipage}%
  }
}

\newcommand\customtitlepage{
  {
      % Traz o título para cima para deixar mais espaço para a imagem
      % de fundo que fica mais para baixo
      \addtobeamertemplate{title}{\vspace*{-3\baselineskip}}{}
      \addtobeamertemplate{title separator}{\vspace*{-.5\baselineskip}}{\vspace*{-\baselineskip}}
      \definecolor{bggray}{RGB}{238,238,236}
      \setbeamercolor{background canvas}{bg=bggray}
      \setbeamercolor{background}{bg=}
      % Duas minipages sobrepostas, uma com a imagem de
      % fundo e a outra com os logotipos das agências
      % Precisa estar dentro das minipages porque fica
      % mais fácil fazer o alinhamento vertical
      \setbeamertemplate{background}{%
          \ifcsvoid{thebgimage}{\relax}{%
              \thebgimage%
              \hspace{-\paperwidth}% "Volta o cursor"
	  }%
	  \ifcsvoid{thelogos}{\relax}{\thelogos}%
      }

      \begin{frame}
          \titlepage
      \end{frame}
  }
}

% Há um bug em beamer, no arquivo beamerbasetoc.sty, na definição da
% macro \beamer@sectionintoc. Essa macro faz \hbox{\vbox{...}} para
% cada item do sumário. O problema é que, se alguma das entradas do
% sumário tem mais de uma linha, o espaçamento entre essa entrada e
% a entrada anterior fica errado (ligeiramente menor). Normalmente
% esse problema não chama muito a atenção, mas se há muitos itens
% (e, portanto, o espaço entre eles é pequeno) ou se colocamos o
% sumário em uma minipage ou um ambiente em colunas (que minimiza o
% espaçamento vertical), o resultado é ruim.
%
% \beamer@subsectionintoc e \beamer@subsubsectionintoc não fazem
% \hbox{\vbox{...}}; num teste preliminar, remover esses comandos
% de \beamer@sectionintoc parece funcionar. Outra solução seria
% acrescentar um \strut: \hbox{\vbox{\strut ...}}. Aqui, no entanto,
% contornamos o problema acrescentando o \strut em outro lugar, que
% é mais simples de fazer e (esperemos!) não vai causar problemas.
% Bug report: https://github.com/josephwright/beamer/issues/524
\pretocmd{\beamer@tocact}{\strut}{}{}

\endinput
