Joseph Wright avatar Joseph Wright committed 26d0d93

Use real transparency for box shadows (fixes issue #161)

Comments (0)

Files changed (2)

base/beamerbaseboxes.sty

 \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%
   \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}%
 
 \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}
       {\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}
+        \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}
-      }
-      \fi
     \end{pgfpicture}%
     \box\bmb@box%
   }%
 % 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)}
+

base/themes/outer/beameroutherthemeshadow.sty

+% 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> 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.