diff options
-rw-r--r-- | Master/texmf-dist/doc/latex/animate/README | 13 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/animate/animate.pdf | bin | 1339279 -> 1324879 bytes | |||
-rwxr-xr-x | Master/texmf-dist/doc/latex/animate/animate.tex | 11 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/animate/animate.sty | 579 |
4 files changed, 424 insertions, 179 deletions
diff --git a/Master/texmf-dist/doc/latex/animate/README b/Master/texmf-dist/doc/latex/animate/README index 0593e6284db..79cd33cf01d 100644 --- a/Master/texmf-dist/doc/latex/animate/README +++ b/Master/texmf-dist/doc/latex/animate/README @@ -14,14 +14,8 @@ Description: inline (vector) graphics, such as LaTeX-picture, PSTricks or pgf/TikZ generated pictures, or just from typeset text. - The `animate' package relies on Optional Content Groups (OCG), also known as - PDF layers, which is a feature provided by the PDF-1.5 specification. Each - frame of an animation is associated with an OCG that is hidden or made - visible in a dynamic fashion by means of Adobe Reader's built-in JavaScript - engine. - It supports the usual PDF making workflows, i. e. pdfLaTeX and LaTeX -> - dvips -> ps2pdf (Ghostscript). + dvips -> ps2pdf (Ghostscript)/Distiller. The resulting PDF can be viewed in current Adobe Readers on all supported platforms. @@ -42,7 +36,8 @@ Usage: * Package options: autopause, autoplay, autoresume, controls, final, draft, buttonsize=<size>, buttonbg=<colour>, buttonfg=<colour>, - loop, palindrome, step, poster[=first | none | last] + loop, palindrome, step, poster[=first | none | last], + useocg \animategraphics[<options>]{<frame rate>}{<file basename>}{<first>}{<last>} @@ -60,7 +55,7 @@ Usage: draft, controls, buttonsize=<size>, buttonbg=<colour>, buttonfg=<colour>, loop, palindrome, step, measure, poster[=first | none | last], begin={<begin text>}, - end={<end text>}, timeline=<timeline file>, + end={<end text>}, timeline=<timeline file>, useocg, every=<number>, bb=<llx> <lly> <urx> <ury>, viewport=<llx> <lly> <urx> <ury>, trim=<left> <bottom> <right> <top> diff --git a/Master/texmf-dist/doc/latex/animate/animate.pdf b/Master/texmf-dist/doc/latex/animate/animate.pdf Binary files differindex e28f5629c57..0b07e45bab8 100644 --- a/Master/texmf-dist/doc/latex/animate/animate.pdf +++ b/Master/texmf-dist/doc/latex/animate/animate.pdf diff --git a/Master/texmf-dist/doc/latex/animate/animate.tex b/Master/texmf-dist/doc/latex/animate/animate.tex index efee41993f9..acef6dbfa3a 100755 --- a/Master/texmf-dist/doc/latex/animate/animate.tex +++ b/Master/texmf-dist/doc/latex/animate/animate.tex @@ -79,7 +79,7 @@ Package `animate' supports the usual PDF making workflows, i.\,e. pdf\LaTeX{} an The final PDF can be viewed in current Adobe Reader\textsuperscript{\scriptsize\textregistered}s on all supported platforms. -The `animate' package relies on Optional Content Groups (OCG), also known as PDF layers, which is a feature provided by the PDF-1.5 specification. Each frame of an animation is associated with an OCG that is hidden or made visible in a dynamic fashion by means of Adobe Reader's built-in JavaScript engine. +%The `animate' package relies on Optional Content Groups (OCG), also known as PDF layers, which is a feature provided by the PDF-1.5 specification. Each frame of an animation is associated with an OCG that is hidden or made visible in a dynamic fashion by means of Adobe Reader's built-in JavaScript engine. \section{Requirements} \begin{trivlist} @@ -113,12 +113,15 @@ buttonsize=<size> buttonbg=<colour> buttonfg=<colour> step +useocg poster[=first | none | last] \end{verbatim} The same options (among others) are also available as command options and will be explained shortly. However, if used as package options they have global scope, taking effect on all animations in the document. In turn, command options locally override global settings. If PDF is generated via DVI and Postscript by the command sequence \verb+latex+ $\rightarrow$ \verb+dvips+ $\rightarrow$ \verb+ps2pdf+, the `graphicx' package is required. \emph{Important:} The \verb+dvips+ option `\verb+-Ppdf+' should \emph{not} be set when converting the intermediate DVI into Postscript. If you cannot do without, put `\verb+-X 2400 -Y 2400+' \emph{after} `\verb+-Ppdf+' on the command line. Sometimes, if the same animation sequence made from graphics files is to be embedded multiple times into the document, more compact PDF output may be obtained by passing option `\verb+-dMaxInlineImageSize=0+' (Unix) or `\verb+-dMaxInlineImageSize#0+' (Win/DOS) to \verb+ps2pdf+. +Occasionally, a second (pdf)\LaTeX{} run may be necessary to resolve internally created object references. Appropriate warnings will be issued in such cases. + \section{The user interface} Package `animate' provides the command \begin{verbatim} @@ -234,7 +237,11 @@ By default, control button widgets are drawn with black strokes on transparent b draft final \end{verbatim} -With `\verb+draft+' the animation is not embedded. Instead, a box with the exact dimensions of the animation is inserted. Option `\verb+final+' does the opposite as it forces the animation to be built and embedded. Both options can be used to reduce compilation time during authoring of a document. To get the most out of them it is recommended to set `\verb+draft+' globally as package or class option and to set `\verb+final+' locally as a command option of the animation that is currently worked on. After the document has been finished, the global `\verb+draft+' option can be removed to embed all animations. +With `\verb+draft+' the animation is not embedded. Instead, a box with the exact dimensions of the animation is inserted. Option `\verb+final+' does the opposite as it forces the animation to be built and embedded. Both options can be used to reduce compilation time during authoring of a document. To get the most out of them it is recommended to set `\verb+draft+' globally as a package or class option and to set `\verb+final+' locally as a command option of the animation that is currently worked on. After the document has been finished, the global `\verb+draft+' option can be removed to embed all animations. +\begin{verbatim} +useocg +\end{verbatim} +Use an alternative animation method based on Optional Content Groups (OCGs, also known as PDF Layers). May result in less performing animations. \begin{verbatim} measure \end{verbatim} diff --git a/Master/texmf-dist/tex/latex/animate/animate.sty b/Master/texmf-dist/tex/latex/animate/animate.sty index d2884911ab7..4cbcadfa1f0 100644 --- a/Master/texmf-dist/tex/latex/animate/animate.sty +++ b/Master/texmf-dist/tex/latex/animate/animate.sty @@ -8,12 +8,10 @@ % graphics files or inline graphics (e. g. LaTeX-picture, PSTricks, % pgf/TikZ, ...) -% makes use of OCGs (Optional Content Groups, aka PDF Layers) - % Supports LaTeX->dvips->ps2pdf or pdfLaTeX workflows. \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{animate}[2008/05/09] +\ProvidesPackage{animate}[2008/05/21] %test for e-TeX \ifx\eTeXversion\@undefined% @@ -85,6 +83,24 @@ \def\@anim@newkey#1#2{{\expandafter\xdef\csname#1\endcsname{#2}}} \def\@anim@getkeyval#1{\ifcsname#1\endcsname\csname#1\endcsname\fi} +%macro for writing global defs to external *.aux file +\def\@anim@keytoaux#1#2{% + \@bsphack\protected@write\@auxout{}{% + \string\@anim@newkey{#1}{#2}% + }\@esphack% + \ifcsname#1\endcsname\else% + \ifx\@anim@rerunwarned\@undefined% + \gdef\@anim@rerunwarned{}% + \AtEndDocument{% + \PackageWarningNoLine{animate}{% + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak + @@ Rerun to get object references right! @@\MessageBreak + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}% + }% + \fi% + \fi% +} + %missing package error message \def\@anim@missing#1{% \PackageError{animate}{% @@ -104,6 +120,13 @@ }{}% } +%alternative animation method using OCGs (option `useocg') +\newboolean{@anim@useocg} +% true if any of `autoplay' or `autoresume' options is set +\newboolean{@anim@autoplayorresume} +% true if any of `controls' or `palindrome' options is set +\newboolean{@anim@ctrlorplndrm} + %add AcroForm and OCProperties entries to Catalog \ifpdf \newcount\@anim@@fields @@ -123,7 +146,6 @@ /OCGs \the\@anim@@ocgs\space 0 R /D << /BaseState/OFF /ON \the\@anim@@posterocgs\space 0 R -% /Order \the\@anim@@ocgs\space 0 R >> >> } @@ -159,7 +181,6 @@ /OCGs {@anim@ocgs} /D << /BaseState/OFF /ON {@anim@posterocgs} -% /Order {@anim@ocgs} >> >> >> /PUT pdfmark @@ -253,7 +274,7 @@ } } -\newboolean{@anim@timeline} %true if `timeline' option was set +\newboolean{@anim@timeline} %true if `timeline' option is set %creates Form XObject from box contents \ifpdf% @@ -345,6 +366,10 @@ } \fi +\def\@anim@posterlast{last}% helper macros +\def\@anim@posterfirst{first}% +\def\@anim@posternone{none}% + %creates OCG \ifpdf \def\@anim@newocg#1#2{%#1:@anim@num, #2:@anim@curframe@zb @@ -353,13 +378,15 @@ %append to ocg array \xdef\@anim@ocgs{\@anim@ocgs\space\@anim@curocg}% %store ref to ocg if it's a poster - \ifnum#2=0 - \def\@anim@posterframe{first}% - \else% - \def\@anim@posterframe{last}% - \fi% - \ifx\@anim@poster\@anim@posterframe% - \xdef\@anim@posterocg{\@anim@curocg}% + \ifx\@anim@poster\@anim@posternone\else% + \ifnum#2=0 + \ifx\@anim@poster\@anim@posterfirst% + \xdef\@anim@posterocg{\@anim@curocg}% + \fi% + \fi% + \ifx\@anim@poster\@anim@posterlast% + \xdef\@anim@posterocg{\@anim@curocg}% + \fi% \fi% } \else @@ -371,13 +398,15 @@ >> /PUT pdfmark mark {@anim@ocgs} {@anim@ocg@#1@#2} /APPEND pdfmark }% - \ifnum#2=0 - \def\@anim@posterframe{first}% - \else% - \def\@anim@posterframe{last}% - \fi% - \ifx\@anim@poster\@anim@posterframe% - \xdef\@anim@posterocg{@anim@ocg@#1@#2}% + \ifx\@anim@poster\@anim@posternone\else% + \ifnum#2=0 + \ifx\@anim@poster\@anim@posterfirst% + \xdef\@anim@posterocg{@anim@ocg@#1@#2}% + \fi% + \fi% + \ifx\@anim@poster\@anim@posterlast% + \xdef\@anim@posterocg{@anim@ocg@#1@#2}% + \fi% \fi% } \fi @@ -395,22 +424,42 @@ }% \immediate\pdfxform resources {% /XObject <<\@anim@getkeyval{frmxobject@#2}>>}\@anim@box% - % - %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) + \if@anim@useocg% + \@anim@newocg{#1}{#2}% + \def\@anim@annotflag{/F 4}%, print, visibility set by OCG + \else% + %widget visibility state + \def\@anim@annotflag{/F 2}%default: hidden (no view, no print) + \ifx\@anim@poster\@anim@posternone\else% + \ifnum#2=0 + \ifx\@anim@poster\@anim@posterfirst% + \def\@anim@annotflag{/F 4}% visible, print, Locked + \fi% + \fi% + \ifx\@anim@poster\@anim@posterlast% + \@anim@keytoaux{a#1.poster}{#2}% + \ifthenelse{\equal{\@anim@getkeyval{a#1.poster}}{#2}}{% + \def\@anim@annotflag{/F 4}% + }{}% + \fi% + \fi% + \fi% + %frame widget, using the container XObject as its Appearance \pdfannot width \@anim@animwidth\p@ height \@anim@animheight\p@ depth \@anim@animdepth\p@ {% /Subtype/Widget% - /OC \@anim@curocg - /F 4 % allow printing + \@anim@annotflag + \if@anim@useocg% + /OC \@anim@curocg %associate widget with the just created OCG + \fi% /FT/Btn/Ff 65537% non-interactive push button /BS <</W 0>>% /AP <</N \the\pdflastxform\space 0 R>>% - /T (anm#1fr#2)% + /T (#1.#2)% }% + \xdef\@anim@fields{\@anim@fields\space\the\pdflastannot\space 0 R}% } \else \def\@anim@makeframe#1#2{% @@ -425,7 +474,25 @@ /Resources <</XObject <<\@anim@getkeyval{frmxobject@#2}>>>> >> /PUT pdfmark }% - % + \if@anim@useocg% + \@anim@newocg{#1}{#2}% + \def\@anim@annotflag{/F 4}%, print, visibility set by OCG, Locked + \else% + \def\@anim@annotflag{/F 2}% + \ifx\@anim@poster\@anim@posternone\else% + \ifnum#2=0 + \ifx\@anim@poster\@anim@posterfirst% + \def\@anim@annotflag{/F 4}% visible, print, Locked + \fi% + \fi% + \ifx\@anim@poster\@anim@posterlast% + \@anim@keytoaux{a#1.poster}{#2}% + \ifthenelse{\equal{\@anim@getkeyval{a#1.poster}}{#2}}{% + \def\@anim@annotflag{/F 4}% visible, print, Locked + }{}% + \fi% + \fi% + \fi% %frame widget \setlength{\unitlength}{1pt}% \begin{picture}(0,0)% mark annotation rectangle @@ -440,19 +507,21 @@ }% }% \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 + \@anim@annotflag + \if@anim@useocg% + /OC {@anim@ocg@#1@#2} + \fi% /FT/Btn/Ff 65537 /BS <</W 0>>% /AP <</N {@anim@anmfrm@#1@#2}>>% - /T (anm#1fr#2)% + /T (#1.#2)% /ANN pdfmark + mark {@anim@fields} {annot@\the\@anim@fieldnum} /APPEND pdfmark }% \global\advance\@anim@fieldnum by \@ne% } @@ -972,11 +1041,10 @@ %current frame \newcount\@anim@curframe -\newcount\@anim@curframe@zb% zero based +\newcount\@anim@curframe@zb %zero based %draftbox from savebox \def\@anim@draftbox#1{% #1: box number - %get size \setlength{\unitlength}{1pt}% \vtop{% draw boxes \offinterlineskip% @@ -1093,6 +1161,12 @@ \fi% \@anim@reset% to default settings \setkeys{anim@user}{#1}% + \ifthenelse{\boolean{@anim@autoplay}\OR\boolean{@anim@autoresume}}{% + \setboolean{@anim@autoplayorresume}{true}% + }{}% + \ifthenelse{\boolean{@anim@controls}\OR\boolean{@anim@palindrome}}{% + \setboolean{@anim@ctrlorplndrm}{true}% + }{}% \def\@anim@base{#3}% \def\@anim@first{#4}% \def\@anim@last{#5}% @@ -1110,6 +1184,8 @@ \@anim@getext{\@anim@base\@anim@first}% \@anim@filebox{\@anim@base\@anim@first\@anim@ext}{1}% \fi% + \@anim@getsize{\@anim@box}% + \@anim@scale% %draw draftbox according to dimensions of the first frame \@anim@draftbox{\@anim@box}% \else% @@ -1299,10 +1375,11 @@ %create JavaScript objects \@anim@pojscript{#1}% to be executed on PO event \@anim@otherjscript{#1}% on other events in the AA dict - %add poster to posterocg array - \def\@anim@posterframe{none}% - \ifx\@anim@poster\@anim@posterframe\else% - \xdef\@anim@posterocgs{\@anim@posterocgs\space\@anim@posterocg}% + \if@anim@useocg% + %add poster to posterocg array + \ifx\@anim@poster\@anim@posternone\else% + \xdef\@anim@posterocgs{\@anim@posterocgs\space\@anim@posterocg}% + \fi% \fi% \pdfannot width \@anim@animwidth\p@ height \@anim@animheight\p@ @@ -1313,8 +1390,10 @@ /BS <</W 0>>% /H/N% /T (anm#1)% - /AA <<% bind JavaScripts to trigger events - /PO <</S/JavaScript/JS \@anim@pojscriptobj>>% + /AA <<% bind actions to trigger events + /PO <<% + /S/JavaScript/JS \@anim@pojscriptobj% + >>% \@anim@otherjscriptkey% >>% }% @@ -1343,12 +1422,13 @@ \end{picture}% \@anim@pojscript{#1}% \@anim@otherjscript{#1}% - \def\@anim@posterframe{none}% - \ifx\@anim@poster\@anim@posterframe\else% - \special{ps: - mark {@anim@posterocgs} {\@anim@posterocg} /APPEND pdfmark - }% - \fi + \if@anim@useocg% + \ifx\@anim@poster\@anim@posternone\else% + \special{ps: + mark {@anim@posterocgs} {\@anim@posterocg} /APPEND pdfmark + }% + \fi% + \fi% \special{ps: mark /_objdef {annot@\the\@anim@fieldnum}% @@ -1358,8 +1438,10 @@ /BS <</W 0>>% /H/N% /T (anm#1)% - /AA <<% - /PO <</S/JavaScript/JS {a#1@pojscript}>>% + /AA <<% bind actions to trigger events + /PO <<% + /S/JavaScript/JS {a#1@pojscript}% + >>% \@anim@otherjscriptkey% >>% /ANN pdfmark @@ -1417,6 +1499,7 @@ \end{picture}% \special{ps: mark + /_objdef {annot@\the\@anim@fieldnum} /Rect [wid@llx wid@lly wid@urx wid@ury] /Subtype/Widget /FT/Btn/Ff 65536 @@ -1453,6 +1536,12 @@ \setboolean{@anim@inside}{true}% \@anim@reset% to default settings \setkeys{anim@user}{#1}% + \ifthenelse{\boolean{@anim@autoplay}\OR\boolean{@anim@autoresume}}{% + \setboolean{@anim@autoplayorresume}{true}% + }{}% + \ifthenelse{\boolean{@anim@controls}\OR\boolean{@anim@palindrome}}{% + \setboolean{@anim@ctrlorplndrm}{true}% + }{}% \if@anim@draft\else% %create button faces if necessary \if@anim@controls% @@ -2045,13 +2134,17 @@ \setboolean{@anim@autoplay}{false} \define@key{anim@user}{autoplay}[true]{% \setboolean{@anim@autoplay}{#1}% - \if@anim@autoplay\setboolean{@anim@autoresume}{false}\fi% + \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% + \if@anim@autoresume% + \setboolean{@anim@autoplay}{false}% + \fi% } \newboolean{@anim@autopause} \setboolean{@anim@autopause}{false} @@ -2063,7 +2156,6 @@ \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% @@ -2129,6 +2221,9 @@ \define@key{anim@user}{measure}[true]{% \setboolean{@anim@meas}{#1}% } +\define@key{anim@user}{useocg}[true]{% + \setboolean{@anim@useocg}{#1}% +} %macro to reset macros and booleans \def\@anim@reset{% @@ -2151,6 +2246,7 @@ \global\let\if@anim@palindrome=\if@anim@@palindrome% \global\let\if@anim@step=\if@anim@@step% \global\let\if@anim@draft=\if@anim@@draft% + \global\let\if@anim@useocg=\if@anim@@useocg% \gdef\@anim@posterocg{}% \gdef\@anim@properties{}% \setboolean{@anim@pauseframes}{false}% @@ -2166,6 +2262,8 @@ \gdef\@anim@gropts{}% \setboolean{@anim@multipdf}{false}% \setboolean{@anim@meas}{false}% + \setboolean{@anim@autoplayorresume}{false}% + \setboolean{@anim@ctrlorplndrm}{false}% } %package options @@ -2306,6 +2404,11 @@ \setboolean{@anim@@draft}{true}% }% } +\newboolean{@anim@@useocg} +\setboolean{@anim@@useocg}{false} +\define@key{anim@pkg}{useocg}[true]{% + \setboolean{@anim@@useocg}{#1}% +} %process package options \def\@anim@setpkgkeys#1{\setkeys{anim@pkg}{#1}} @@ -2327,36 +2430,62 @@ }% } \fi -\def\@anim@posterlast{last}% helper macro \def\@anim@@pojscript#1{% #1: @anim@num % console.show();% % console.clear();% + \if@anim@useocg\else + if(typeof(curdoc)=='undefined'){var curdoc=this;}% ref to the Doc object + \fi if(typeof(a#1)=='undefined'){% initialize animation a#1=new Object();% - %takes references to frame ocgs belonging to the current animation + %takes references to frame ocgs/Field objects belonging to the current + %animation a#1.fr=new Array();% %takes references to control button face ocgs \if@anim@controls a#1.btn=new Array();\fi - %get array of ocgs of current page - var ocg=this.getOCGs(this.pageNum);% - for(var i=0;i<ocg.length;i++){% - var ocgName=ocg[i].name.split('.');% - if(ocgName[0]==#1){% - \if@anim@controls - if(ocgName[1].charAt(0)=='P'){% PlayLeft, PauseLeft, ... + %initialize fr & btn properties + \if@anim@useocg + %get array of ocgs of current page + var ocg=this.getOCGs(this.pageNum);% + for(var i=0;i<ocg.length;i++){% + var ocgName=ocg[i].name.split('.');% + if(ocgName[0]==#1){% + \if@anim@controls + if(ocgName[1].charAt(0)=='P'){% PlayLeft, PauseLeft, ... + a#1.btn[ocgName[1]]=ocg[i];% + %set basic button state + a#1.btn[ocgName[1]].state=ocg[i].initState;% + }else{% frame ocg + \fi + a#1.fr[ocgName[1]]=ocg[i];% + %set basic frame state + a#1.fr[ocgName[1]].state=ocg[i].initState;% + \if@anim@controls% + }% + \fi% + }% + }% + \else + %get array of Field objects (frame widgets) of current page + for(i=0;i<this.numFields;i++){% + var fldName=this.getNthFieldName(i).split('.');% + if(fldName[0]==#1){% + a#1.fr[fldName[1]]=this.getField(this.getNthFieldName(i));% + }% + }% + \if@anim@controls + %get array of ocgs of current page + var ocg=this.getOCGs(this.pageNum);% + for(var i=0;i<ocg.length;i++){% + var ocgName=ocg[i].name.split('.');% + if(ocgName[0]==#1){% a#1.btn[ocgName[1]]=ocg[i];% %set basic button state a#1.btn[ocgName[1]].state=ocg[i].initState;% - }else{% frame ocg - \fi - a#1.fr[ocgName[1]]=ocg[i];% - %set basic frame state - a#1.fr[ocgName[1]].state=ocg[i].initState;% - \if@anim@controls% }% - \fi% - }% - }% + }% + \fi% + \fi% \ifx\@anim@poster\@anim@posterlast % set default frame %holds index of the frame to be displayed a#1.idx=\@anim@frames-1;% @@ -2393,10 +2522,17 @@ \if@anim@step\else a#1.actnPause();% a#1.isPaused=false;% because it has been explicitly stopped - \fi - a#1.fr[a#1.idx].state=false;% - a#1.idx=0;% - a#1.fr[0].state=true;% + \fi% + \if@anim@useocg + a#1.fr[a#1.idx].state=false;% + a#1.idx=0;% + a#1.fr[0].state=true;% + \else + a#1.fr[a#1.idx].display=display.hidden;% + a#1.idx=0;% + a#1.fr[0].display=display.visible;% + curdoc.dirty=false;% + \fi% \if@anim@chfps a#1.fpsDeflt=Math.abs(\@anim@fps);% a#1.dtDeflt=1000/(1e-6+a#1.fpsDeflt);% @@ -2407,10 +2543,17 @@ \if@anim@step\else a#1.actnPause();% a#1.isPaused=false;% - \fi - a#1.fr[a#1.idx].state=false;% - a#1.idx=\@anim@frames-1;% - a#1.fr[a#1.idx].state=true;% + \fi% + \if@anim@useocg + a#1.fr[a#1.idx].state=false;% + a#1.idx=\@anim@frames-1;% + a#1.fr[a#1.idx].state=true;% + \else + a#1.fr[a#1.idx].display=display.hidden;% + a#1.idx=\@anim@frames-1;% + a#1.fr[a#1.idx].display=display.visible;% + curdoc.dirty=false;% + \fi% \if@anim@chfps %frame rate from the last fps change (\@anim@nfps) a#1.fpsDeflt=Math.abs(\@anim@nfps);% a#1.dtDeflt=1000/(1e-6+a#1.fpsDeflt);% @@ -2418,9 +2561,18 @@ \fi% };% a#1.actnNext=function(){% - a#1.fr[a#1.idx].state=false;% + \if@anim@useocg + a#1.fr[a#1.idx].state=false;% + \else + a#1.fr[a#1.idx].display=display.hidden;% + \fi try{% - a#1.fr[++a#1.idx].state=true;% + \if@anim@useocg + a#1.fr[++a#1.idx].state=true;% + \else + a#1.fr[++a#1.idx].display=display.visible;% + curdoc.dirty=false;% + \fi% \if@anim@step\else\if@anim@meas a#1.frcnt++;\fi\fi% }catch(e){% --a#1.idx;% @@ -2428,8 +2580,13 @@ \if@anim@step a#1.actnEndRight();% a#1.playsRight=false;% - \else - a#1.fr[a#1.idx].state=true;% + \else% + \if@anim@useocg + a#1.fr[a#1.idx].state=true;% + \else + a#1.fr[a#1.idx].display=display.visible;% + curdoc.dirty=false;% + \fi% \if@anim@meas if(a#1.isPlaying){a#1.stopMeas();}\fi if(a#1.isPlaying){a#1.isPaused=true;a#1.actnPlayLeft();}% \fi% @@ -2469,58 +2626,74 @@ \fi% \fi% };% - a#1.actnPrev=function(){% - a#1.fr[a#1.idx].state=false;% - try{% - a#1.fr[--a#1.idx].state=true;% - \if@anim@step\else\if@anim@meas a#1.frcnt++;\fi\fi% - }catch(e){% - ++a#1.idx;% - \if@anim@palindrome% - \if@anim@step - a#1.actnEndLeft();% - a#1.playsRight=true;% + \if@anim@ctrlorplndrm + a#1.actnPrev=function(){% + \if@anim@useocg + a#1.fr[a#1.idx].state=false;% + \else + a#1.fr[a#1.idx].display=display.hidden;% + \fi + try{% + \if@anim@useocg + a#1.fr[--a#1.idx].state=true;% \else - a#1.fr[a#1.idx].state=true;% - \if@anim@meas if(a#1.isPlaying){a#1.stopMeas();}\fi - if(a#1.isPlaying){a#1.isPaused=true;a#1.actnPlayRight();}% + a#1.fr[--a#1.idx].display=display.visible;% + curdoc.dirty=false;% \fi% - \else% - \if@anim@step - a#1.actnEndLeft();% + \if@anim@step\else\if@anim@meas a#1.frcnt++;\fi\fi% + }catch(e){% + ++a#1.idx;% + \if@anim@palindrome% + \if@anim@step + a#1.actnEndLeft();% + a#1.playsRight=true;% + \else% + \if@anim@useocg + a#1.fr[a#1.idx].state=true;% + \else + a#1.fr[a#1.idx].display=display.visible;% + curdoc.dirty=false;% + \fi% + \if@anim@meas if(a#1.isPlaying){a#1.stopMeas();}\fi + if(a#1.isPlaying){a#1.isPaused=true;a#1.actnPlayRight();}% + \fi% \else% - \if@anim@loop - if(a#1.isPlaying){% - \if@anim@chfps - a#1.fpsDeflt=Math.abs(\@anim@nfps);% - a#1.dtDeflt=1000/(1e-6+a#1.fpsDeflt);% - a#1.dt=a#1.dtDeflt;% - \fi - a#1.actnPlayLeft();% - }else{a#1.actnEndLeft();}% - \else + \if@anim@step a#1.actnEndLeft();% + \else% + \if@anim@loop + if(a#1.isPlaying){% + \if@anim@chfps + a#1.fpsDeflt=Math.abs(\@anim@nfps);% + a#1.dtDeflt=1000/(1e-6+a#1.fpsDeflt);% + a#1.dt=a#1.dtDeflt;% + \fi + a#1.actnPlayLeft();% + }else{a#1.actnEndLeft();}% + \else + a#1.actnEndLeft();% + \fi% \fi% \fi% + }% + \if@anim@step\else% + \if@anim@chfps + if(% + a#1.pFpsAt[a#1.idx]>=0&&% + a#1.pFpsAt[a#1.idx]!=a#1.fpsDeflt% + ){% + a#1.fpsDeflt=a#1.pFpsAt[a#1.idx];% + a#1.dtDeflt=1000/(1e-6+a#1.fpsDeflt);% + a#1.dt=a#1.dtDeflt;% + if(a#1.isPlaying){a#1.isPaused=true;a#1.actnPlayLeft();}% + }% + \fi% + \if@anim@pauseframes + if(a#1.isPlaying&&a#1.pauseAt[a#1.idx]){a#1.actnPause();}% + \fi% \fi% - }% - \if@anim@step\else% - \if@anim@chfps - if(% - a#1.pFpsAt[a#1.idx]>=0&&% - a#1.pFpsAt[a#1.idx]!=a#1.fpsDeflt% - ){% - a#1.fpsDeflt=a#1.pFpsAt[a#1.idx];% - a#1.dtDeflt=1000/(1e-6+a#1.fpsDeflt);% - a#1.dt=a#1.dtDeflt;% - if(a#1.isPlaying){a#1.isPaused=true;a#1.actnPlayLeft();}% - }% - \fi% - \if@anim@pauseframes - if(a#1.isPlaying&&a#1.pauseAt[a#1.idx]){a#1.actnPause();}% - \fi% - \fi% - };% + };% + \fi% \if@anim@step\else a#1.actnPause=function(){% \if@anim@meas if(a#1.isPlaying){a#1.stopMeas();}\fi @@ -2549,21 +2722,23 @@ \if@anim@meas a#1.startMeas();\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.btn['PauseLeft'].state=true;% - a#1.btn['PlayLeft'].state=false;% - a#1.btn['PauseRight'].state=true;% - a#1.btn['PlayRight'].state=false;% - \fi% - \if@anim@meas a#1.startMeas();\fi - a#1_int=app.setInterval('a#1.actnPrev()',a#1.dt);% - };% + \if@anim@ctrlorplndrm + 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.btn['PauseLeft'].state=true;% + a#1.btn['PlayLeft'].state=false;% + a#1.btn['PauseRight'].state=true;% + a#1.btn['PlayRight'].state=false;% + \fi% + \if@anim@meas a#1.startMeas();\fi + a#1_int=app.setInterval('a#1.actnPrev()',a#1.dt);% + };% + \fi% \if@anim@controls a#1.actnIncr=function(){% speed up animation try{app.clearInterval(a#1_int);}catch(e){}% @@ -2620,51 +2795,115 @@ };% \fi% \fi% + \if@anim@useocg\else% + %actnEndLeft()/actnEndRight() & actnEndLeft()/actnEndRight() versions + %that also work in recent Readers, + %to be invoked by a#1_intd=app.setInterval(...) + a#1.actnSecEndLeft=function(){% + try{app.clearInterval(a#1_intd);}catch(e){}% + a#1.actnEndLeft();% + };% + a#1.actnSecEndRight=function(){% + try{app.clearInterval(a#1_intd);}catch(e){}% + a#1.actnEndRight();% + };% + \if@anim@step\else% + \if@anim@autoplayorresume% + \if@anim@ctrlorplndrm + a#1.actnSecPlayLeft=function(){% + try{app.clearInterval(a#1_intd);}catch(e){}% + a#1.actnPlayLeft();% + };% + \fi + a#1.actnSecPlayRight=function(){% + try{app.clearInterval(a#1_intd);}catch(e){}% + a#1.actnPlayRight();% + };% + \fi% + \fi% + \fi% }% \if@anim@step\else% - \if@anim@autoplay - if(a#1.playsRight){% - a#1.actnPlayRight();% - }else{% - a#1.actnPlayLeft();% - }% + \if@anim@autoplay% + \if@anim@useocg% + \if@anim@ctrlorplndrm + if(a#1.playsRight){a#1.actnPlayRight();}else{a#1.actnPlayLeft();}% + \else% + a#1.actnPlayRight();% + \fi% + \else + \if@anim@ctrlorplndrm + if(a#1.playsRight){% + a#1_intd=app.setInterval('a#1.actnSecPlayRight()',1);% + }else{% + a#1_intd=app.setInterval('a#1.actnSecPlayLeft()',1);% + }% + \else% + a#1_intd=app.setInterval('a#1.actnSecPlayRight()',1);% + \fi% + \fi% \fi% \if@anim@autoresume if(a#1.isPaused){% - if(a#1.playsRight){a#1.actnPlayRight();}else{a#1.actnPlayLeft();}% + \if@anim@useocg% + \if@anim@ctrlorplndrm + if(a#1.playsRight){a#1.actnPlayRight();}else{a#1.actnPlayLeft();}% + \else + a#1.actnPlayRight();% + \fi% + \else% + \if@anim@ctrlorplndrm + if(a#1.playsRight){% + a#1_intd=app.setInterval('a#1.actnSecPlayRight()',1);% + }else{% + a#1_intd=app.setInterval('a#1.actnSecPlayLeft()',1);% + }% + \else + a#1_intd=app.setInterval('a#1.actnSecPlayRight()',1);% + \fi% + \fi% }% \fi% \fi% } + %other trigger events in the anim widget's AA dictionary \def\@anim@otherjscript#1{% - \def\@anim@posterframe{last}% \xdef\@anim@otherjscriptkey{% /PC <</S/JavaScript/JS (% PageClose - \if@anim@autopause% - \if@anim@step\else - if(a#1.isPlaying||a#1.isPaused){a#1.actnPause();}% - else{% - \fi% + \if@anim@step\else + if(% + \if@anim@autopause + a#1.isPlaying||% + \fi + a#1.isPaused% + ){a#1.actnPause();}% + else{% \fi% \if@anim@step\else% \if@anim@controls - a#1.playsRight=true;% + a#1.playsRight=true;% \else% \if@anim@palindrome a#1.playsRight=true;% \fi% \fi% \fi% - \ifx\@anim@poster\@anim@posterframe - a#1.actnEndRight();% - \else - a#1.actnEndLeft();% - \fi% - \if@anim@autopause% - \if@anim@step\else - } + \ifx\@anim@poster\@anim@posterlast% + \if@anim@useocg + a#1.actnEndRight();% + \else + a#1_intd=app.setInterval('a#1.actnSecEndRight()',1);% \fi% + \else% + \if@anim@useocg + a#1.actnEndLeft();% + \else + a#1_intd=app.setInterval('a#1.actnSecEndLeft()',1);% + \fi% + \fi% + \if@anim@step\else% + }% \fi% )>>% \if@anim@step\else% @@ -2689,12 +2928,16 @@ a#1.actnNext();% }% \fi% - \else - if(a#1.playsRight){% + \else% + \if@anim@ctrlorplndrm + if(a#1.playsRight){% + a#1.actnPlayRight();% + }else{% + a#1.actnPlayLeft();% + }% + \else% a#1.actnPlayRight();% - }else{% - a#1.actnPlayLeft();% - }% + \fi% \fi% )>>% }% |