Skip to content

Commit

Permalink
Use real transparency for box shadows (fixes issue #161)
Browse files Browse the repository at this point in the history
  • Loading branch information
josephwright committed May 10, 2012
1 parent e0fc200 commit 1213789
Show file tree
Hide file tree
Showing 2 changed files with 176 additions and 102 deletions.
179 changes: 77 additions & 102 deletions base/beamerbaseboxes.sty
Expand Up @@ -24,13 +24,12 @@
\newif\ifbmb@shadow
\newbox\bmb@box
\newbox\bmb@colorbox
\newbox\bmb@boxshadow
\newbox\bmb@boxshadowball
\newbox\bmb@boxshadowballlarge
\newdimen\bmb@boxwidth
\newdimen\bmb@boxheight
\newdimen\bmb@prevheight
\newdimen\bmb@temp
\newdimen\bmb@dima
\newdimen\bmb@dimb
\newdimen\bmb@prevheight

\newcommand\beamerboxesrounded[2][]{%
\global\let\beamer@firstlineitemizeunskip=\relax%
Expand Down Expand Up @@ -99,22 +98,20 @@
\vskip-1pt%
\ifdim\wd\bmb@box=0pt%
\else%
\hbox{%
\begin{pgfpicture}{0pt}{0pt}{\bmb@width}{6pt}
\bmb@dima=\bmb@width%
\advance\bmb@dima by8bp%
\pgfpathrectangle{\pgfpoint{-4bp}{-1bp}}{\pgfpoint{\bmb@dima}{8bp}}
\pgfusepath{clip}
{\pgftransformshift{\pgfpoint{-4bp}{0bp}}\pgftext[left,base]{\pgfuseshading{bmb@transition}}}%
\end{pgfpicture}%
}%
\nointerlineskip%
\vskip-0.5pt%
\fi%
\ifbmb@shadow%
\setbox\bmb@boxshadow=\hbox{\pgfuseshading{bmb@shadow}}%
\setbox\bmb@boxshadowball=\hbox{\pgfuseshading{bmb@shadowball}}%
\setbox\bmb@boxshadowballlarge=\hbox{\pgfuseshading{bmb@shadowballlarge}}%
\hbox{%
\begin{pgfpicture}{0pt}{0pt}{\bmb@width}{6pt}
\bmb@dima=\bmb@width%
\advance\bmb@dima by8bp%
\pgfpathrectangle{\pgfpoint{-4bp}{-1bp}}{\pgfpoint{\bmb@dima}{8bp}}
\pgfusepath{clip}
{%
\pgftransformshift{\pgfpoint{-4bp}{0bp}}%
\pgftext[left,base]{\pgfuseshading{bmb@transition}}%
}%
\end{pgfpicture}%
}%
\nointerlineskip%
\vskip-0.5pt%
\fi%
\setbox\bmb@colorbox=\hbox{{\pgfpicturetrue\pgfsetcolor{lower.bg}}}%
\setbox\bmb@box=\hbox\bgroup\begin{minipage}[b]{\bmb@width}%
Expand All @@ -127,49 +124,66 @@

\def\endbeamerboxesrounded{%
\end{minipage}\egroup%
\wd\bmb@box=\bmb@width%
\bmb@temp=\dp\bmb@box%
\advance\bmb@temp by.5pt%
\setbox\bmb@box=\hbox{\raise\bmb@temp\hbox{\box\bmb@box}}%
\dp\bmb@box=0pt%
\bmb@temp=\wd\bmb@box%
\bmb@boxwidth=\bmb@width%
\bmb@boxheight=\ht\bmb@box%
\advance\bmb@boxheight by4bp%
\advance\bmb@boxheight by\bmb@prevheight%
\ifbmb@shadow%
\pgfdeclareradialshading{bmb@shadowball}{\pgfpointorigin}
{%
color(0bp)=(pgftransparent!50);
color(4bp)=(pgftransparent!100)
}%
\pgfdeclareradialshading{bmb@shadowballlarge}{\pgfpointorigin}
{%
color(0bp)=(pgftransparent!0);
color(8bp)=(pgftransparent!100)
}%
\pgfdeclarehorizontalshading{bmb@shadowhorz}{\bmb@boxheight-6bp}
{%
color(0bp)=(pgftransparent!0);
color(8bp)=(pgftransparent!100)
}%
\pgfdeclareverticalshading{bmb@shadowvert}{\bmb@boxwidth-4bp}
{%
color(0bp)=(pgftransparent!100);
color(8bp)=(pgftransparent!0)
}%
\pgfdeclarefading{bmb@shadowmask}
{%
\begin{pgfpicture}
\pgftext[at=\pgfpoint{4bp}{4bp}]{\pgfuseshading{bmb@shadowball}}
\pgftext[at=\pgfpoint{\bmb@boxwidth}{8bp}]{\pgfuseshading{bmb@shadowballlarge}}
\pgftext[at=\pgfpoint{\bmb@boxwidth+4bp}{\bmb@boxheight+2bp}]{\pgfuseshading{bmb@shadowball}}
\pgftext[left, at=\pgfpoint{4bp}{4bp}]{\pgfuseshading{bmb@shadowvert}}
\pgftext[base, at=\pgfpoint{\bmb@boxwidth+4bp}{8bp}]{\pgfuseshading{bmb@shadowhorz}}
%
% clipping is needed because shadow is typeset on top of box
\begin{pgfscope}
\pgfsetcolor{black}
\pgfpathrectangle{\pgfpoint{4bp}{8bp}}{\pgfpoint{\bmb@boxwidth-0.2bp}{\bmb@boxheight-2bp}}
\pgfusepath{fill}
\end{pgfscope}
\end{pgfpicture}
}%
\fi%
\bmb@temp=\bmb@width%
\bmb@dima=\bmb@temp\advance\bmb@dima by2.2bp%
\bmb@dimb=\bmb@temp\advance\bmb@dimb by4bp%
\hbox{%
\begin{pgfpicture}{0bp}{0bp}{0bp}{0bp}
\ifbmb@shadow%
{\pgftransformshift{\pgfpoint{4bp}{-3bp}}\pgftext{\copy\bmb@boxshadowball}}
\begin{pgfscope}
{%
\advance\bmb@temp by-1bp%
\pgfpathrectangle{\pgfpoint{\bmb@temp}{-7bp}}{\pgfpoint{9bp}{9bp}}%
\pgfusepath{clip}
}%
{\pgftransformshift{\pgfpoint{\bmb@temp}{1bp}}\pgftext{\box\bmb@boxshadowballlarge}}
\end{pgfscope}
\begin{pgfscope}
\advance\bmb@temp by-4bp%
\pgfpathrectangle{\pgfpoint{4bp}{-7bp}}{\pgfpoint{\bmb@temp}{5bp}}
\pgfusepath{clip}
{\pgftransformshift{\pgfpoint{4bp}{-7bp}}\pgftext[left,base]{\copy\bmb@boxshadow}}%
\end{pgfscope}
\begin{pgfscope}
\advance\bmb@temp by 4bp%
\bmb@dima=\ht\bmb@box%
\advance\bmb@dima by\bmb@prevheight%
\advance\bmb@dima by 4bp%
\pgfpathrectangle{\pgfpoint{\bmb@temp}{1bp}}{\pgfpoint{4bp}{\bmb@dima}}
\pgfusepath{clip}
\advance\bmb@dima by-4bp%
{\pgftransformshift{\pgfpoint{\bmb@temp}{\bmb@dima}}\pgftext{\box\bmb@boxshadowball}}
\advance\bmb@dima by-1bp%
\pgfpathrectangle{\pgfpoint{\bmb@temp}{1bp}}{\pgfpoint{4bp}{\bmb@dima}}
\pgfusepath{clip}
\advance\bmb@temp by4bp%
{\pgftransformshift{\pgfpoint{\bmb@temp}{-3bp}}%
\pgftransformrotate{90}%
\pgftext[left,base]{\box\bmb@boxshadow}}%
\end{pgfscope}
\begin{pgfscope}
\pgfpathrectangle{\pgfpoint{0bp}{-7bp}}
{\pgfpoint{\bmb@boxwidth+8bp}{\bmb@boxheight+6bp}}
\pgfsetfading{bmb@shadowmask}{%
\pgftransformshift{\pgfpoint{0.5\bmb@boxwidth+6bp}{0.5\bmb@boxheight-4bp}}}
\pgfusepath{fill}
\end{pgfscope}
\fi%
\unhbox\bmb@colorbox%
\pgfpathqmoveto{-4bp}{1bp}
Expand All @@ -180,47 +194,11 @@
{\pgfpoint{\the\bmb@dimb}{-1.2bp}}%
{\pgfpoint{\the\bmb@dimb}{1bp}}%
{
\bmb@dima=\ht\bmb@box%
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
\pgfpathlineto{\pgfpoint{-4bp}{\bmb@dima}}
\pgfusepath{fill}
}
\ifbmb@shadow%
{
\color{black!50!bg}
\pgfsetlinewidth{0pt}
\pgfpathmoveto{\pgfpoint{\bmb@dimb}{-.5bp}}
\bmb@dima=\ht\bmb@box%
\advance\bmb@dima by\bmb@prevheight%
\advance\bmb@dima by 1bp%
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
\pgfusepath{stroke}
\bmb@temp=\bmb@dima
\advance\bmb@dima by 1bp%
\color{black!31!bg}
\pgfpathmoveto{\pgfpoint{\bmb@dimb}{\bmb@temp}}
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
\pgfusepath{stroke}
\advance\bmb@dima by 1bp%
\advance\bmb@temp by 1bp%
\color{black!19!bg}
\pgfpathmoveto{\pgfpoint{\bmb@dimb}{\bmb@temp}}
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
\pgfusepath{stroke}
\advance\bmb@dima by 1bp%
\advance\bmb@temp by 1bp%
\color{black!6!bg}
\pgfpathmoveto{\pgfpoint{\bmb@dimb}{\bmb@temp}}
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
\pgfusepath{stroke}
\advance\bmb@dima by 1.5bp%
\advance\bmb@temp by 1bp%
\color{bg}
\pgfpathmoveto{\pgfpoint{\bmb@dimb}{\bmb@temp}}
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
\pgfusepath{stroke}
\pgfpathlineto{\pgfpoint{-4bp}{\bmb@dima}}
\pgfusepath{fill}
}
\fi
\end{pgfpicture}%
\box\bmb@box%
}%
Expand All @@ -236,14 +214,11 @@
% Shadings
%

% Shadows
\pgfdeclareradialshading[black,bg]{bmb@shadowball}{\pgfpointorigin}{%
color(0bp)=(black!50!bg); color(4bp)=(bg)}
\pgfdeclareradialshading[black,bg]{bmb@shadowballlarge}{\pgfpointorigin}{%
color(0bp)=(black!50!bg); color(4bp)=(black!50!bg); color(8bp)=(bg)}
\pgfdeclareverticalshading[black,bg]{bmb@shadow}{200cm}{%
color(0bp)=(bg); color(4bp)=(black!50!bg); color(8bp)=(black!50!bg)}
\pgfdeclareverticalshading[lower.bg,upper.bg]{bmb@transition}{200cm}%
{%
color(0pt)=(lower.bg);
color(2pt)=(lower.bg);
color(4pt)=(upper.bg)
}


% Transition line
\pgfdeclareverticalshading[lower.bg,upper.bg]{bmb@transition}{200cm}{%
color(0pt)=(lower.bg); color(2pt)=(lower.bg); color(4pt)=(upper.bg)}
99 changes: 99 additions & 0 deletions base/themes/outer/beameroutherthemeshadow.sty
@@ -0,0 +1,99 @@
% Copyright 2007 by Till Tantau
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Public License.
%
% See the file doc/licenses/LICENSE for more details.

\mode<presentation>

\useoutertheme{split}

\setbeamercolor{frametitle}{parent=subsection in head/foot}
\setbeamercolor{frametitle right}{parent=section in head/foot}

\pgfdeclarehorizontalshading[frametitle.bg,frametitle right.bg]%
{beamer@frametitleshade}{\paperheight}
{%
color(0pt)=(frametitle.bg);
color(\paperwidth)=(frametitle right.bg)
}
\pgfdeclareverticalshading{beamer@topshade}{200cm}
{%
color(0pt)=(pgftransparent!100);
color(8pt)=(pgftransparent!0)
}

\pgfdeclarefading{beamer@topshadowmask}{\pgfuseshading{beamer@topshade}}

\addtobeamertemplate{headline}
{}
{%
\vskip0pt
\begin{pgfpicture}
\pgfpathrectangle{\pgfpoint{0pt}{-4pt}}{\pgfpoint{\paperwidth}{4pt}}%
\pgfsetfading{beamer@topshadowmask}{}%
\pgfusepath{fill}%
\end{pgfpicture}
\vskip-2pt
}

\defbeamertemplate*{frametitle}{shadow theme}
{%
\nointerlineskip%
\vskip-2pt%
\hbox{\leavevmode
\advance\beamer@leftmargin by -12bp%
\advance\beamer@rightmargin by -12bp%
\beamer@tempdim=\textwidth%
\advance\beamer@tempdim by \beamer@leftmargin%
\advance\beamer@tempdim by \beamer@rightmargin%
\hskip-\Gm@lmargin\hbox{%
\setbox\beamer@tempbox=\hbox{%
\begin{minipage}[b]{\paperwidth}%
\vbox{}\vskip-.75ex%
\leftskip0.3cm%
\rightskip0.3cm plus1fil\leavevmode
\insertframetitle%
\ifx\insertframesubtitle\@empty%
\strut\par%
\else
\par{%
\usebeamerfont*{framesubtitle}{%
\usebeamercolor[fg]{framesubtitle}%
\insertframesubtitle}%
\strut\par%
}%
\fi%
\nointerlineskip
\vbox{}%
\end{minipage}%
}%
\beamer@tempdim=\ht\beamer@tempbox%
\advance\beamer@tempdim by 2pt%
\begin{pgfpicture}{0pt}{0pt}{\paperwidth}{\beamer@tempdim}
\begin{pgfscope}
\pgfsetfillcolor{black}%
\pgfpathrectangle{\pgfpoint{0pt}{-4pt}}{\pgfpoint{\paperwidth}{8pt}}%
\pgfsetfading{beamer@topshadowmask}{}%
\pgfusepath{fill}%
\end{pgfscope}
\begin{pgfscope}
\usebeamercolor{frametitle right}%
\pgfpathrectangle{\pgfpointorigin}{\pgfpoint{\paperwidth}{\beamer@tempdim}}%
\pgfusepath{clip}%
\pgftext[left,base]{\pgfuseshading{beamer@frametitleshade}}%
\end{pgfscope}
\end{pgfpicture}
\hskip-\paperwidth%
\box\beamer@tempbox%
}%
\hskip-\Gm@rmargin%
}%
\vskip-2pt
}

\mode
<all>

0 comments on commit 1213789

Please sign in to comment.