diff options
author | Manuel Pégourié-Gonnard <mpg@elzevir.fr> | 2008-05-13 18:53:06 +0000 |
---|---|---|
committer | Manuel Pégourié-Gonnard <mpg@elzevir.fr> | 2008-05-13 18:53:06 +0000 |
commit | fa8296a6b6724e1cb73c5fa2832ddc824f794e5a (patch) | |
tree | 117a4116406fda748dee496ea9b239089e14884c /Master/texmf-dist/tex/latex/animate | |
parent | fd35b82f19e360b19b3d9b109df5664477cb2e44 (diff) |
animate v2008/05/09
git-svn-id: svn://tug.org/texlive/trunk@8111 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/animate')
-rw-r--r-- | Master/texmf-dist/tex/latex/animate/animate-noocg.sty | 1855 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/animate/animate.sty | 193 |
2 files changed, 99 insertions, 1949 deletions
diff --git a/Master/texmf-dist/tex/latex/animate/animate-noocg.sty b/Master/texmf-dist/tex/latex/animate/animate-noocg.sty deleted file mode 100644 index 75068023b31..00000000000 --- a/Master/texmf-dist/tex/latex/animate/animate-noocg.sty +++ /dev/null @@ -1,1855 +0,0 @@ -% Copyright 2007 Alexander Grahn - -% This material is subject to the LaTeX Project Public License. See -% http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html -% for the details of that license. - -% Package for creating portable, JavaScript driven animations from sets of -% graphics files or inline graphics (e. g. latex-picture, pstricks, -% pgf/TikZ, ...) - -% Supports LaTeX->dvips->ps2pdf or pdfLaTeX workflows. - -% Non-OCG version, based on the work by Jan Holecek and Petr Sojka. - -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{animate-noocg}[2007/05/05] -\RequirePackage{keyval} -\RequirePackage{ifthen} -\RequirePackage{ifpdf} -\RequirePackage{calc} - -\DeclareOption*{}\ProcessOptions*\relax %allow anything as option -%(package options will be processed near end of this file) - -\ifpdf - %load MP to PDF converter - \ifx\convertMPtoPDF\@undefined% - \InputIfFileExists{supp-pdf}{}{}% - \ifx\convertMPtoPDF\@undefined% - \PackageWarningNoLine{animate-noocg}{% - File `supp-pdf.tex', which is part of ConTeXt, is not available.% - \MessageBreak% - Therefore, MetaPost generated PS files cannot be embedded.% - }% - \fi% - \fi% -\else - %define `?pdfmark' operator; taken from the PDFmark Reference - \AtBeginDocument{% - \ifthenelse{\isundefined{\pdfmark}}{% (hyperref provides its own - \special{ps: % definition) - /pdfmark where - { pop globaldict /?pdfmark /exec load put } - { - globaldict - begin - /?pdfmark /pop load def - /pdfmark /cleartomark load def - end - } - ifelse - }% - }{}% - } -\fi% - -%testing for correct TeX version, pdfmdfivesum is needed for both, -%pdf _and_ dvi output -\ifx\@undefined\pdfmdfivesum - \PackageError{animate-noocg}{% - pdfeTeX, version >= 1.30, required - }{% - Install a more recent version! - }% -\fi - -%creating and using global definitions -\def\@anim@newkey#1#2{{\expandafter\xdef\csname#1\endcsname{#2}}} -\def\@anim@getkeyval#1{% - \expandafter\ifx\csname#1\endcsname\relax% - undefined% - \else% - \csname#1\endcsname% - \fi% -}% - -%missing package error message -\def\@anim@missing#1{% - \PackageError{animate-noocg}{% - Package `#1' has not been loaded yet% - }{% - Put the line\MessageBreak% - `\protect\usepackage{#1}'\MessageBreak% - to the preamble of your document! - }% -} - -%add AP (appearances name tree) root node to the Names dict of the PDF Catalog -\def\@anim@buttontree{} -\ifpdf - \newcount\@anim@aproot - \pdfobj reserveobjnum - \@anim@aproot=\pdflastobj - \pdfnames{/AP \the\pdflastobj\space 0 R} - \AtEndDocument{% - \immediate\pdfobj useobjnum \@anim@aproot {% - <</Kids [\@anim@apkids\space\@anim@buttontree]>>% - }% - }% -\else - \special{ps: - mark {Catalog} <</Names <</AP <</Kids {@anim@apkids}>>>>>> /PUT pdfmark - } -\fi - -%create name tree object from XObject hash & add a reference to it to the -%name tree list -\def\@anim@apkids{} -\ifpdf - \def\@anim@addtree#1{% #1 @anim@num - \immediate\pdfobj {<<% - /Names [\@anim@getkeyval{a#1.hash}] - /Limits [(\@anim@getkeyval{a#1.ffirst}) (\@anim@getkeyval{a#1.flast})]% - >>}% - \xdef\@anim@apkids{\@anim@apkids\the\pdflastobj\space 0 R\space}% - } -\else - \special{ps: mark /_objdef {@anim@apkids} /type/array /OBJ pdfmark } - \def\@anim@addtree#1{% - \xdef\@anim@apkids{\@anim@apkids {tree@#1}\space}% - \special{ps: - mark - /_objdef {tree@#1} - /type/dict - /OBJ pdfmark - mark - {tree@#1} << - /Names [\@anim@getkeyval{a#1.hash}] - /Limits [(\@anim@getkeyval{a#1.ffirst}) (\@anim@getkeyval{a#1.flast})] - >> - /PUT pdfmark - %mark {@anim@apkids} {tree@#1} /APPEND pdfmark - mark {@anim@apkids} 0 [\@anim@apkids\@anim@buttontree] /PUTINTERVAL pdfmark - }% - } -\fi - -\newbox\@anim@box %used for storing graphics -\newdimen\@anim@tmpdima %length registers for occasional use -\newdimen\@anim@tmpdimb - -%creates Form XObject from graphics file & appends a reference to it to the -%XObject hash (XObject name <-> XObject reference) of the current animation; -%also determines natural size of the graphics file -\def\@anim@pt{pt} -\ifpdf - \def\@anim@ximage#1#2#3{%#1:zero padded anim num, #2:@anim@curframe@zb, - \edef\@anim@curfr@zb@form{\@anim@pad{123456}{#2}}% #3:filename - \IfFileExists{#3}{% - %embed the same graphics file only once (reference doesn't exist yet) - \ifthenelse{% - \equal{\@anim@getkeyval{\pdfmdfivesum file {#3}.r}}{undefined}% - }{% - \def\@anim@mps{.mps}% - \ifx\@anim@ext\@anim@mps% - \global\setbox\@anim@box=\hbox{\convertMPtoPDF{#3}{1}{1}}% - \ifnum#2=0% size (measuring the first frame only) - % store name of first frame XObject - \@anim@newkey{a#1.ffirst}{a#1f\@anim@curfr@zb@form}% - \@anim@newkey{a#1.wd}{\the\wd\@anim@box}% - \@anim@newkey{a#1.ht}{\the\ht\@anim@box}% - \@anim@newkey{a#1.dp}{0pt}% - \fi% - \immediate\pdfxform\@anim@box% - \@anim@newkey{\pdfmdfivesum file {#3}.r}{\the\pdflastxform}% - \else% - \immediate\pdfximage{#3}% - \@anim@newkey{\pdfmdfivesum file {#3}.r}{\the\pdflastximage}% - \ifnum#2=0% size (measuring the first frame only) - % store name of first frame XObject - \@anim@newkey{a#1.ffirst}{a#1f\@anim@curfr@zb@form}% - \global\setbox\@anim@box=\hbox{\pdfrefximage\pdflastximage}% - \@anim@newkey{a#1.wd}{\the\wd\@anim@box}% - \@anim@newkey{a#1.ht}{\the\ht\@anim@box}% - \@anim@newkey{a#1.dp}{0pt}% - \fi% - \fi% - \@anim@newkey{\pdfmdfivesum file {#3}.a}{#1}% file is part of animation #1 - }{% - \ifnum#2=0% - \@anim@newkey{a#1.ffirst}{a#1f\@anim@curfr@zb@form}% - %retrieve previously determined size and make it the current - \@anim@newkey{a#1.wd}{% - \@anim@getkeyval{a\@anim@getkeyval{\pdfmdfivesum file {#3}.a}.wd}% - }% - \@anim@newkey{a#1.ht}{% - \@anim@getkeyval{a\@anim@getkeyval{\pdfmdfivesum file {#3}.a}.ht}% - }% - \@anim@newkey{a#1.dp}{0pt}% - \fi% - }% - % store name of last frame XObject - \@anim@newkey{a#1.flast}{a#1f\@anim@curfr@zb@form}% - \@anim@newkey{a#1.hash}{% append reference - \@anim@getkeyval{a#1.hash}(a#1f\@anim@curfr@zb@form) - \@anim@getkeyval{\pdfmdfivesum file {#3}.r}\space 0 R\space% - }% - %reference to poster frame - \ifnum#2=0% - \def\@anim@posterframe{first}% - \else% - \def\@anim@posterframe{last}% - \fi% - \ifx\@anim@poster\@anim@posterframe% - \@anim@newkey{a#1.poster}{% - \@anim@getkeyval{\pdfmdfivesum file {#3}.r}\space 0 R% - }% - \fi% - }{% - \PackageError{animate-noocg}{File `#3' cannot be opened for embedding.}{}% - }% - } -\else - \def\@anim@ximage#1#2#3{% - \edef\@anim@curfr@zb@form{\@anim@pad{123456}{#2}}% - \IfFileExists{#3}{% - \ifthenelse{% - \equal{\@anim@getkeyval{\pdfmdfivesum file {#3}.r}}{undefined}% - }{% - \edef\@anim@curfile{{#3}}% - \global\setbox\@anim@box=\hbox{\expandafter\includegraphics\@anim@curfile}% - \ifnum#2=0% size (measuring the first frame only) - % store name of first frame XObject - \@anim@newkey{a#1.ffirst}{a#1f\@anim@curfr@zb@form}% - \@anim@newkey{a#1.wd}{\the\wd\@anim@box}% - \@anim@newkey{a#1.ht}{\the\ht\@anim@box}% - \@anim@newkey{a#1.dp}{0pt}% - \fi% - \def\@anim@oldunitlength{\the\unitlength}% make backup - \setlength{\unitlength}{1pt}% - %mark BBox of the graphics - \begin{picture}(0,0)% - \put(0,0){% - \special{ps: - currentpoint /frame@lly exch def /frame@llx exch def - }% - }% - \put(\strip@pt\wd\@anim@box,\strip@pt\ht\@anim@box){% - \special{ps: - currentpoint /frame@ury exch def /frame@urx exch def - }% - }% - \special{ps: - gsave - mark - /_objdef {a#1f\@anim@curfr@zb@form} - /BBox [frame@llx frame@lly frame@urx frame@ury] - /BP pdfmark - %flip around horizontal axis - { [1 0 0 -1 0 frame@lly frame@ury add ] concat } ?pdfmark - }% - \put(0,0){\box\@anim@box}% - \special{ps: - mark /EP pdfmark - grestore - }% - \end{picture}% - \setlength{\unitlength}{\@anim@oldunitlength}% restore previous unitlen - \@anim@newkey{\pdfmdfivesum file {#3}.r}{a#1f\@anim@curfr@zb@form}% - \@anim@newkey{\pdfmdfivesum file {#3}.a}{#1}% - }{% - \ifnum#2=0% - \@anim@newkey{a#1.ffirst}{a#1f\@anim@curfr@zb@form}% - \@anim@newkey{a#1.wd}{% - \@anim@getkeyval{a\@anim@getkeyval{\pdfmdfivesum file {#3}.a}.wd}% - }% - \@anim@newkey{a#1.ht}{% - \@anim@getkeyval{a\@anim@getkeyval{\pdfmdfivesum file {#3}.a}.ht}% - }% - \@anim@newkey{a#1.dp}{0pt}% - \fi% - }% - \@anim@newkey{a#1.flast}{a#1f\@anim@curfr@zb@form}% - \@anim@newkey{a#1.hash}{% append reference - \@anim@getkeyval{a#1.hash}(a#1f\@anim@curfr@zb@form) - {\@anim@getkeyval{\pdfmdfivesum file {#3}.r}}\space% - }% - \ifnum#2=0% - \def\@anim@posterframe{first}% - \else% - \def\@anim@posterframe{last}% - \fi% - \ifx\@anim@poster\@anim@posterframe% - \@anim@newkey{a#1.poster}{% - \@anim@getkeyval{\pdfmdfivesum file {#3}.r}% - }% - \fi% - }{% - \PackageError{animate-noocg}{File `#3' cannot be opened for embedding.}{}% - }% - } -\fi - -%creates Form XObject from box contents & appends a reference to it to the -%XObject hash (XObject name <-> XObject reference) of the current animation -\ifpdf - \def\@anim@xinline#1#2#3{%#1:zero padded anim num, #2:@anim@curframe@zb, - \immediate\pdfxform#3% #3:box number - \edef\@anim@curfr@zb@form{\@anim@pad{123456}{#2}}% - \ifnum#2=0% - \@anim@newkey{a#1.ffirst}{a#1f\@anim@curfr@zb@form}% - \fi% - % store name of last frame of sequence - \@anim@newkey{a#1.flast}{a#1f\@anim@curfr@zb@form}% - \@anim@newkey{a#1.hash}{% append reference - \@anim@getkeyval{a#1.hash}% - (a#1f\@anim@curfr@zb@form)\space\the\pdflastxform\space 0 R\space% - }% - %reference to poster frame - \ifnum#2=0% - \def\@anim@posterframe{first}% - \ifx\@anim@poster\@anim@posterframe% - \@anim@newkey{a#1.poster}{\the\pdflastxform\space 0 R}% - \fi% - \else% - \def\@anim@posterframe{last}% - \ifx\@anim@poster\@anim@posterframe% - \@anim@newkey{a#1.poster}{\the\pdflastxform\space 0 R}% - \fi% - \fi% - } -\else - \def\@anim@xinline#1#2#3{% - \def\@anim@oldunitlength{\the\unitlength}% make backup - \setlength{\unitlength}{1pt}% - %mark BBox of the graphics - \begin{picture}(0,0)% - \setlength{\@anim@tmpdima}{\@anim@getkeyval{a#1.dp}}% - \put(0,-\strip@pt\@anim@tmpdima){% - \special{ps: - currentpoint /frame@lly exch def /frame@llx exch def - }% - }% - \setlength{\@anim@tmpdima}{\@anim@getkeyval{a#1.wd}}% - \setlength{\@anim@tmpdimb}{\@anim@getkeyval{a#1.ht}}% - \put(\strip@pt\@anim@tmpdima,\strip@pt\@anim@tmpdimb){% - \special{ps: - currentpoint /frame@ury exch def /frame@urx exch def - }% - }% - \end{picture}% - \edef\@anim@curfr@zb@form{\@anim@pad{123456}{#2}}% cur frame num formatted - \setlength{\unitlength}{\@anim@oldunitlength}% restore previous unitlength - \special{ps: - gsave - mark - /_objdef {a#1f\@anim@curfr@zb@form} - /BBox [frame@llx frame@lly frame@urx frame@ury] - /BP pdfmark - %flip around horizontal axis - { [1 0 0 -1 0 frame@lly frame@ury add ] concat } ?pdfmark - }% - \begin{picture}(0,0)% - \put(0,0){\box#3}% - \end{picture}% - \special{ps: - mark /EP pdfmark - grestore - }% - \ifnum#2=0% - \@anim@newkey{a#1.ffirst}{a#1f\@anim@curfr@zb@form}% - \fi% - \@anim@newkey{a#1.flast}{a#1f\@anim@curfr@zb@form}% - \@anim@newkey{a#1.hash}{% - \@anim@getkeyval{a#1.hash}% - (a#1f\@anim@curfr@zb@form)\space {a#1f\@anim@curfr@zb@form}\space% - }% - \ifnum#2=0% - \def\@anim@posterframe{first}% - \ifx\@anim@poster\@anim@posterframe% - \@anim@newkey{a#1.poster}{a#1f\@anim@curfr@zb@form}% - \fi% - \else% - \def\@anim@posterframe{last}% - \ifx\@anim@poster\@anim@posterframe% - \@anim@newkey{a#1.poster}{a#1f\@anim@curfr@zb@form}% - \fi% - \fi% - } -\fi - -%control button faces -\def\@anim@buttonhash{}% -\ifpdf - \def\@anim@xbutton#1#2{% #1 name, #2 stroking commands - \immediate\pdfobj stream attr{% - /Type/XObject/Subtype/Form/BBox [0 0 15 15]% - /Resources <</ProcSet [/PDF]>>% - }{#2}% - \xdef\@anim@buttonhash{% - \@anim@buttonhash(btn#1)\space\the\pdflastobj\space 0 R\space% - }% - \@anim@newkey{btn#1}{\the\pdflastobj\space 0 R}% - } - \def\@anim@btnend{% - 2.5 w - 1 J - 1 j - 0 G - 10 10 130 130 re - S - 10 w - 45 40 m - 95 75 l - 45 110 l - S - 0 j - 105 44 m - 105 106 l - S - } - \def\@anim@btnstep{% - 2.5 w - 1 J - 1 j - 0 G - 10 10 130 130 re - S - 10 w - 50 40 m - 100 75 l - 50 110 l - S - } - \def\@anim@btnplay{% - 2.5 w - 1 J - 1 j - 0 G - 10 10 130 130 re - S - 10 w - 50 40 m - 50 110 l - 100 75 l - h - S - } - \def\@anim@btnpause{% - 2.5 w - 1 j - 0 G - 0 10 m - 140 10 l - 140 140 l - 0 140 l - S - 20 w - 22 40 m - 22 110 l - S - } - \def\@anim@btnminus{% - 2.5 w - 1 J - 1 j - 0 G - 10 10 130 130 re - S - 10 w - 0 J - 40 75 m - 110 75 l - S - } - \def\@anim@btnplus{% - 2.5 w - 1 J - 1 j - 0 G - 10 10 130 130 re - S - 10 w - 0 J - 40 75 m - 110 75 l - 75 40 m - 75 110 l - S - } - \def\@anim@btnreset{% - 2.5 w - 1 J - 1 j - 0 G - 10 10 130 130 re - S - 10 w - 75 40 m - 75 110 l - S - 0 g - 35 50 m - 70 75 l - 35 100 l - f - 115 50 m - 80 75 l - 115 100 l - f - 2 J - 0 j - 30 75 m - 35 75 l - 120 75 m - 115 75 l - S - } - \def\@anim@makebuttons{% - \@anim@xbutton{EndLeft}{% - -0.1 0 0 0.1 15 0 cm - \@anim@btnend% - }% - \@anim@xbutton{EndRight}{% - 0.1 0 0 0.1 0 0 cm - \@anim@btnend% - }% - \@anim@xbutton{Minus}{% - 0.1 0 0 0.1 0 0 cm - \@anim@btnminus% - }% - \@anim@xbutton{PauseLeft}{% - -0.1 0 0 0.1 15 0 cm - \@anim@btnpause% - }% - \@anim@xbutton{PauseRight}{% - 0.1 0 0 0.1 0 0 cm - \@anim@btnpause% - }% - \@anim@xbutton{PlayLeft}{% - -0.1 0 0 0.1 15 0 cm - \@anim@btnplay% - }% - \@anim@xbutton{PlayRight}{% - 0.1 0 0 0.1 0 0 cm - \@anim@btnplay% - }% - \@anim@xbutton{Plus}{% - 0.1 0 0 0.1 0 0 cm - \@anim@btnplus% - }% - \@anim@xbutton{Reset}{% - 0.1 0 0 0.1 0 0 cm - \@anim@btnreset% - }% - \@anim@xbutton{StepLeft}{% - -0.1 0 0 0.1 15 0 cm - \@anim@btnstep% - }% - \@anim@xbutton{StepRight}{% - 0.1 0 0 0.1 0 0 cm - \@anim@btnstep% - }% - \immediate\pdfobj {<<% - /Names [\@anim@buttonhash] - /Limits [(btnEndLeft) (btnStepRight)]% - >>}% - \xdef\@anim@buttontree{\the\pdflastobj\space 0 R\space}% - } -\else - \def\@anim@xbutton#1#2{% #1: name; #2: stroking commands - \special{ps: - gsave - mark - /_objdef {btn#1} - /BBox [0 0 15 15] - /BP pdfmark { #2 } ?pdfmark mark /EP pdfmark - grestore - }% - \xdef\@anim@buttonhash{% - \@anim@buttonhash(btn#1)\space {btn#1}\space% - }% - } - \def\@anim@btnend{% - 0 setgray - 0.25 setlinewidth - 1 setlinecap - 1 setlinejoin - 1 1 moveto - 14 1 lineto - 14 14 lineto - 1 14 lineto - closepath - stroke - 1 setlinewidth - 4.5 4 moveto - 9.5 7.5 lineto - 4.5 11 lineto - stroke - 0 setlinejoin - 10.5 4.4 moveto - 10.5 10.6 lineto - stroke - } - \def\@anim@btnstep{% - 0 setgray - 0.25 setlinewidth - 1 setlinecap - 1 setlinejoin - 1 1 moveto - 14 1 lineto - 14 14 lineto - 1 14 lineto - closepath - stroke - 1 setlinewidth - 5 4 moveto - 10 7.5 lineto - 5 11 lineto - stroke - } - \def\@anim@btnplay{% - 0 setgray - 0.25 setlinewidth - 1 setlinecap - 1 setlinejoin - 1 1 moveto - 14 1 lineto - 14 14 lineto - 1 14 lineto - closepath - stroke - 1 setlinewidth - 5 4 moveto - 5 11 lineto - 10 7.5 lineto - closepath - stroke - } - \def\@anim@btnpause{% - 0 setgray - 0.25 setlinewidth - 0 setlinecap - 1 setlinejoin - 0 1 moveto - 14 1 lineto - 14 14 lineto - 0 14 lineto - stroke - 2 setlinewidth - 2.2 4 moveto - 2.2 11 lineto - stroke - } - \def\@anim@btnminus{% - 0 setgray - 0.25 setlinewidth - 1 setlinecap - 1 setlinejoin - 1 1 moveto - 14 1 lineto - 14 14 lineto - 1 14 lineto - closepath - stroke - 1.0 setlinewidth - 0 setlinecap - 4 7.5 moveto - 11 7.5 lineto - stroke - } - \def\@anim@btnplus{% - 0 setgray - 0.25 setlinewidth - 1 setlinecap - 1 setlinejoin - 1 1 moveto - 14 1 lineto - 14 14 lineto - 1 14 lineto - closepath - stroke - 1.0 setlinewidth - 0 setlinecap - 4 7.5 moveto - 11 7.5 lineto - 7.5 4 moveto - 7.5 11 lineto - stroke - } - \def\@anim@btnreset{% - 0 setgray - 0.25 setlinewidth - 1 setlinecap - 1 setlinejoin - 1 1 moveto - 14 1 lineto - 14 14 lineto - 1 14 lineto - closepath - stroke - 1 setlinewidth - 7.5 4 moveto - 7.5 11 lineto - stroke - 0 setlinejoin - 3.5 5 moveto - 7 7.5 lineto - 3.5 10 lineto - closepath - fill - 11.5 5 moveto - 8 7.5 lineto - 11.5 10 lineto - closepath - fill - 1 setlinewidth - 2 setlinecap - 3 7.5 moveto - 3.5 7.5 lineto - 12 7.5 moveto - 11.5 7.5 lineto - stroke - } - \def\@anim@makebuttons{% - \@anim@xbutton{EndLeft}{% - [-1 0 0 1 15 0] concat - \@anim@btnend% - }% - \@anim@xbutton{EndRight}{% - \@anim@btnend% - }% - \@anim@xbutton{Minus}{% - \@anim@btnminus% - }% - \@anim@xbutton{PauseLeft}{% - [-1 0 0 1 15 0] concat - \@anim@btnpause% - }% - \@anim@xbutton{PauseRight}{% - \@anim@btnpause% - }% - \@anim@xbutton{PlayLeft}{% - [-1 0 0 1 15 0] concat - \@anim@btnplay% - }% - \@anim@xbutton{PlayRight}{% - \@anim@btnplay% - }% - \@anim@xbutton{Plus}{% - \@anim@btnplus% - }% - \@anim@xbutton{Reset}{% - \@anim@btnreset% - }% - \@anim@xbutton{StepLeft}{% - [-1 0 0 1 15 0] concat - \@anim@btnstep% - }% - \@anim@xbutton{StepRight}{% - \@anim@btnstep% - }% - \special{ps: - mark /_objdef {tree@button} /type/dict /OBJ pdfmark - mark - {tree@button} <<% - /Names [\@anim@buttonhash] - /Limits [(btnEndLeft) (btnStepRight)] - >> /PUT - pdfmark - }% - \xdef\@anim@buttontree{{tree@button}}% - } -\fi - -%determines file type of the sequence -\ifpdf - \def\@anim@getext#1{% - \gdef\@anim@ext{.pdf}% we start with `pdf' - \IfFileExists{#1\@anim@ext}{}{% - \gdef\@anim@ext{.mps}% - \IfFileExists{#1\@anim@ext}{}{% - \gdef\@anim@ext{.png}% - \IfFileExists{#1\@anim@ext}{}{% - \gdef\@anim@ext{.jpg}% - \IfFileExists{#1\@anim@ext}{}{% - \gdef\@anim@ext{.jpeg}% - \IfFileExists{#1\@anim@ext}{}{% - \gdef\@anim@ext{.jbig2}% - \IfFileExists{#1\@anim@ext}{}{% - \gdef\@anim@ext{.jb2}% - \IfFileExists{#1\@anim@ext}{}{% - \PackageError{animate-noocg}{% - Neither of the files\MessageBreak% - `#1.pdf',\MessageBreak% - `#1.mps',\MessageBreak% - `#1.png',\MessageBreak% - `#1.jpg',\MessageBreak% - `#1.jpeg',\MessageBreak% - `#1.jbig2' or\MessageBreak% - `#1.jb2',\MessageBreak% - could be found.\MessageBreak% - Wrong file type? Mis-spelled file name? - }{}% - }}}}}}}% - }% -\else - \def\@anim@getext#1{% - \gdef\@anim@ext{.eps}% we start with `eps' - \IfFileExists{#1\@anim@ext}{}{% - \gdef\@anim@ext{.mps}% - \IfFileExists{#1\@anim@ext}{}{% - \gdef\@anim@ext{.ps}% - \IfFileExists{#1\@anim@ext}{}{% - \PackageError{animate-noocg}{% - Neither of the files\MessageBreak% - `#1.eps',\MessageBreak% - `#1.mps' or\MessageBreak% - `#1.ps'\MessageBreak% - could be found.\MessageBreak% - Wrong file type? Mis-spelled file name? - }{}% - }}}% - }% -\fi - -%counts embedded animations -\newcount\@anim@num\@anim@num=0 - -%current frame -\newcount\@anim@curframe -\newcount\@anim@curframe@zb% zero based - -\newboolean{@anim@buttonsmade} %true if button faces have been made -\setboolean{@anim@buttonsmade}{false} - -%user command for embedding animation sequence -% #1: options -% #2: frame rate (fps) -% #3: basename of graphics file sequence (without frame number and extension) -% #4: first frame (zero padded integer of same width as #5) -% #5: last frame (zero padded integer of same width as #4) -\newcommand{\animategraphics}[5][]{% - \leavevmode% - \ifpdf\else% - \ifthenelse{\isundefined{\includegraphics}}{\@anim@missing{graphics}}{}% - \fi% - \@anim@reset% to default settings - \setkeys{anim@user}{#1}% - \def\@anim@base{#3}% - \def\@anim@first{#4}% - \def\@anim@last{#5}% - % - %create button faces if necessary - \if@anim@controls% - \if@anim@buttonsmade\else% - \@anim@makebuttons% - \setboolean{@anim@buttonsmade}{true}% - \fi% - \fi% - %formatted (zero padded) animation no. - \edef\@anim@numform{\@anim@pad{1234}{\the\@anim@num}}% - \@anim@newkey{a\@anim@numform.hash}{}% empty XObject hash - \@anim@newkey{a\@anim@numform.fps}{#2}% - \@anim@newkey{a\@anim@numform.pauseat}{}% - % - %read all frames of the sequence - \@anim@curframe=\@anim@first% - \@anim@curframe@zb=0% - \loop% - \ifnum\@anim@curframe>\@anim@last\else% - %get file name extension of current file - \@anim@getext{% - \@anim@base\@anim@pad{\@anim@last}{\the\@anim@curframe}% - }% - %embed graphics - \@anim@ximage{\@anim@numform}{\the\@anim@curframe@zb}{% - \@anim@base\@anim@pad{\@anim@last}{\the\@anim@curframe}\@anim@ext% - }% - \advance\@anim@curframe by 1% - \advance\@anim@curframe@zb by 1% - \@anim@newkey{a\@anim@numform.frames}{\the\@anim@curframe@zb}% total number - \repeat% - \@anim@addtree{\@anim@numform}% create name tree - %insert animation widget & controls - \vtop{% - \offinterlineskip% - \hbox{\@anim@animwidget{\@anim@numform}}% - \if@anim@controls% - \setlength{\@anim@tmpdima}{\@anim@btnsize}% - \setlength{\@anim@tmpdima}{0.1\@anim@tmpdima}% - \vskip \@anim@tmpdima% - \hbox to \@anim@getkeyval{a\@anim@numform.wd} {% - \hss% - \@anim@buttonwidget{\@anim@numform}{EndLeft}{EndLeft}% - \@anim@buttonwidget{\@anim@numform}{StepLeft}{StepLeft}% - \if@anim@step\else% - \@anim@buttonwidget{\@anim@numform}{PlayPauseLeft}{PlayLeft}% - \@anim@buttonwidget{\@anim@numform}{PlayPauseRight}{PlayRight}% - \fi% - \@anim@buttonwidget{\@anim@numform}{StepRight}{StepRight}% - \@anim@buttonwidget{\@anim@numform}{EndRight}{EndRight}% - \if@anim@step\else% - \setlength{\@anim@tmpdima}{\@anim@btnsize}% - \setlength{\@anim@tmpdima}{0.3\@anim@tmpdima}% - \hskip \@anim@tmpdima% - \@anim@buttonwidget{\@anim@numform}{Minus}{Minus}% - \@anim@buttonwidget{\@anim@numform}{Reset}{Reset}% - \@anim@buttonwidget{\@anim@numform}{Plus}{Plus}% - \fi% - \hss% - }% - \fi% - }% - \global\advance\@anim@num by 1% -}% - -%calculates widget dimensions from natural ones, taking resizing options -%into account -\def\@anim@rescale#1{% #1:formatted anim number - %original totalheight - \setlength{\@anim@tmpdima}{\@anim@getkeyval{a#1.ht}}% - \addtolength{\@anim@tmpdima}{\@anim@getkeyval{a#1.dp}}% - \edef\@anim@th{\the\@anim@tmpdima}% - %rescale height & depth - \ifthenelse{% - \NOT\equal{\@anim@boxheight}{}\AND% - \NOT\equal{\@anim@boxdepth}{}% - }{% - \@anim@newkey{a#1.ht}{\@anim@boxheight}% - \@anim@newkey{a#1.dp}{\@anim@boxdepth}% - }{% - \ifthenelse{\NOT\equal{\@anim@boxheight}{}}{% - \@anim@newkey{a#1.ht}{\@anim@boxheight}% - }{% - \ifthenelse{\NOT\equal{\@anim@boxdepth}{}}{% - \@anim@newkey{a#1.dp}{\@anim@boxdepth}% - }{%if neither height nor depth are given but width is, rescale - %ht & dp to keep aspect ratio - \ifthenelse{\NOT\equal{\@anim@boxwidth}{}}{% - \setlength{\@anim@tmpdima}{% - \@anim@getkeyval{a#1.ht}% - *\ratio{\@anim@boxwidth}{\@anim@getkeyval{a#1.wd}}% - }\@anim@newkey{a#1.ht}{\the\@anim@tmpdima}% - \setlength{\@anim@tmpdima}{% - \@anim@getkeyval{a#1.dp}% - *\ratio{\@anim@boxwidth}{\@anim@getkeyval{a#1.wd}}% - }\@anim@newkey{a#1.dp}{\the\@anim@tmpdima}% - }{}% - }% - }% - }% - \ifthenelse{\NOT\equal{\@anim@boxwidth}{}}{%rescale width - \@anim@newkey{a#1.wd}{\@anim@boxwidth}% - }{% - %if width is not given, but either height or depth are, scale - %width to keep aspect ratio - \ifthenelse{% - \NOT\equal{\@anim@boxheight}{}\OR% - \NOT\equal{\@anim@boxdepth}{}% - }{% - \setlength{\@anim@tmpdima}{% - \@anim@getkeyval{a#1.wd}% - *\ratio{% - \@anim@getkeyval{a#1.ht}+\@anim@getkeyval{a#1.dp}% - }{\@anim@th}% - }% - \@anim@newkey{a#1.wd}{\the\@anim@tmpdima}% - }{}% - }% - %apply scaling by a factor - \setlength{\@anim@tmpdima}{\@anim@getkeyval{a#1.wd}}% - \setlength{\@anim@tmpdima}{\@anim@boxscale\@anim@tmpdima}% - \@anim@newkey{a#1.wd}{\the\@anim@tmpdima}% - \setlength{\@anim@tmpdima}{\@anim@getkeyval{a#1.ht}}% - \setlength{\@anim@tmpdima}{\@anim@boxscale\@anim@tmpdima}% - \@anim@newkey{a#1.ht}{\the\@anim@tmpdima}% - \setlength{\@anim@tmpdima}{\@anim@getkeyval{a#1.dp}}% - \setlength{\@anim@tmpdima}{\@anim@boxscale\@anim@tmpdima}% - \@anim@newkey{a#1.dp}{\the\@anim@tmpdima}% -} - -%creates animation widget -\ifpdf - \def\@anim@animwidget#1{% - \@anim@rescale{#1}% - %create JavaScript objects - \@anim@pojscript{#1}% to be executed on PO event - \@anim@otherjscript{#1}% on other events in the AA dict - %default appearance - \def\@anim@posterframe{none}% - \ifx\@anim@poster\@anim@posterframe% - \def\@anim@defaultap{}% - \else% - \edef\@anim@defaultap{% - /AP <</N \@anim@getkeyval{a#1.poster}>>% - }% - \fi - \pdfannot - width \@anim@getkeyval{a#1.wd} - height \@anim@getkeyval{a#1.ht} - depth \@anim@getkeyval{a#1.dp} - {% - /Subtype/Widget% - /F 4% allow printing - /FT/Btn/Ff 65536% push button - /T (anm@#1)% - /BS <</W 0>>% - /H/N% - \@anim@defaultap% - /MK <<% - /TP 1% icon, no caption - /BG [\@anim@bg]% - /IF <</SW/A/S/A>>% scale icon freely within widget - >>% - /AA <<% bind JavaScripts to trigger events - /PO <</S/JavaScript/JS \@anim@getkeyval{a#1.pojscript}\space 0 R>>% - \@anim@getkeyval{a#1.otherjscript}% - >>% - }% - \hbox to \@anim@getkeyval{a#1.wd} {% - \vrule width 0pt height \@anim@getkeyval{a#1.ht} - depth \@anim@getkeyval{a#1.dp}% - \hss% - }% - }% -\else - \def\@anim@animwidget#1{% - \@anim@rescale{#1}% - \def\@anim@oldunitlength{\the\unitlength}% - \setlength{\unitlength}{1pt}% - %mark annotation rectangle - \begin{picture}(0,0)% - \setlength{\@anim@tmpdima}{\@anim@getkeyval{a#1.dp}}% - \put(0,-\strip@pt\@anim@tmpdima){% - \special{ps: - currentpoint /wid@lly exch def /wid@llx exch def - }% - }% - \setlength{\@anim@tmpdima}{\@anim@getkeyval{a#1.wd}}% - \setlength{\@anim@tmpdimb}{\@anim@getkeyval{a#1.ht}}% - \put(\strip@pt\@anim@tmpdima,\strip@pt\@anim@tmpdimb){% - \special{ps: - currentpoint /wid@ury exch def /wid@urx exch def - }% - }% - \end{picture}% - \setlength{\unitlength}{\@anim@oldunitlength}% - \@anim@pojscript{#1}% - \@anim@otherjscript{#1}% - \def\@anim@posterframe{none}% - \ifx\@anim@poster\@anim@posterframe% - \def\@anim@defaultap{}% - \else% - \edef\@anim@defaultap{% - /AP <</N {\@anim@getkeyval{a#1.poster}}>>% - }% - \fi - \special{ps: - mark - /Rect [wid@llx wid@lly wid@urx wid@ury]% - /Subtype/Widget% - /F 4% - /FT/Btn/Ff 65536% - /T (anm@#1)% - /BS <</W 0>>% - /H/N% - \@anim@defaultap% - /MK <<% - /TP 1 - /BG [\@anim@bg]% - /IF <</SW/A/S/A>>% - >>% - /AA <<% - /PO <</S/JavaScript/JS {a#1@pojscript}>>% - \@anim@getkeyval{a#1.otherjscript}% - >>% - /ANN pdfmark - }% - \hbox to \@anim@getkeyval{a#1.wd} {% - \vrule width 0pt height \@anim@getkeyval{a#1.ht} - depth \@anim@getkeyval{a#1.dp}% - \hss% - }% - } -\fi - -%creates control button widget -\ifpdf - \def\@anim@buttonwidget#1#2#3{% #1: zero padded anim num, #2: action, #3: icon - \@anim@upjscript{#1}{#2}% JavaScript actions for ButtonUp events - %button size corresponds to current font size - \setlength{\@anim@tmpdima}{\@anim@btnsize}% - \hbox to \@anim@tmpdima {% - \pdfannot - width \@anim@tmpdima - height \@anim@tmpdima - depth 0pt - {% - /Subtype/Widget% - /FT/Btn/Ff 65536% push button - /T (btn@#1@#2)% - /BS <</W 0>>% - /H/I% - /AP <</N \@anim@getkeyval{btn#3}>>% - /MK <<% - /TP 1% - /BG [\@anim@btnbg]% - /IF <</SW/A/S/A>>% scale button face icon freely within widget - >>% - /A <</S/JavaScript/JS (\@anim@getkeyval{a#1.upjscript})>>% - }% - \vrule width 0pt height \@anim@tmpdima depth 0pt% - \hss% - }% - }% -\else - \def\@anim@buttonwidget#1#2#3{% - \@anim@upjscript{#1}{#2}% - \setlength{\@anim@tmpdima}{\@anim@btnsize}% - \def\@anim@oldunitlength{\the\unitlength}% - \setlength{\unitlength}{1pt}% - \begin{picture}(0,0)% - \put(0,0){% - \special{ps: - currentpoint /wid@lly exch def /wid@llx exch def - }% - }% - \put(\strip@pt\@anim@tmpdima,\strip@pt\@anim@tmpdima){% - \special{ps: - currentpoint /wid@ury exch def /wid@urx exch def - }% - }% - \end{picture}% - \setlength{\unitlength}{\@anim@oldunitlength}% - \special{ps: - mark - /Rect [wid@llx wid@lly wid@urx wid@ury] - /Subtype/Widget - /FT/Btn/Ff 65536 - /T (btn@#1@#2) - /BS <</W 0>> - /H/I - /AP <</N {btn#3}>>% - /MK << - /TP 1 - /BG [\@anim@btnbg] - /IF <</SW/A/S/A>> - >>% - /A <</S/JavaScript/JS (\@anim@getkeyval{a#1.upjscript})>>% - /ANN pdfmark - }% - \hbox to \the\@anim@tmpdima {% - \vrule width 0pt height \the\@anim@tmpdima\space depth 0pt% - \hss% - }% - } -\fi - -\newboolean{@anim@inside} % for checking whether we are inside the -\setboolean{@anim@inside}{false} % `animateinline' environment -\newboolean{@anim@pauseframes} % true when \newframe* is being used - -%user environment for animating inline graphics -% #1: options -% #2: frame rate (fps) -\newenvironment{animateinline}[2][]{% - \leavevmode% - \setboolean{@anim@inside}{true}% - \@anim@reset% to default settings - \setkeys{anim@user}{#1}% - %create button faces if necessary - \if@anim@controls% - \if@anim@buttonsmade\else% - \@anim@makebuttons% - \setboolean{@anim@buttonsmade}{true}% - \fi% - \fi% - %formatted (zero padded animation number) - \edef\@anim@numform{\@anim@pad{1234}{\the\@anim@num}}% - \@anim@newkey{a\@anim@numform.hash}{}% empty XObject hash - \@anim@newkey{a\@anim@numform.fps}{#2}% - \@anim@newkey{a\@anim@numform.pauseat}{}% - \global\@anim@curframe@zb=0% - \@anim@beginframe% - \ignorespaces% -}{% - \unskip% - %formatted (zero padded) animation number & current zero based frame no. - \edef\@anim@numform{\@anim@pad{1234}{\the\@anim@num}}% - \@anim@endframe{\@anim@numform}{\the\@anim@curframe@zb}% - \global\advance\@anim@curframe@zb by 1% - \@anim@newkey{a\@anim@numform.frames}{\the\@anim@curframe@zb}% total number - \@anim@addtree{\@anim@numform}% create name tree - %insert animation widget & controls - \vtop{% - \offinterlineskip% - \hbox{\@anim@animwidget{\@anim@numform}}% - \if@anim@controls% - \setlength{\@anim@tmpdima}{\@anim@btnsize}% - \setlength{\@anim@tmpdima}{0.1\@anim@tmpdima}% - \vskip \@anim@tmpdima% - \hbox to \@anim@getkeyval{a\@anim@numform.wd} {% - \hss% - \@anim@buttonwidget{\@anim@numform}{EndLeft}{EndLeft}% - \@anim@buttonwidget{\@anim@numform}{StepLeft}{StepLeft}% - \if@anim@step\else% - \@anim@buttonwidget{\@anim@numform}{PlayPauseLeft}{PlayLeft}% - \@anim@buttonwidget{\@anim@numform}{PlayPauseRight}{PlayRight}% - \fi% - \@anim@buttonwidget{\@anim@numform}{StepRight}{StepRight}% - \@anim@buttonwidget{\@anim@numform}{EndRight}{EndRight}% - \if@anim@step\else% - \setlength{\@anim@tmpdima}{\@anim@btnsize}% - \setlength{\@anim@tmpdima}{0.3\@anim@tmpdima}% - \hskip \@anim@tmpdima% - \@anim@buttonwidget{\@anim@numform}{Minus}{Minus}% - \@anim@buttonwidget{\@anim@numform}{Reset}{Reset}% - \@anim@buttonwidget{\@anim@numform}{Plus}{Plus}% - \fi% - \hss% - }% - \fi% - }% - \global\advance\@anim@num by 1% - \setboolean{@anim@inside}{false}% -} - -%usercommand for use within `animateinline' environment; -%terminates the current frame and starts a new one -\def\newframe{% - \unskip% - \if@anim@inside\else% - \PackageError{animate-noocg}{% - \protect\newframe\space cannot be used outside\MessageBreak% - `animateinline' environment - }{}% - \fi% - \edef\@anim@numform{\@anim@pad{1234}{\the\@anim@num}}% - \@anim@endframe{\@anim@numform}{\the\@anim@curframe@zb}% - \@ifstar{% - \if@anim@step\else% - %build JavaScript commands to fill the `pauseAt' array - \@anim@newkey{a\@anim@numform.pauseat}{% - \@anim@getkeyval{a\@anim@numform.pauseat} - a\@anim@numform.pauseAt[\the\@anim@curframe@zb]=1;% - }% - \setboolean{@anim@pauseframes}{true}% - \fi% - \global\advance\@anim@curframe@zb by 1% - \@anim@beginframe% - \ignorespaces% - }{% - \global\advance\@anim@curframe@zb by 1% - \@anim@beginframe% - \ignorespaces% - }% -}% - -%starts a new frame -\def\@anim@beginframe{% - \begin{lrbox}{\@anim@box}% store the graphics in a box -} - -%terminates current frame -\def\@anim@endframe#1#2{% - \end{lrbox}% - \message{< a\the\@anim@num, fr#2}% - %determine size of graphics - \ifnum #2=0% - \@anim@newkey{a#1.wd}{\the\wd\@anim@box}% - \ifdim\wd\@anim@box=0pt% - \PackageError{animate-noocg}{% - The first frame must not have zero width% - }{% - Possible reason: \protect\begin{animateinline} - immediately followed by \protect\newframe.% - }% - \fi% - \@anim@newkey{a#1.ht}{\the\ht\@anim@box}% - \@anim@newkey{a#1.dp}{\the\dp\@anim@box}% - \ifdim\ht\@anim@box=0pt% - \ifdim\dp\@anim@box=0pt% - \PackageError{animate-noocg}{% - The first frame must not have zero height% - }{}% - \fi% - \fi% - \fi% - %now create Form XObject of box contents - \@anim@xinline{#1}{#2}{\@anim@box}% - \message{>}% -} - -%prints zero padded integers -% #1: arbitrary, non-zero integer number as template specifying the -% width, e. g. `987654' for a width of 6 digits -% #2: the number to be formatted (zero padded) -\def\@anim@pad#1#2{% - \@anim@@pad{\@anim@template{0}{#1}}{#2}% -} -%low level macros used by \@anim@pad -\def\@anim@@pad#1#2{% #1: string of zeros specifying width, #2 number - \ifnum1#2<1#1 - \@anim@@pad{#1}{0#2}% - \else% - #2% - \fi% -}% -\def\@anim@template#1#2{% create template (stringed zeros) from given num - \ifnum10#1<1#2 - \@anim@template{0#1}{#2}% - \else% - #1% - \fi% -}% - -%command options -%setting the widget size -\define@key{anim@user}{width}{% - \setlength{\@anim@tmpdima}{#1}% - \xdef\@anim@boxwidth{\the\@anim@tmpdima}% -} -\define@key{anim@user}{height}{% - \setlength{\@anim@tmpdima}{#1}% - \xdef\@anim@boxheight{\the\@anim@tmpdima}% -} -\define@key{anim@user}{depth}{% - \setlength{\@anim@tmpdima}{#1}% - \xdef\@anim@boxdepth{\the\@anim@tmpdima}% -} -\define@key{anim@user}{scale}{% - \gdef\@anim@boxscale{#1}% -} - -\define@key{anim@user}{screenbg}{%background colour - \gdef\@anim@bg{#1}% -} -\define@key{anim@user}{buttonsize}{% - \gdef\@anim@btnsize{#1}% -} -\define@key{anim@user}{buttonbg}{%background of buttons - \gdef\@anim@btnbg{#1}% -} -\newboolean{@anim@controls} -\setboolean{@anim@controls}{false} -\define@key{anim@user}{controls}[true]{% - \setboolean{@anim@controls}{#1}% -} -\newboolean{@anim@loop} -\setboolean{@anim@loop}{false} -\define@key{anim@user}{loop}[true]{% - \setboolean{@anim@loop}{#1}% -} -\newboolean{@anim@autoplay} %doen't work anymore in AR8 -\setboolean{@anim@autoplay}{false} -\define@key{anim@user}{autoplay}[true]{% - \setboolean{@anim@autoplay}{#1}% - \if@anim@autoplay - \setboolean{@anim@autoresume}{false} - \fi% -} -\newboolean{@anim@autoresume} -\setboolean{@anim@autoresume}{false} -\define@key{anim@user}{autoresume}[true]{% - \setboolean{@anim@autoresume}{#1}% - \if@anim@autoresume\setboolean{@anim@autoplay}{false}\fi% -} -\newboolean{@anim@autopause} -\setboolean{@anim@autopause}{false} -\define@key{anim@user}{autopause}[true]{% - \setboolean{@anim@autopause}{#1}% -} -\newboolean{@anim@palindrome} -\setboolean{@anim@palindrome}{false} -\define@key{anim@user}{palindrome}[true]{% - \setboolean{@anim@palindrome}{#1}% -} -%default frame to be shown if animation is not activated -\define@key{anim@user}{poster}[first]{% | none | last - \ifthenelse{% correct wrong input to `none' - \equal{#1}{first}\OR% - \equal{#1}{last}% - }{% - \gdef\@anim@poster{#1}% - }{% - \gdef\@anim@poster{none}% - }% -} -\newboolean{@anim@step} -\setboolean{@anim@step}{false} -\define@key{anim@user}{step}[true]{% - \setboolean{@anim@step}{#1}% -} - -%macro to reset macros and booleans -\def\@anim@reset{% - \gdef\@anim@boxscale{1.0}% - \gdef\@anim@boxdepth{}% - \gdef\@anim@boxheight{}% - \gdef\@anim@boxwidth{}% - \xdef\@anim@bg{\@anim@@bg}% - \xdef\@anim@btnbg{\@anim@@btnbg}% - \xdef\@anim@btnsize{\@anim@@btnsize}% - \xdef\@anim@poster{\@anim@@poster}% - \let\if@anim@controls=\if@anim@@controls% - \let\if@anim@loop=\if@anim@@loop% - \let\if@anim@autoplay=\if@anim@@autoplay% - \let\if@anim@autoresume=\if@anim@@autoresume% - \let\if@anim@autopause=\if@anim@@autopause% - \let\if@anim@palindrome=\if@anim@@palindrome% - \let\if@anim@step=\if@anim@@step% - \setboolean{@anim@pauseframes}{false}% -} - -%package options -\def\@anim@@bg{}% -\define@key{anim@pkg}{screenbg}{% - \gdef\@anim@@bg{#1}% -} -\def\@anim@@btnsize{1.44em}% -\define@key{anim@pkg}{buttonsize}{% - \gdef\@anim@@btnsize{#1}% -} -\def\@anim@@btnbg{}% -\define@key{anim@pkg}{buttonbg}{% - \gdef\@anim@@btnbg{#1}% -} -\newboolean{@anim@@controls} -\setboolean{@anim@@controls}{false}% -\define@key{anim@pkg}{controls}[true]{% - \setboolean{@anim@@controls}{#1}% -} -\newboolean{@anim@@loop} -\setboolean{@anim@@loop}{false}% -\define@key{anim@pkg}{loop}[true]{% - \setboolean{@anim@@loop}{#1}% -} -\newboolean{@anim@@autoplay} -\setboolean{@anim@@autoplay}{false} -\define@key{anim@pkg}{autoplay}[true]{% - \setboolean{@anim@@autoplay}{#1}% - \if@anim@@autoplay\setboolean{@anim@@autoresume}{false}\fi% -} -\newboolean{@anim@@autoresume} -\setboolean{@anim@@autoresume}{false} -\define@key{anim@pkg}{autoresume}[true]{% - \setboolean{@anim@@autoresume}{#1}% - \if@anim@@autoresume\setboolean{@anim@@autoplay}{false}\fi% -} -\newboolean{@anim@@autopause} -\setboolean{@anim@@autopause}{false} -\define@key{anim@pkg}{autopause}[true]{% - \setboolean{@anim@@autopause}{#1}% -} -\newboolean{@anim@@palindrome} -\setboolean{@anim@@palindrome}{false} -\define@key{anim@pkg}{palindrome}[true]{% - \setboolean{@anim@@palindrome}{#1}% -} -\gdef\@anim@@poster{first}% -\define@key{anim@pkg}{poster}[first]{% - \ifthenelse{% - \equal{#1}{first}\OR% - \equal{#1}{last}% - }{% - \gdef\@anim@@poster{#1}% - }{% - \gdef\@anim@@poster{none}% - }% -} -\newboolean{@anim@@step} -\setboolean{@anim@@step}{false} -\define@key{anim@pkg}{step}[true]{% - \setboolean{@anim@@step}{#1}% -} - -%process package options -\def\@anim@setpkgkeys#1{\setkeys{anim@pkg}{#1}} -\edef\@anim@pkgopts{{\@ptionlist{\@currname.\@currext}}} -\expandafter\@anim@setpkgkeys\@anim@pkgopts - -%JavaScript objects -%animation widget's PageOpen event -\ifpdf - \def\@anim@pojscript#1{% - \gdef\@anim@posterlast{last}% - \gdef\@anim@posternone{none}% - \immediate\pdfobj stream {\@anim@@pojscript{#1}}% - \@anim@newkey{a#1.pojscript}{\the\pdflastobj}% - } -\else - \def\@anim@pojscript#1{% - \gdef\@anim@posterlast{last}% - \gdef\@anim@posternone{none}% - \special{ps: - mark /_objdef {a#1@pojscript} /type/stream /OBJ pdfmark - mark {a#1@pojscript} (\@anim@@pojscript{#1}) /PUT pdfmark - }% - } -\fi -\def\@anim@@pojscript#1{% #1: formatted (zero padded) animation number -% console.show(); -% console.clear(); - \if@anim@controls - \if@anim@step\else - %get references to button face icons `Play' & `Pause' - if (typeof(icn)=='undefined') { - var icn = new Object(); - icn.playLeft = this.getIcon('btnPlayLeft'); - icn.pauseLeft = this.getIcon('btnPauseLeft'); - icn.pauseRight = this.getIcon('btnPauseRight'); - icn.playRight = this.getIcon('btnPlayRight'); - } - \fi - \fi - %create animation object - if (typeof(a#1)=='undefined') { - var a#1 = new Object(); - a#1.wid = this.getField('anm@#1'); %reference to animation widget - \if@anim@step\else - a#1.dtDefault=1000/(1e-6+Math.abs(\@anim@getkeyval{a#1.fps}));% - a#1.dt = a#1.dtDefault; - \fi - %get references to all animation frames - a#1.frame = new Array(); - for (i=0; i<\@anim@getkeyval{a#1.frames}; i++){ - a#1.frame[i] = this.getIcon('a#1f' + util.printf('\%06d', i)); - } - %set default frame - \ifx\@anim@poster\@anim@posterlast - %holds index of the frame to be displayed - a#1.cntr = \@anim@getkeyval{a#1.frames} -1; - \else % first & none - a#1.cntr = 0; - \fi - \if@anim@controls %references to button widgets - a#1.endLeft = this.getField('btn@#1@EndLeft'); - a#1.stepLeft = this.getField('btn@#1@StepLeft'); - \if@anim@step\else - a#1.playPauseLeft = this.getField('btn@#1@PlayPauseLeft'); - a#1.playPauseRight = this.getField('btn@#1@PlayPauseRight'); - a#1.minus = this.getField('btn@#1@Minus'); - a#1.plus = this.getField('btn@#1@Plus'); - a#1.reset = this.getField('btn@#1@Reset'); - \fi - a#1.stepRight = this.getField('btn@#1@StepRight'); - a#1.endRight = this.getField('btn@#1@EndRight'); - \fi - %playing state and direction - \if@anim@step - \if@anim@palindrome - a#1.playsRight=true; - \fi - \else - a#1.isPlaying = false; - a#1.playsRight=true; - a#1.isPaused = false; - \fi - \if@anim@pauseframes - %this array takes the frame numbers at which to pause playback - a#1.pauseAt = new Array(); - \@anim@getkeyval{a#1.pauseat} - \fi - %actions - a#1.actnEndLeft = function () { - \if@anim@step\else - try{app.clearInterval(a#1_int);}catch(e){} - a#1.isPlaying = false; - a#1.isPaused = false; %because it has been explicitely stopped - \if@anim@controls - a#1.playPauseLeft.buttonSetIcon(icn.playLeft); - a#1.playPauseRight.buttonSetIcon(icn.playRight); - \fi - \fi - a#1.cntr = 0; - a#1.wid.buttonSetIcon(a#1.frame[0]); - }; - a#1.actnEndRight = function () { - \if@anim@step\else - try{app.clearInterval(a#1_int);}catch(e){} - a#1.isPlaying = false; - a#1.isPaused = false; - \if@anim@controls - a#1.playPauseLeft.buttonSetIcon(icn.playLeft); - a#1.playPauseRight.buttonSetIcon(icn.playRight); - \fi - \fi - a#1.cntr = \@anim@getkeyval{a#1.frames} - 1; - a#1.wid.buttonSetIcon(a#1.frame[a#1.cntr]); - }; - \if@anim@palindrome - a#1.actnNext = function () { - \if@anim@step\else - \if@anim@pauseframes - if(a#1.isPlaying && a#1.pauseAt[a#1.cntr+1]){a#1.actnPause();} - \fi - \fi - if(a#1.cntr == \@anim@getkeyval{a#1.frames} - 1){ - \if@anim@step - a#1.playsRight=false; - \else - if(a#1.isPlaying){a#1.isPaused = true; a#1.actnPlayLeft();} - \fi - }else{ - a#1.cntr++; - a#1.wid.buttonSetIcon(a#1.frame[a#1.cntr]); - } - }; - a#1.actnPrev = function () { - \if@anim@step\else - \if@anim@pauseframes - if(a#1.isPlaying && a#1.pauseAt[a#1.cntr-1]){a#1.actnPause();} - \fi - \fi - if(a#1.cntr == 0){ - \if@anim@step - a#1.playsRight=true; - \else - if(a#1.isPlaying){a#1.isPaused = true; a#1.actnPlayRight();} - \fi - }else{ - a#1.cntr--; - a#1.wid.buttonSetIcon(a#1.frame[a#1.cntr]); - } - }; - \else - a#1.actnNext = function () { - \if@anim@step\else - \if@anim@pauseframes - if(a#1.isPlaying && a#1.pauseAt[a#1.cntr+1]){a#1.actnPause();} - \fi - \fi - if(a#1.cntr == \@anim@getkeyval{a#1.frames} - 1){ - \if@anim@step\else - \if@anim@loop - if(a#1.isPlaying){a#1.cntr = 0;} - \else - try{app.clearInterval(a#1_int);}catch(e){} - a#1.isPlaying = false; - \if@anim@controls - a#1.playPauseLeft.buttonSetIcon(icn.playLeft); - a#1.playPauseRight.buttonSetIcon(icn.playRight); - \fi - \fi - \fi - }else{a#1.cntr++;} - a#1.wid.buttonSetIcon(a#1.frame[a#1.cntr]); - }; - a#1.actnPrev = function () { - \if@anim@step\else - \if@anim@pauseframes - if(a#1.isPlaying && a#1.pauseAt[a#1.cntr-1]){a#1.actnPause();} - \fi - \fi - if(a#1.cntr == 0){ - \if@anim@step\else - \if@anim@loop - if(a#1.isPlaying){a#1.cntr = \@anim@getkeyval{a#1.frames} - 1;} - \else - try{app.clearInterval(a#1_int);}catch(e){} - a#1.isPlaying = false; - \if@anim@controls - a#1.playPauseLeft.buttonSetIcon(icn.playLeft); - a#1.playPauseRight.buttonSetIcon(icn.playRight); - \fi - \fi - \fi - }else{a#1.cntr--;} - a#1.wid.buttonSetIcon(a#1.frame[a#1.cntr]); - }; - \fi - \if@anim@step\else - a#1.actnPause = function () { - try{app.clearInterval(a#1_int);}catch(e){} - a#1.isPlaying = false; - a#1.isPaused = true; - \if@anim@controls - a#1.playPauseLeft.buttonSetIcon(icn.playLeft); - a#1.playPauseRight.buttonSetIcon(icn.playRight); - \fi - }; - a#1.actnPlayRight = function () { - try{app.clearInterval(a#1_int);}catch(e){} - if(!a#1.isPaused){a#1.actnEndLeft();} - a#1.playsRight = true; - a#1.isPlaying = true; - a#1.isPaused = false; - \if@anim@controls - a#1.playPauseLeft.buttonSetIcon(icn.pauseLeft); - a#1.playPauseRight.buttonSetIcon(icn.pauseRight); - \fi - a#1_int = app.setInterval('a#1.actnNext()', a#1.dt); - }; - a#1.actnPlayLeft = function () { - try{app.clearInterval(a#1_int);}catch(e){} - if(!a#1.isPaused){a#1.actnEndRight();} - a#1.playsRight = false; - a#1.isPlaying = true; - a#1.isPaused = false; - \if@anim@controls - a#1.playPauseLeft.buttonSetIcon(icn.pauseLeft); - a#1.playPauseRight.buttonSetIcon(icn.pauseRight); - \fi - a#1_int = app.setInterval('a#1.actnPrev()', a#1.dt); - }; - \if@anim@controls - a#1.actnIncr = function () { % speed up animation - try{app.clearInterval(a#1_int);}catch(e){} - a#1.dt /= 1.2; - if (a#1.isPlaying) { - if (a#1.playsRight) { - a#1_int = app.setInterval('a#1.actnNext()', a#1.dt); - }else{ - a#1_int = app.setInterval('a#1.actnPrev()', a#1.dt); - } - } - }; - a#1.actnDecr = function () { % slow down animation - a#1.dt *= 1.2; - try{app.clearInterval(a#1_int);}catch(e){} - if (a#1.isPlaying) { - if (a#1.playsRight) { - a#1_int = app.setInterval('a#1.actnNext()', a#1.dt); - }else{ - a#1_int = app.setInterval('a#1.actnPrev()', a#1.dt); - } - } - }; - a#1.actnReset = function () { % reset to default speed - a#1.dt = a#1.dtDefault; - try{app.clearInterval(a#1_int);}catch(e){} - if (a#1.isPlaying) { - if (a#1.playsRight) { - a#1_int = app.setInterval('a#1.actnNext()', a#1.dt); - }else{ - a#1_int = app.setInterval('a#1.actnPrev()', a#1.dt); - } - } - }; - \fi - \fi - } - \if@anim@step\else - \if@anim@autoplay - if (a#1.playsRight){ - a#1.actnPlayRight(); - }else{ - a#1.actnPlayLeft(); - } - \fi - \if@anim@autoresume - if(a#1.isPaused){ - if(a#1.playsRight){a#1.actnPlayRight();}else{a#1.actnPlayLeft();} - } - \fi - \fi -} -%other trigger events in the anim widget's AA dictionary -\def\@anim@otherjscript#1{% - \def\@anim@posterframe{last}% - \@anim@newkey{a#1.otherjscript}{% - /PC <</S/JavaScript/JS (% PageClose - \if@anim@autopause% - \if@anim@step\else - if(a#1.isPlaying||a#1.isPaused){a#1.actnPause();}% - else{% - \fi% - \fi% - \ifx\@anim@poster\@anim@posterframe - a#1.actnEndRight();% - \else - a#1.actnEndLeft();% - \fi% - \if@anim@autopause% - \if@anim@step\else - } - \fi% - \fi% - )>>% - \if@anim@step\else% - /D <</S/JavaScript/JS (% pause on MouseDown - %disable focus rectangle - app.focusRect = false;% - if(a#1.isPlaying) {a#1.actnPause();}% - )>>% - \fi% - /U <</S/JavaScript/JS (% play/resume on MouseUp - \if@anim@step - \if@anim@palindrome - if (a#1.playsRight){% - a#1.actnNext();% - }else{% - a#1.actnPrev();% - }% - \else - if(a#1.cntr == \@anim@getkeyval{a#1.frames} - 1){% - a#1.actnEndLeft();% - }else{% - a#1.actnNext();% - }% - \fi - \else - if (a#1.playsRight){% - a#1.actnPlayRight();% - }else{% - a#1.actnPlayLeft();% - }% - \fi - )>>% - }% -} -%actions for control buttons -\def\@anim@upjscript#1#2{% - \def\@anim@action{#2}% - \def\@anim@EndLeft{EndLeft}% - \def\@anim@StepLeft{StepLeft}% - \def\@anim@PlayPauseLeft{PlayPauseLeft}% - \def\@anim@PlayPauseRight{PlayPauseRight}% - \def\@anim@StepRight{StepRight}% - \def\@anim@EndRight{EndRight}% - \def\@anim@Minus{Minus}% - \def\@anim@Reset{Reset}% - \def\@anim@Plus{Plus}% - \@anim@newkey{a#1.upjscript}{% - app.focusRect = false;% - \ifx\@anim@action\@anim@EndLeft - a#1.actnEndLeft();% - \else% - \ifx\@anim@action\@anim@StepLeft - \if@anim@step - a#1.actnPrev();% - \else - if(!a#1.isPlaying){a#1.isPaused = true; a#1.actnPrev();}% - \fi - \else% - \ifx\@anim@action\@anim@PlayPauseLeft - if(a#1.isPlaying) {a#1.actnPause();}% - else{a#1.actnPlayLeft();}% - \else% - \ifx\@anim@action\@anim@PlayPauseRight - if(a#1.isPlaying) {a#1.actnPause();}% - else{a#1.actnPlayRight();}% - \else% - \ifx\@anim@action\@anim@StepRight - \if@anim@step - a#1.actnNext();% - \else - if(!a#1.isPlaying){a#1.isPaused = true; a#1.actnNext();}% - \fi - \else% - \ifx\@anim@action\@anim@EndRight - a#1.actnEndRight();% - \else% - \ifx\@anim@action\@anim@Minus - a#1.actnDecr();% - \else% - \ifx\@anim@action\@anim@Reset - a#1.actnReset();% - \else% - \ifx\@anim@action\@anim@Plus - a#1.actnIncr();% - \fi\fi\fi\fi\fi\fi\fi\fi\fi% - }% -} diff --git a/Master/texmf-dist/tex/latex/animate/animate.sty b/Master/texmf-dist/tex/latex/animate/animate.sty index 8b774b6a056..d2884911ab7 100644 --- a/Master/texmf-dist/tex/latex/animate/animate.sty +++ b/Master/texmf-dist/tex/latex/animate/animate.sty @@ -13,7 +13,7 @@ % Supports LaTeX->dvips->ps2pdf or pdfLaTeX workflows. \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{animate}[2008/04/01] +\ProvidesPackage{animate}[2008/05/09] %test for e-TeX \ifx\eTeXversion\@undefined% @@ -123,7 +123,7 @@ /OCGs \the\@anim@@ocgs\space 0 R /D << /BaseState/OFF /ON \the\@anim@@posterocgs\space 0 R - /Order \the\@anim@@ocgs\space 0 R +% /Order \the\@anim@@ocgs\space 0 R >> >> } @@ -157,7 +157,10 @@ >> /OCProperties << /OCGs {@anim@ocgs} - /D <</BaseState/OFF /ON {@anim@posterocgs} /Order {@anim@ocgs}>> + /D << + /BaseState/OFF /ON {@anim@posterocgs} +% /Order {@anim@ocgs} + >> >> >> /PUT pdfmark } @@ -212,16 +215,20 @@ %#4: page number of multipage pdf \ifthenelse{\equal{\@anim@fileknown{#3}{#4}}{!}}{% new file to be embedded \@anim@filebox{#3}{#4}% store file in a box + \@anim@getsize{\@anim@box}% + \ifnum#2=0 + \@anim@scale% scale animation widget + \fi% \@anim@xinline{#1}{#2}{\@anim@box}{!}% delegate Form XObject creation \ifx\@anim@gropts\@empty\if@anim@multipdf\message{<#4>}\fi\fi% \@anim@makefileknown{#3}{#4}{\@anim@lastxform}% keep form xobject number }{% file known, re-use existing form xobject \ifnum#2=0 \@anim@filebox{#3}{#4}% for size determination of first frame - \@anim@xinline{#1}{#2}{\@anim@box}{\@anim@fileknown{#3}{#4}}% - \else% - \@anim@xinline{#1}{#2}{}{\@anim@fileknown{#3}{#4}}% + \@anim@getsize{\@anim@box}% + \@anim@scale% \fi% + \@anim@xinline{#1}{#2}{}{\@anim@fileknown{#3}{#4}}% }% } }{ @@ -229,15 +236,19 @@ %#4: not used \ifthenelse{\equal{\@anim@fileknown{#3}{#1}}{!}}{%file is new to current \@anim@filebox{#3}{}% store file in a box animation + \@anim@getsize{\@anim@box}% + \ifnum#2=0 + \@anim@scale% + \fi% \@anim@xinline{#1}{#2}{\@anim@box}{!}% delegate Form XObject creation \@anim@makefileknown{#3}{#1}{\@anim@lastxform}% keep form xobject ref }{%file already used in the current animation, re-use existing form xobject \ifnum#2=0 \@anim@filebox{#3}{}% for size determination of first frame - \@anim@xinline{#1}{#2}{\@anim@box}{\@anim@fileknown{#3}{#1}}% - \else% - \@anim@xinline{#1}{#2}{}{\@anim@fileknown{#3}{#1}}% + \@anim@getsize{\@anim@box}% + \@anim@scale% \fi% + \@anim@xinline{#1}{#2}{}{\@anim@fileknown{#3}{#1}}% }% } } @@ -249,18 +260,10 @@ %#1: @anim@num, #2:@anim@curframe@zb, #3: empty (`') or box number, %#4: `!' or form xobj identifier \def\@anim@xinline#1#2#3#4{% - \ifnum#2=0 %measuring the size of the box (first frame only) - \xdef\@anim@animwidth{\strip@pt\wd#3}% - \xdef\@anim@animheight{\strip@pt\ht#3}% - \xdef\@anim@animdepth{\strip@pt\dp#3}% - \setlength{\@anim@tmpdima}{\ht#3}% - \addtolength{\@anim@tmpdima}{\dp#3}% - \xdef\@anim@animtotalheight{\strip@pt\@anim@tmpdima}% - \fi% \ifthenelse{\equal{#4}{!}}{% %put graphics into XObject \global\setbox\@anim@box=\hbox{% - \raisebox{-\dp#3}[\@anim@animheight\p@][\@anim@animdepth\p@]{\box#3}% + \raisebox{-\dp#3}[\@anim@frameheight\p@][\@anim@framedepth\p@]{\box#3}% }% \immediate\pdfxform\@anim@box% \xdef\@anim@lastxform{\the\pdflastxform}% @@ -277,25 +280,17 @@ } \else \def\@anim@xinline#1#2#3#4{% - \ifnum#2=0 - \xdef\@anim@animwidth{\strip@pt\wd#3}% - \xdef\@anim@animheight{\strip@pt\ht#3}% - \xdef\@anim@animdepth{\strip@pt\dp#3}% - \setlength{\@anim@tmpdima}{\ht#3}% - \addtolength{\@anim@tmpdima}{\dp#3}% - \xdef\@anim@animtotalheight{\strip@pt\@anim@tmpdima}% - \fi% \ifthenelse{\equal{#4}{!}}{% \begingroup% \setlength{\unitlength}{1pt}% %mark BBox of the graphics \begin{picture}(0,0)% - \put(0,-\@anim@animdepth){% + \put(0,-\@anim@framedepth){% \special{ps: currentpoint /frame@lly exch def /frame@llx exch def }% }% - \put(\@anim@animwidth,\@anim@animheight){% + \put(\@anim@framewidth,\@anim@frameheight){% \special{ps: currentpoint /frame@ury exch def /frame@urx exch def }% @@ -387,54 +382,39 @@ } \fi -%create XObject which contains all frames of the sequence -\ifpdf - \def\@anim@makecontainer#1{% #1:@anim@num - \setlength{\unitlength}{1pt}% - \global\setbox\@anim@box=\hbox{% - \pdfliteral{q}% - \begin{picture}(\@anim@animwidth,\@anim@animtotalheight)% - \end{picture}% - \pdfliteral{Q\@anim@content}% - }% - \immediate\pdfxform resources {/XObject <<\@anim@xobject>>}\@anim@box% - \xdef\@anim@container{\the\pdflastxform\space 0 R}% - } -\else - \def\@anim@makecontainer#1{% - \special{ps: - mark /_objdef {@anim@xobj#1} /type/stream /OBJ pdfmark - mark {@anim@xobj#1} (\@anim@content) /PUT pdfmark - mark {@anim@xobj#1} << - /Type/XObject/Subtype/Form/FormType 1 - /BBox [frame@llx frame@lly frame@urx frame@ury] - /Resources <</XObject <<\@anim@xobject>>>> - >> /PUT pdfmark - }% - } -\fi - -%intermediate container XObject, which represents one animation frame -%containing all the transparencies that compose the frame +%non-interactive Widget annotation, representing one frame of the animation \ifpdf \def\@anim@makeframe#1#2{% #1:@anim@num, #2:@anim@curframe@zb - \@anim@newocg{#1}{#2}% + %container XObject for all transparencies that compose the frame \setlength{\unitlength}{1pt}% \global\setbox\@anim@box=\hbox{% \pdfliteral{q}% - \begin{picture}(\@anim@animwidth,\@anim@animtotalheight)% + \begin{picture}(\@anim@framewidth,\@anim@frametotalheight)% \end{picture}% \pdfliteral{Q\@anim@getkeyval{frmcontent@#2}}% }% - \immediate\pdfxform attr {/OC\space\@anim@curocg} resources {% + \immediate\pdfxform resources {% /XObject <<\@anim@getkeyval{frmxobject@#2}>>}\@anim@box% - \xdef\@anim@xobject{\@anim@xobject\space /fr#2\space% - \the\pdflastxform\space 0 R}% - \xdef\@anim@content{\@anim@content\space q /fr#2\space Do Q}% + % + %frame widget, using the container XObject as its Appearance, + %associated with the just created OCG + \@anim@newocg{#1}{#2}% create new opt. content group (OCG) + \pdfannot + width \@anim@animwidth\p@ height \@anim@animheight\p@ + depth \@anim@animdepth\p@ + {% + /Subtype/Widget% + /OC \@anim@curocg + /F 4 % allow printing + /FT/Btn/Ff 65537% non-interactive push button + /BS <</W 0>>% + /AP <</N \the\pdflastxform\space 0 R>>% + /T (anm#1fr#2)% + }% } \else \def\@anim@makeframe#1#2{% - \@anim@newocg{#1}{#2}% + %container XObject \special{ps: mark /_objdef {@anim@anmfrm@#1@#2} /type/stream /OBJ pdfmark mark {@anim@anmfrm@#1@#2} (\@anim@getkeyval{frmcontent@#2}) /PUT @@ -442,12 +422,39 @@ mark {@anim@anmfrm@#1@#2} << /Type/XObject/Subtype/Form/FormType 1 /BBox [frame@llx frame@lly frame@urx frame@ury] - /OC {@anim@ocg@#1@#2} /Resources <</XObject <<\@anim@getkeyval{frmxobject@#2}>>>> >> /PUT pdfmark }% - \xdef\@anim@xobject{\@anim@xobject\space /fr#2\space {@anim@anmfrm@#1@#2}}% - \xdef\@anim@content{\@anim@content\space q /fr#2\space Do Q}% + % + %frame widget + \setlength{\unitlength}{1pt}% + \begin{picture}(0,0)% mark annotation rectangle + \put(0,-\@anim@animdepth){% + \special{ps: + currentpoint /wid@lly exch def /wid@llx exch def + }% + }% + \put(\@anim@animwidth,\@anim@animheight){% + \special{ps: + currentpoint /wid@ury exch def /wid@urx exch def + }% + }% + \end{picture}% + \@anim@newocg{#1}{#2}% + \special{ps: + mark + /_objdef {annot@\the\@anim@fieldnum}% + /Rect [wid@llx wid@lly wid@urx wid@ury]% + /Subtype/Widget% + /OC {@anim@ocg@#1@#2} + /F 4 + /FT/Btn/Ff 65537 + /BS <</W 0>>% + /AP <</N {@anim@anmfrm@#1@#2}>>% + /T (anm#1fr#2)% + /ANN pdfmark + }% + \global\advance\@anim@fieldnum by \@ne% } \fi @@ -970,13 +977,6 @@ %draftbox from savebox \def\@anim@draftbox#1{% #1: box number %get size - \xdef\@anim@animwidth{\strip@pt\wd#1}% - \xdef\@anim@animheight{\strip@pt\ht#1}% - \xdef\@anim@animdepth{\strip@pt\dp#1}% - \setlength{\@anim@tmpdima}{\ht#1}% - \addtolength{\@anim@tmpdima}{\dp#1}% - \xdef\@anim@animtotalheight{\strip@pt\@anim@tmpdima}% - \@anim@rescale% rescale box \setlength{\unitlength}{1pt}% \vtop{% draw boxes \offinterlineskip% @@ -1153,7 +1153,6 @@ \xdef\@anim@frames{\the\@anim@curframe@zb}% total number %build timeline from optional timeline file \if@anim@timeline\@anim@buildtmln{\the\@anim@num}\fi% - \@anim@makecontainer{\the\@anim@num}% create container XObject %insert animation widget & controls \@anim@insertwidgets{\the\@anim@num}{% \@anim@getkeyval{btncol:\@anim@bgcolour:\@anim@fgcolour}}% @@ -1192,9 +1191,24 @@ }% } +%measures natural dimensions of its box argument +\def\@anim@getsize#1{% + \xdef\@anim@framewidth{\strip@pt\wd#1}% + \xdef\@anim@frameheight{\strip@pt\ht#1}% + \xdef\@anim@framedepth{\strip@pt\dp#1}% + \setlength{\@anim@tmpdima}{\ht#1}% + \addtolength{\@anim@tmpdima}{\dp#1}% + \xdef\@anim@frametotalheight{\strip@pt\@anim@tmpdima}% +} + %calculates widget dimensions from natural ones, taking resizing options %into account -\def\@anim@rescale{% +\def\@anim@scale{% + %initial widget dimensions + \xdef\@anim@animwidth{\@anim@framewidth}% + \xdef\@anim@animheight{\@anim@frameheight}% + \xdef\@anim@animdepth{\@anim@framedepth}% + \xdef\@anim@animtotalheight{\@anim@frametotalheight}% %rescale height & depth \ifthenelse{% \NOT\equal{\@anim@boxheight}{}\AND% @@ -1278,10 +1292,10 @@ \xdef\@anim@animtotalheight{\strip@pt\@anim@tmpdima}% } -%creates animation widget +%interactive Widget annotation that is overlayed on the non-interactive +%frame Windgets \ifpdf \def\@anim@animwidget#1{% - \@anim@rescale% %create JavaScript objects \@anim@pojscript{#1}% to be executed on PO event \@anim@otherjscript{#1}% on other events in the AA dict @@ -1295,17 +1309,16 @@ depth \@anim@animdepth\p@ {% /Subtype/Widget% - /F 4% allow printing - /FT/Btn/Ff 65536% push button + /FT/Btn/Ff 65536% interactive push button /BS <</W 0>>% /H/N% - /AP <</N \@anim@container>>% - /T (anm@#1)% + /T (anm#1)% /AA <<% bind JavaScripts to trigger events /PO <</S/JavaScript/JS \@anim@pojscriptobj>>% \@anim@otherjscriptkey% >>% }% + %append widget reference to Fields array of the AcroForm dict \xdef\@anim@fields{\@anim@fields\space\the\pdflastannot\space 0 R}% \hbox to \@anim@animwidth\p@ {% \vrule width 0pt height \@anim@animheight\p@ depth \@anim@animdepth\p@% @@ -1314,7 +1327,6 @@ }% \else \def\@anim@animwidget#1{% - \@anim@rescale% \setlength{\unitlength}{1pt}% %mark annotation rectangle \begin{picture}(0,0)% @@ -1342,12 +1354,10 @@ /_objdef {annot@\the\@anim@fieldnum}% /Rect [wid@llx wid@lly wid@urx wid@ury]% /Subtype/Widget% - /F 4% /FT/Btn/Ff 65536% /BS <</W 0>>% /H/N% - /AP <</N {@anim@xobj#1}>>% - /T (anm@#1)% + /T (anm#1)% /AA <<% /PO <</S/JavaScript/JS {a#1@pojscript}>>% \@anim@otherjscriptkey% @@ -1473,7 +1483,6 @@ \xdef\@anim@frames{\the\@anim@curframe@zb}% total number %build timeline from optional timeline file \if@anim@timeline\@anim@buildtmln{\the\@anim@num}\fi% - \@anim@makecontainer{\the\@anim@num}% create container XObject %insert animation widget & controls \@anim@insertwidgets{\the\@anim@num}{% \@anim@getkeyval{btncol:\@anim@bgcolour:\@anim@fgcolour}}% @@ -1580,9 +1589,8 @@ \the\@anim@end% \end{lrbox}% \ifnum\@anim@skipfram=0 - %determine size of graphics + \@anim@getsize{\@anim@box}%determine size of graphics \ifnum #2=0 - \xdef\@anim@animwidth{\strip@pt\wd\@anim@box}% \ifdim\wd\@anim@box=0pt% \PackageError{animate}{% Contents of first frame must not have zero width% @@ -1591,8 +1599,6 @@ immediately followed by \protect\newframe% }% \fi% - \xdef\@anim@animheight{\strip@pt\ht\@anim@box}% - \xdef\@anim@animdepth{\strip@pt\dp\@anim@box}% \ifdim\ht\@anim@box=0pt% \ifdim\dp\@anim@box=0pt% \PackageError{animate}{% @@ -1600,6 +1606,7 @@ }{}% \fi% \fi% + \@anim@scale% %draw draftbox according to dimensions of the first frame \if@anim@draft\@anim@draftbox{\@anim@box}\fi% \fi% @@ -1705,7 +1712,7 @@ \edef\@anim@trlst{% \the\@anim@curframe@zb.\@anim@getkeyval{trlst@\the\@anim@curframe@zb}}% \expandafter\@anim@findmult\@anim@trlst,:\@nil% - %build frame xobject + %insert frame Widget \@anim@makeframe{#1}{\the\@anim@curframe@zb}% %clean-up \expandafter\@anim@resetmult\@anim@trlst,:\@nil% @@ -2146,8 +2153,6 @@ \global\let\if@anim@draft=\if@anim@@draft% \gdef\@anim@posterocg{}% \gdef\@anim@properties{}% - \gdef\@anim@xobject{}% - \gdef\@anim@content{}% \setboolean{@anim@pauseframes}{false}% \gdef\@anim@pauseat{}% \setboolean{@anim@chfps}{false}% |