summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/movie15
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-07-26 22:35:18 +0000
committerKarl Berry <karl@freefriends.org>2006-07-26 22:35:18 +0000
commit7e255d630eeacdf6dbcfe020d9f4ee8d04e12586 (patch)
tree2887b46d3603aa620d097f85b680ad319107cdcb /Master/texmf-dist/tex/latex/movie15
parent0887c6f2b1a0b1727a1643ca172ddc574d750358 (diff)
movie15 update (26jul06)
git-svn-id: svn://tug.org/texlive/trunk@1928 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/movie15')
-rw-r--r--Master/texmf-dist/tex/latex/movie15/movie15.sty2223
1 files changed, 1214 insertions, 1009 deletions
diff --git a/Master/texmf-dist/tex/latex/movie15/movie15.sty b/Master/texmf-dist/tex/latex/movie15/movie15.sty
index ac357f33026..694aa7a09fd 100644
--- a/Master/texmf-dist/tex/latex/movie15/movie15.sty
+++ b/Master/texmf-dist/tex/latex/movie15/movie15.sty
@@ -9,14 +9,14 @@
%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{movie15}[2006/07/13]
+\ProvidesPackage{movie15}[2006/07/27]
\RequirePackage{keyval}
\RequirePackage{ifthen}
\RequirePackage{ifpdf}
\newboolean{@MXV@iiiDfeat}% enable 3D features from PDF-1.6 spec?
\setboolean{@MXV@iiiDfeat}{false}%
-\newboolean{@MXV@iiid}%set to true if a 3D file is beeing embedded
+\newboolean{@MXV@iiid}%set to true if a 3D file is being embedded
\DeclareOption{3D}{%
\setboolean{@MXV@iiiDfeat}{true}%
@@ -39,6 +39,9 @@
%for conditionals where \ifthenelse doesn't work
\gdef\@MXV@if#1{\csname if#1\endcsname}%
+\newboolean{@MXV@presentation} %used with presentation making package?
+\newboolean{@MXV@hide} %contents hidden on the current slide?
+
\ifthenelse{\boolean{@MXV@iiiDfeat}}{%
\newcount\@MXV@iiidoncurpage%index of 3D annot on current page
\global\@MXV@iiidoncurpage=0%
@@ -67,8 +70,13 @@
\def\@MXV@labeltoaux#1#2{%
\@bsphack\protected@write\@auxout{}{%
\string\@MXV@newlabel{#1}{#2}%
+ \string\@MXV@newlabel{@#1@}{\@MXV@getlabelvalue{#1}}%
}\@esphack%
- \ifthenelse{\equal{\@MXV@getlabelvalue{#1}}{undefined}}{%
+ \ifthenelse{%
+ \equal{\@MXV@getlabelvalue{#1}}{undefined}\OR%
+ %double check that the value hasn't changed
+ \NOT\equal{\@MXV@getlabelvalue{#1}}{\@MXV@getlabelvalue{@#1@}}%
+ }{%
\ifthenelse{\isundefined{\@MXV@warning}}{%issue warning only once, at end
\gdef\@MXV@warning{}% of document
\AtEndDocument{%
@@ -96,14 +104,18 @@
}%
\else%
\PassOptionsToPackage{pdfmark}{hyperref}%
- %counter for absolute number of movierefs
- \newcount\@MXV@links
\fi
%counter for absolute number of inclusions,
%used for labelling each annotation
\newcount\@MXV@includes
+%counter for absolute number of movie players
+\newcount\@MXV@players
+
+%counter for absolute number of movierefs
+\newcount\@MXV@links
+
%measuring things
%textbox
\newdimen\@MXV@width
@@ -164,6 +176,7 @@
\setboolean{@MXV@linkclose}{false}%
\setboolean{@MXV@linkreset}{false}%
\gdef\@MXV@label{}% for movieref
+ \gdef\@MXV@@label{}% for movieref
\gdef\@MXV@mime{@MXV@auto}%
\gdef\@MXV@player{}%
\gdef\@MXV@fsentry{}%
@@ -472,7 +485,10 @@
%
%3D stream object
\if@MXV@inline%
- \IfFileExists{#4}{%
+ \ifthenelse{%
+ \NOT\boolean{@MXV@presentation}\OR%
+ \equal{\@MXV@getlabelvalue{\@MXV@label.3dstream}}{undefined}%
+ }{%
\pdfobj stream%
attr {%
/Subtype/\@MXV@iiidsubtype%
@@ -485,13 +501,11 @@
file {#4}%
\pdfrefobj\pdflastobj%
\edef\@MXV@iiidstream{\the\pdflastobj}%
+ \if@MXV@presentation%
+ \@MXV@newlabel{\@MXV@label.3dstream}{\@MXV@iiidstream}%
+ \fi%
}{%
- \PackageError{movie15}{%
- File `#4' cannot be opened for embedding.\MessageBreak
- Did you forget to set option `url' or `inline=false'?
- }{%
- Try any of the options `url' or `inline=false'!
- }%
+ \edef\@MXV@iiidstream{\@MXV@getlabelvalue{\@MXV@label.3dstream}}%
}%
\fi%
%
@@ -562,25 +576,44 @@
\pdfobj stream {}\pdfrefobj\pdflastobj%
\xdef\@MXV@apdict{/AP << /N \the\pdflastobj\space 0 R >>}%
}{}%
+ %3D reference dict
+ \if@MXV@presentation%
+ \ifthenelse{%
+ \equal{\@MXV@getlabelvalue{\@MXV@label.3dref}}{undefined}%
+ }{%
+ \pdfobj {<<%
+ /Type/3DRef%
+ /3DD \@MXV@iiidstream\space 0 R% 3D stream object
+ >>}\pdfrefobj\pdflastobj%
+ \edef\@MXV@iiidstreamorref{\the\pdflastobj}%
+ \@MXV@newlabel{\@MXV@label.3dref}{\the\pdflastobj}%
+ }{%
+ \edef\@MXV@iiidstreamorref{\@MXV@getlabelvalue{\@MXV@label.3dref}}%
+ }%
+ \else%
+ \edef\@MXV@iiidstreamorref{\@MXV@iiidstream}%
+ \fi%
%annotation object of subtype `3D'%
\pdfannot width #1 height #2 depth #3 {%
/Subtype/3D%
/F 4% we cannot put F 5 here; bug in Reader; 3D annot would be
/T (\@MXV@filename)% disabled even if plugin were available
/Contents (3D Object (\@MXV@mime))%
- \ifx\@MXV@label\@empty\else%
- /NM (\@MXV@label)%
+ \ifx\@MXV@@label\@empty\else%
+ /NM (\@MXV@@label)%
\fi%
- /P \@MXV@pdfpageref{@MXV@player\the\@MXV@includes.page} 0 R%
+ /P \@MXV@pdfpageref{@MXV@annot\the\@MXV@includes.page} 0 R%
\@MXV@apdict% /AP <</N<<>>/R<<>>/D<<>>>> doesn't work here
\@MXV@defaultview%
/3DI \if@MXV@iiidctrls true\else false\fi%
- /3DD \@MXV@iiidstream\space 0 R% 3D stream object
+ /3DD \@MXV@iiidstreamorref\space 0 R% 3D stream or reference object
/3DA << \@MXV@activation\@MXV@deactivation >>%
}%
- %label for later annot obj number determination
- \ifx\@MXV@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@label.annot}{\the\pdflastannot}%
+ %label for later annot obj number determination, to be used in
+ %movieref's
+ \ifx\@MXV@@label\@empty\else%
+ \@MXV@labeltoaux{@MXV@\@MXV@@label.annot}{\the\pdflastannot}%
+ \@MXV@newlabel{@MXV@\@MXV@@label.annot}{\the\pdflastannot}%
\fi%
\fi}}%
}%
@@ -659,8 +692,11 @@
%
%3D stream object
\if@MXV@inline%
- \IfFileExists{#4}{%
- \pdfmark{%
+ \ifthenelse{%
+ \NOT\boolean{@MXV@presentation}\OR%
+ \equal{\@MXV@getlabelvalue{\@MXV@label.3dstream}}{undefined}%
+ }{%
+ \pdfmark{%
pdfmark=/OBJ,%
Raw={%
/_objdef {iiiDfile\the\@MXV@includes}%
@@ -688,13 +724,11 @@
}%
}%
\edef\@MXV@iiidstream{iiiDfile\the\@MXV@includes}%
+ \if@MXV@presentation%
+ \@MXV@newlabel{\@MXV@label.3dstream}{\@MXV@iiidstream}%
+ \fi%
}{%
- \PackageError{movie15}{%
- File `#4' cannot be opened for embedding.\MessageBreak
- Did you forget to set option `url' or `inline=false'?
- }{%
- Try any of the options `url' or `inline=false'!
- }%
+ \edef\@MXV@iiidstream{\@MXV@getlabelvalue{\@MXV@label.3dstream}}%
}%
\fi%
%
@@ -793,6 +827,35 @@
}%
\xdef\@MXV@apdict{/AP << /N {apdict}>>}%
}{}%
+ %3D reference dict
+ \if@MXV@presentation%
+ \ifthenelse{%
+ \equal{\@MXV@getlabelvalue{\@MXV@label.3dref}}{undefined}%
+ }{%
+ \pdfmark{%
+ pdfmark=/OBJ,%
+ Raw={%
+ /_objdef {iiiDref\the\@MXV@includes}%
+ /type/dict%
+ }%
+ }%
+ \pdfmark{%
+ pdfmark=/PUT,%
+ Raw={%
+ {iiiDref\the\@MXV@includes} <<%
+ /Type/3DRef%
+ /3DD {\@MXV@iiidstream}% 3D stream object
+ >>%
+ }%
+ }%
+ \edef\@MXV@iiidstreamorref{iiiDref\the\@MXV@includes}%
+ \@MXV@newlabel{\@MXV@label.3dref}{\@MXV@iiidstreamorref}%
+ }{%
+ \edef\@MXV@iiidstreamorref{\@MXV@getlabelvalue{\@MXV@label.3dref}}%
+ }%
+ \else%
+ \edef\@MXV@iiidstreamorref{\@MXV@iiidstream}%
+ \fi%
%annotation object of subtype `3D'
\pdfmark[\phantom{\@MXV@box{#1}{#2}{#3}}]{%
pdfmark=/ANN,%
@@ -801,18 +864,22 @@
/_objdef {3Dannot\the\@MXV@includes}%
/F 4%
/T (\@MXV@filename)%
- \ifx\@MXV@label\@empty\else%
- /NM (\@MXV@label)%
+ \ifx\@MXV@@label\@empty\else%
+ /NM (\@MXV@@label)%
\fi%
/Contents (3D Object (\@MXV@mime))%
/P {ThisPage}%
\@MXV@apdict% /AP <</N<<>>/R<<>>/D<<>>>> doesn't work here
\@MXV@defaultview%
/3DI \if@MXV@iiidctrls true\else false\fi%
- /3DD {\@MXV@iiidstream}%
+ /3DD {\@MXV@iiidstreamorref}% 3D stream or reference object
/3DA << \@MXV@activation\@MXV@deactivation >>%
}%
}%
+ \ifx\@MXV@@label\@empty\else%
+ \@MXV@labeltoaux{@MXV@\@MXV@@label.annot}{\the\@MXV@includes}%
+ \@MXV@newlabel{@MXV@\@MXV@@label.annot}{\the\@MXV@includes}%
+ \fi%
\fi%
}%
\fi%
@@ -849,7 +916,10 @@
afterBlur: function (e) {%
%only resume if we click outside of any media
if(focusonplayer==0){%
- try{e.target.play();}catch(e){}
+ try{
+ e.target.settings.privateData.paused=false;
+ e.target.play();
+ }catch(e){}
}
},
onFocus: function (e) {%
@@ -858,10 +928,11 @@
afterFocus: function (e) {%
if(!e.target.isPlaying){%play on click if paused
try{
+ e.target.settings.privateData.paused=false;
e.target.play();
if(!e.target.isPlaying){%still not playing?!
%sometimes play() fails, in particular if the movie has reached
- %its end while having the focus; but this works:
+ %its end before getting the focus; but this works:
if(
e.target.settings.startAt.time
|| e.target.settings.startAt.frame
@@ -880,7 +951,10 @@
\@MXV@if{#2}%
else{%
%media can only be paused if mouse option is set
- try{e.target.pause();}catch (e){}
+ try{
+ e.target.pause();
+ e.target.settings.privateData.paused=true;
+ }catch (e){}
}
\fi%
e.target.visible=true;
@@ -905,7 +979,10 @@
e.target.seek(e.target.settings.startAt);
}
e.target.visible=true;
- \@MXV@if{#3} e.target.play();\fi
+ \@MXV@if{#3}
+ e.target.settings.privateData.paused=false;
+ e.target.play();
+ \fi
}
catch (e){}
}
@@ -931,31 +1008,22 @@
\fi%
%embedded file entry `/EF'
\if@MXV@inline%
- \IfFileExists{#4}{%
- %embed the same media file only once
- \ifthenelse{\equal{\@MXV@getlabelvalue{#4}}{undefined}}{%
- \pdfobj stream %
- attr {%
- /Type/EmbeddedFile%
- /Subtype (\@MXV@mime)%
- }%
- file {#4}%
- \pdfrefobj\pdflastobj%
- \edef\@MXV@efentry{%
- /EF << /F \the\pdflastobj\space 0 R >>%
- }%
- \@MXV@newlabel{#4}{\the\pdflastobj}%
- }{%
- \edef\@MXV@efentry{%
- /EF << /F \@MXV@getlabelvalue{#4}\space 0 R >>%
+ %embed the same media file only once
+ \ifthenelse{\equal{\@MXV@getlabelvalue{#4}}{undefined}}{%
+ \pdfobj stream %
+ attr {%
+ /Type/EmbeddedFile%
+ /Subtype (\@MXV@mime)%
}%
+ file {#4}%
+ \pdfrefobj\pdflastobj%
+ \edef\@MXV@efentry{%
+ /EF << /F \the\pdflastobj\space 0 R >>%
}%
+ \@MXV@newlabel{#4}{\the\pdflastobj}%
}{%
- \PackageError{movie15}{%
- File `#4' cannot be opened for embedding.\MessageBreak
- Did you forget to set option `url' or `inline=false'?
- }{%
- Try any of the options `url' or `inline=false'!
+ \edef\@MXV@efentry{%
+ /EF << /F \@MXV@getlabelvalue{#4}\space 0 R >>%
}%
}%
\else\def\@MXV@efentry{}\fi%
@@ -1036,14 +1104,16 @@
/F 5% disable annot if multimedia is not available
/T (\@MXV@filename)%
/Contents (Media File (\@MXV@mime))%
- /P \@MXV@pdfpageref{@MXV@player\the\@MXV@includes.page} 0 R%
+ /P \@MXV@pdfpageref{@MXV@annot\the\@MXV@includes.page} 0 R%
/A \the\@MXV@adict\space 0 R%
/AA \the\@MXV@aadict\space 0 R%
/AP <</N<<>>/R<<>>/D<<>>>>%
}\edef\@MXV@screenannot{\the\pdflastannot}%
- %label for later annot obj number determination
- \ifx\@MXV@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@label.annot}{\@MXV@screenannot}%
+ %label for later annot obj number determination, to be used in
+ %movieref's only
+ \ifx\@MXV@@label\@empty\else%
+ \@MXV@labeltoaux{@MXV@\@MXV@@label.annot}{\@MXV@screenannot}%
+ \@MXV@newlabel{@MXV@\@MXV@@label.annot}{\@MXV@screenannot}%
\fi%
%
%new media clip object of subtype `Media Clip Data' (/S/MCD)
@@ -1069,8 +1139,9 @@
>>%
>>}\edef\@MXV@mediarendition{\the\pdflastobj}\pdfrefobj\pdflastobj%
%label for later rendition obj number determination
- \ifx\@MXV@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@label.rendition}{\@MXV@mediarendition}%
+ \ifx\@MXV@@label\@empty\else%
+ \@MXV@labeltoaux{@MXV@\@MXV@@label.rendition}{\@MXV@mediarendition}%
+ \@MXV@newlabel{@MXV@\@MXV@@label.rendition}{\@MXV@mediarendition}%
\fi%
%
%action dictionary
@@ -1199,6 +1270,10 @@
/AP <</N<<>>/R<<>>/D<<>>>>%
}%
}%
+ \ifx\@MXV@@label\@empty\else%
+ \@MXV@labeltoaux{@MXV@\@MXV@@label.annot}{\the\@MXV@includes}%
+ \@MXV@newlabel{@MXV@\@MXV@@label.annot}{\the\@MXV@includes}%
+ \fi%
%
%entire action entry moved outside screen annotation
\pdfmark{%
@@ -1289,53 +1364,44 @@
%
%embedded file entry `/EF'
\if@MXV@inline%
- \IfFileExists{#4}{%
- %embed the same media file only once
- \ifthenelse{\equal{\@MXV@getlabelvalue{#4}}{undefined}}{%
- %new stream object
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /_objdef {fstream\the\@MXV@includes}%
- /type/stream%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {fstream\the\@MXV@includes}%
- (#4) (r) file% read in file contents
- }%
+ %embed the same media file only once
+ \ifthenelse{\equal{\@MXV@getlabelvalue{#4}}{undefined}}{%
+ %new stream object
+ \pdfmark{%
+ pdfmark=/OBJ,%
+ Raw={%
+ /_objdef {fstream\the\@MXV@includes}%
+ /type/stream%
}%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {fstream\the\@MXV@includes} <<%
- /Type/EmbeddedFile%
- /Subtype(\@MXV@mime)%
- >>%
- }%
+ }%
+ \pdfmark{%
+ pdfmark=/PUT,%
+ Raw={%
+ {fstream\the\@MXV@includes}%
+ (#4) (r) file% read in file contents
}%
- \edef\@MXV@moviestream{fstream\the\@MXV@includes}%
- \@MXV@newlabel{#4}{fstream\the\@MXV@includes}%
- }{%
- \edef\@MXV@moviestream{\@MXV@getlabelvalue{#4}}%
}%
- % put the embedded file entry into file spec object
\pdfmark{%
pdfmark=/PUT,%
Raw={%
- {filespec\the\@MXV@includes} <<%
- /EF << /F {\@MXV@moviestream} >>%
+ {fstream\the\@MXV@includes} <<%
+ /Type/EmbeddedFile%
+ /Subtype(\@MXV@mime)%
>>%
}%
}%
+ \edef\@MXV@moviestream{fstream\the\@MXV@includes}%
+ \@MXV@newlabel{#4}{fstream\the\@MXV@includes}%
}{%
- \PackageError{movie15}{%
- File `#4' cannot be opened for embedding.\MessageBreak
- Did you forget to set option `url' or `inline=false'?
- }{%
- Try any of the options `url' or `inline=false'!
+ \edef\@MXV@moviestream{\@MXV@getlabelvalue{#4}}%
+ }%
+ % put the embedded file entry into file spec object
+ \pdfmark{%
+ pdfmark=/PUT,%
+ Raw={%
+ {filespec\the\@MXV@includes} <<%
+ /EF << /F {\@MXV@moviestream} >>%
+ >>%
}%
}%
\fi%
@@ -1407,1034 +1473,1173 @@
%definition of user command `\includemovie'
\newcommand{\includemovie}[4][]{%
\leavevmode%
- \global\advance\@MXV@includes by 1%increment counter
\@MXV@reset% all macros and options
\setkeys{movie15}{#1}% parse options
- %guess the mime type based on the filename extension
- \filename@parse{#4}%
- \ifthenelse{\equal{\@MXV@mime}{@MXV@auto}}{%
- \@MXV@guessmime{#4}{\filename@ext}}{}%
- \if\filename@ext\relax%
- \xdef\@MXV@filename{\filename@base}%
- \else%
- \xdef\@MXV@filename{\filename@base.\filename@ext}%
- \fi%
%
- %if 3D object is not embedded inline we must use some external player :(
- \ifthenelse{%
- \boolean{@MXV@iiid}
- \AND\NOT\boolean{@MXV@inline}
- }{%
- \setboolean{@MXV@externalviewer}{true}%
- }{}%
+ %total height of text
+ \@MXV@totalheight=\@MXV@height%
+ \advance\@MXV@totalheight by \@MXV@depth%
+ %traiselen=distance at which text is to be raised to centre it vertically
+ %braiselen=vertical centre of media box (auxiliary measure)
+ \@MXV@traiselen=0.5\@MXV@height%
+ \advance\@MXV@traiselen by -0.5\@MXV@depth%
%
- %some link attributes (if hyperref not loaded)
- \ifthenelse{\isundefined{\@pdfborder}}{%
- \def\@MXV@urlattr{}%
- \def\@MXV@runattr{}%
- }{%
- \edef\@MXV@urlattr{%
- /Border [\@pdfborder]%
- /C [\@urlbordercolor]%
- /H \@pdfhighlight%
- }%
- \edef\@MXV@runattr{%
- /Border [\@pdfborder]%
- /C [\@runbordercolor]%
- /H \@pdfhighlight%
- }%
+ \ifthenelse{\equal{#3}{}}{% no height argument
+ \@MXV@braiselen=0.5\@MXV@height%
+ }{%override height of text, height argument given
+ \@MXV@braiselen=#3%
+ \@MXV@braiselen=0.5\@MXV@braiselen%
+ \setlength{\@MXV@height}{#3}%
}%
%
- %label this annotation for later player id number determination &
- %check for multiply-defined labels
- \ifx\@MXV@label\@empty\else%
- %
- \ifthenelse{%
- \NOT\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.playerid}}{undefined}%
- \AND%
- \NOT\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.playerid}}{%
- \the\@MXV@includes}%
+ \ifthenelse{\equal{\@MXV@boxdepth}{}}{% no depth option given
+ \ifthenelse{\lengthtest{\@MXV@totalheight>\@MXV@height}}{%
+ %depth of text only taken into account, if the total height
+ %is smaller than the height of the display box
+ \advance\@MXV@braiselen by -0.5\@MXV@depth%
}{%
- \PackageWarning{movie15}{%
- Label `\@MXV@label' multiply defined%
+ \@MXV@depth=0pt%
+ }%
+ }{%override depth of text, depth option given
+ \setlength{\@MXV@@boxdepth}{\@MXV@boxdepth}%
+ \advance\@MXV@braiselen by -0.5\@MXV@@boxdepth%
+ \setlength{\@MXV@depth}{\@MXV@boxdepth}%
+ }%
+ %finally centre text vertically
+ \ifthenelse{\NOT\equal{#3}{}\OR\NOT\equal{\@MXV@boxdepth}{}}{%
+ \advance\@MXV@traiselen by -\@MXV@braiselen%
+ \@MXV@traiselen=-\@MXV@traiselen%
+ \savebox{\@MXV@textbox}{\raisebox{\@MXV@traiselen}[0pt][0pt]{%
+ \usebox{\@MXV@textbox}}}%
+ }{}%
+ \ifthenelse{\equal{#2}{}}{}{%override horiz. dimension of text
+ \setlength{\@MXV@width}{#2}%
+ %centre text horizontally
+ \savebox{\@MXV@textbox}{\makebox[\@MXV@width][c]{\usebox{\@MXV@textbox}}}%
+ }%
+ %
+ %find out if some presentation making package is being used
+ %and whether the contents should be hidden or not on the current slide
+ \setboolean{@MXV@presentation}{false}%
+ \setboolean{@MXV@hide}{false}%
+ \ifx\ifpd@overlay\@undefined\relax%
+ \else% powerdot
+ \setboolean{@MXV@presentation}{true}%
+ \ifthenelse{\boolean{pd@overlay}}{}{%
+ \ifthenelse{\pd@method=2}{}{%
+ \setboolean{@MXV@hide}{true}%
}%
- \ifthenelse{\isundefined{\@MXV@multiwarning}}{%
- \gdef\@MXV@multiwarning{}%
- \AtEndDocument{%
- \PackageWarningNoLine{movie15}{%
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak
- @@ There were multiply-defined labels! @@\MessageBreak
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}%
- }%
- }{}%
+ }%
+ \fi%
+ \ifx\ifbeamer@anotherslide\@undefined\relax\else%
+ \setboolean{@MXV@presentation}{true}%
+ \ifthenelse{\boolean{beamer@anotherslide}}{%
+ \setboolean{@MXV@hide}{true}%
}{}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.playerid}{\the\@MXV@includes}%
\fi%
%
- \ifthenelse{\boolean{@MXV@externalviewer}}{%
- \ifx\@MXV@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@label.externalviewer}{true}%
- \fi%
+ \ifthenelse{\boolean{@MXV@hide}}{%
+ %insert whitespace instead of annot
+ \phantom{\vrule width \@MXV@width height \@MXV@height depth \@MXV@depth}%
}{%
- %what is to be put into movie link annot depends on the following
- \ifx\@MXV@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@label.externalviewer}{false}%
- \fi%
+ \ifthenelse{\NOT\boolean{@MXV@url}\AND\NOT\boolean{@MXV@inline}}{%
+ \IfFileExists{#4}{}{%
+ \PackageError{movie15}{%
+ File `#4' cannot be opened for embedding.\MessageBreak
+ Did you forget to set option `url' or `inline=false'?
+ }{%
+ Try any of the options `url' or `inline=false'!
+ }%
+ }%
+ }{}%
%
- %label this annotation for later page number determination
- \@MXV@labeltoaux{@MXV@player\the\@MXV@includes.page}{%
- \noexpand\the\@MXV@page}%
+ %guess the mime type based on the filename extension
+ \filename@parse{#4}%
+ \ifthenelse{\equal{\@MXV@mime}{@MXV@auto}}{%
+ \@MXV@guessmime{#4}{\filename@ext}}{}%
+ \if\filename@ext\relax%
+ \xdef\@MXV@filename{\filename@base}%
+ \else%
+ \xdef\@MXV@filename{\filename@base.\filename@ext}%
+ \fi%
%
- %test for hyperref package
- \ifthenelse{\NOT\boolean{pdf}\AND\isundefined{\pdfmark}}{%
- \@MXV@missing{hyperref}%
+ %if 3D object is not embedded inline we must use some external player :(
+ \ifthenelse{%
+ \boolean{@MXV@iiid}
+ \AND\NOT\boolean{@MXV@inline}
+ }{%
+ \setboolean{@MXV@externalviewer}{true}%
}{}%
%
- %depending on options do content specific stuff
- \ifthenelse{\boolean{@MXV@iiid}}{%
- % #### 3D ####
- \ifthenelse{\boolean{@MXV@autoplay}\OR\boolean{@MXV@autoresume}}{%
- \def\@MXV@activation{/A/PV/AIS/L}% open 3D object, run animation
- }{%
- \if@MXV@runposter%
- \def\@MXV@activation{/A/PV/AIS/I}%open 3D obj but don't run animation
+ %some link attributes (if hyperref not loaded)
+ \ifthenelse{\isundefined{\@pdfborder}}{%
+ \def\@MXV@urlattr{}%
+ \def\@MXV@runattr{}%
+ }{%
+ \edef\@MXV@urlattr{%
+ \ifx\beamer@version\@undefined%
+ /Border [\@pdfborder]%
\else%
- \def\@MXV@activation{/A/XA}% explicit activation by user
+ /Border [1 1 1]%
\fi%
+ /C [\@urlbordercolor]%
+ /H \@pdfhighlight%
}%
- \if@MXV@autostop%
- \def\@MXV@deactivation{/D/PI/DIS/I}%
- \else%
- \if@MXV@autopause%
- \def\@MXV@deactivation{/D/PI/DIS/I}%
+ \edef\@MXV@runattr{%
+ \ifx\beamer@version\@undefined%
+ /Border [\@pdfborder]%
\else%
- \if@MXV@autoclose%
- \def\@MXV@deactivation{/D/PI/DIS/U}%
- \else%@MXV@continue
- \def\@MXV@deactivation{/D/PI/DIS/L}%
- \fi%
+ /Border [1 1 1]%
\fi%
- \fi%
- \if@MXV@externalviewer\else%
- %counter for 3D inclusion on current page
- \ifthenelse{%
- \equal{%
- \@MXV@getlabelvalue{@MXV@player\the\@MXV@includes.page}%
- }{\@MXV@oldpage}%
- }{%
- \global\advance\@MXV@iiidoncurpage by 1%
- }{%
- \global\@MXV@iiidoncurpage=1%
+ /C [\@runbordercolor]%
+ /H \@pdfhighlight%
+ }%
+ }%
+ %
+ \global\advance\@MXV@includes by 1%increment counter
+ %
+ %label this annotation for later page number determination
+ \@MXV@labeltoaux{@MXV@annot\the\@MXV@includes.page}{%
+ \noexpand\the\@MXV@page}%
+ %
+ %label this annotation for later annot id number determination &
+ %check for multiply-defined labels
+ % \@MXV@label --> automatic (presentation mode) or user defined label
+ % \@MXV@@label = \@MXV@label (non presentation doc classes)
+ % \@MXV@@label = \@MXV@label + physical page No. (presentation mode)
+ \ifx\@MXV@label\@empty%
+ %when used with presentation packages, annots must be labelled,
+ %use the media file name, if no label provided
+ \ifthenelse{\boolean{@MXV@presentation}}{%
+ \xdef\@MXV@label{#4}%
+ }{}%
+ \fi%
+ \ifx\@MXV@label\@empty\else%
+ \ifthenelse{\boolean{@MXV@presentation}}{%
+ %in presentation mode, the label must be extended by the physical page No.
+ \xdef\@MXV@@label{\@MXV@label.\@MXV@getlabelvalue{@MXV@annot\the\@MXV@includes.page}}%
+ }{%
+ \xdef\@MXV@@label{\@MXV@label}%
+ }%
+ \fi%
+ \ifx\@MXV@@label\@empty\else%
+ \ifthenelse{%
+ \NOT\equal{\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}}{undefined}%
+ \AND%
+ \NOT\equal{\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}}{%
+ \the\@MXV@includes}%
+ }{%
+ \PackageWarning{movie15}{%
+ Label `\@MXV@label' multiply defined%
}%
- \xdef\@MXV@oldpage{\@MXV@getlabelvalue{%
- @MXV@player\the\@MXV@includes.page}}%
- \fi%
+ \ifthenelse{\isundefined{\@MXV@multiwarning}}{%
+ \gdef\@MXV@multiwarning{}%
+ \AtEndDocument{%
+ \PackageWarningNoLine{movie15}{%
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak
+ @@ There were multiply-defined labels! @@\MessageBreak
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}%
+ }%
+ }{}%
+ }{}%
+ \@MXV@labeltoaux{@MXV@\@MXV@@label.annotid}{\the\@MXV@includes}%
+ \@MXV@newlabel{@MXV@\@MXV@@label.annotid}{\the\@MXV@includes}%
+ \fi%
+ %
+ \ifthenelse{\boolean{@MXV@externalviewer}}{%
\ifx\@MXV@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@label.3D}{true}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.3Doncurpage}{\the\@MXV@iiidoncurpage}%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.externalviewer}{true}%
+ \@MXV@newlabel{@MXV@\@MXV@label.externalviewer}{true}%
\fi%
- }{%#### 2D ####
- \ifx\@MXV@startat\@empty% default start position
- \gdef\@MXV@startat{, startAt: 0}%
- \fi%
- %write player settings to aux file
+ }{%
+ %what is to be put into movie link annot depends on the following
\ifx\@MXV@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@label.mouse}{%
- \if@MXV@mouse true\else false\fi}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.showUI}{\@MXV@ctrls}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.palindrome}{\@MXV@palindrome}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.repeat}{\@MXV@repeat}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.rate}{\@MXV@rate}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.startAt}{\@MXV@startat}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.endAt}{\@MXV@endat}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.volume}{\@MXV@volume}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.autoplay}{%
- \if@MXV@autoplay true\else false\fi}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.3D}{false}%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.externalviewer}{false}%
+ \@MXV@newlabel{@MXV@\@MXV@label.externalviewer}{false}%
\fi%
%
- \ifthenelse{\boolean{@MXV@autoplay}\OR\boolean{@MXV@runposter}}{%
- \xdef\@MXV@pageopenopentry{/OP 4}%
- }{%
- \if@MXV@autoresume%
- \xdef\@MXV@pageopenopentry{/OP 3}%
+ %test for hyperref package
+ \ifthenelse{\NOT\boolean{pdf}\AND\isundefined{\pdfmark}}{%
+ \@MXV@missing{hyperref}%
+ }{}%
+ %
+ %depending on options do content specific stuff
+ \ifthenelse{\boolean{@MXV@iiid}}{%
+ % #### 3D ####
+ \ifthenelse{\boolean{@MXV@autoplay}\OR\boolean{@MXV@autoresume}}{%
+ \def\@MXV@activation{/A/PV/AIS/L}% open 3D object, run animation
+ }{%
+ \if@MXV@runposter%
+ \def\@MXV@activation{/A/PV/AIS/I}%open 3D obj but don't run animation
+ \else%
+ \def\@MXV@activation{/A/XA}% explicit activation by user
+ \fi%
+ }%
+ \if@MXV@autostop%
+ \def\@MXV@deactivation{/D/PI/DIS/I}%
\else%
- \xdef\@MXV@pageopenopentry{/OP 2}%
+ \if@MXV@autopause%
+ \def\@MXV@deactivation{/D/PI/DIS/I}%
+ \else%
+ \if@MXV@autoclose%
+ \def\@MXV@deactivation{/D/PI/DIS/U}%
+ \else%@MXV@continue
+ \def\@MXV@deactivation{/D/PI/DIS/L}%
+ \fi%
+ \fi%
\fi%
- }%
- %
- \if@MXV@autostop%
- \xdef\@MXV@pagecloseopentry{/OP 1}%
- \else%
- \if@MXV@autopause%
- \xdef\@MXV@pagecloseopentry{/OP 2}%
+ \if@MXV@externalviewer\else%
+ %counter for 3D inclusion on current page
+ \ifthenelse{%
+ \equal{%
+ \@MXV@getlabelvalue{@MXV@annot\the\@MXV@includes.page}%
+ }{\@MXV@oldpage}%
+ }{%
+ \global\advance\@MXV@iiidoncurpage by 1%
+ }{%
+ \global\@MXV@iiidoncurpage=1%
+ }%
+ \xdef\@MXV@oldpage{\@MXV@getlabelvalue{%
+ @MXV@annot\the\@MXV@includes.page}}%
+ \fi%
+ \ifx\@MXV@label\@empty\else%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.3D}{true}%
+ \@MXV@newlabel{@MXV@\@MXV@label.3D}{true}%
+ \fi%
+ \ifx\@MXV@@label\@empty\else%
+ \@MXV@labeltoaux{@MXV@\@MXV@@label.3Doncurpage}{\the\@MXV@iiidoncurpage}%
+ \@MXV@newlabel{@MXV@\@MXV@@label.3Doncurpage}{\the\@MXV@iiidoncurpage}%
+ \fi%
+ }{%#### 2D ####
+ %get the player ID
+ \if@MXV@presentation%
+ \ifthenelse{%
+ \equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.playerid}}{undefined}%
+ }{%
+ \global\advance\@MXV@players by 1%increment counter
+ }{%
+ \global\@MXV@players=\@MXV@getlabelvalue{@MXV@\@MXV@label.playerid}%
+ }%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.playerid}{\the\@MXV@players}%
+ \@MXV@newlabel{@MXV@\@MXV@label.playerid}{\the\@MXV@players}%
+ \edef\@MXV@currplayer{\the\@MXV@players}%
\else%
- \if@MXV@autoclose%
- \xdef\@MXV@pagecloseopentry{/OP 1}%
- \else% @MXV@continue
- \xdef\@MXV@pagecloseopentry{/OP 3}%
+ \ifx\@MXV@label\@empty\else%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.playerid}{\the\@MXV@includes}%
+ \@MXV@newlabel{@MXV@\@MXV@label.playerid}{\the\@MXV@includes}%
\fi%
+ \edef\@MXV@currplayer{\the\@MXV@includes}%
\fi%
- \fi%
- %
- %JavaScripts for playback control
- %script for page invisible event
- \if@MXV@autopause%
- \xdef\@MXV@pageclosejsentry{%
- /JS (
- try{%
- if(player\the\@MXV@includes.isPlaying){%
- player\the\@MXV@includes.pause();
- }
- focusonplayer=-1; %page change
- player\the\@MXV@includes.visible=false;
- }
- catch(e){}
- )%
+ %
+ \ifx\@MXV@startat\@empty% default start position
+ \gdef\@MXV@startat{, startAt: 0}%
+ \fi%
+ %write player settings to aux file
+ \ifx\@MXV@label\@empty\else%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.mouse}{%
+ \if@MXV@mouse true\else false\fi}%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.showUI}{\@MXV@ctrls}%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.palindrome}{\@MXV@palindrome}%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.repeat}{\@MXV@repeat}%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.rate}{\@MXV@rate}%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.startAt}{\@MXV@startat}%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.endAt}{\@MXV@endat}%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.volume}{\@MXV@volume}%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.autoplay}{%
+ \if@MXV@autoplay true\else false\fi}%
+ \@MXV@labeltoaux{@MXV@\@MXV@label.3D}{false}%
+ \@MXV@newlabel{@MXV@\@MXV@label.mouse}{%
+ \if@MXV@mouse true\else false\fi}%
+ \@MXV@newlabel{@MXV@\@MXV@label.showUI}{\@MXV@ctrls}%
+ \@MXV@newlabel{@MXV@\@MXV@label.palindrome}{\@MXV@palindrome}%
+ \@MXV@newlabel{@MXV@\@MXV@label.repeat}{\@MXV@repeat}%
+ \@MXV@newlabel{@MXV@\@MXV@label.rate}{\@MXV@rate}%
+ \@MXV@newlabel{@MXV@\@MXV@label.startAt}{\@MXV@startat}%
+ \@MXV@newlabel{@MXV@\@MXV@label.endAt}{\@MXV@endat}%
+ \@MXV@newlabel{@MXV@\@MXV@label.volume}{\@MXV@volume}%
+ \@MXV@newlabel{@MXV@\@MXV@label.autoplay}{%
+ \if@MXV@autoplay true\else false\fi}%
+ \@MXV@newlabel{@MXV@\@MXV@label.3D}{false}%
+ \fi%
+ %
+ \ifthenelse{\boolean{@MXV@autoplay}\OR\boolean{@MXV@runposter}}{%
+ \xdef\@MXV@pageopenopentry{/OP 4}%
+ }{%
+ \if@MXV@autoresume%
+ \xdef\@MXV@pageopenopentry{/OP 3}%
+ \else%
+ \xdef\@MXV@pageopenopentry{/OP 2}%
+ \fi%
}%
- \else%
+ %
\if@MXV@autostop%
+ \xdef\@MXV@pagecloseopentry{/OP 1}%
+ \else%
+ \if@MXV@autopause%
+ \xdef\@MXV@pagecloseopentry{/OP 2}%
+ \else%
+ \if@MXV@autoclose%
+ \xdef\@MXV@pagecloseopentry{/OP 1}%
+ \else% @MXV@continue
+ \xdef\@MXV@pagecloseopentry{/OP 3}%
+ \fi%
+ \fi%
+ \fi%
+ %
+ %JavaScripts for playback control
+ %script for page invisible event
+ \if@MXV@autopause%
\xdef\@MXV@pageclosejsentry{%
/JS (
try{%
- %players tend to be buggy, always stop from playing state
- if(!player\the\@MXV@includes.isPlaying){
- player\the\@MXV@includes.play();
+ if(player\@MXV@currplayer.isPlaying){%
+ player\@MXV@currplayer.pause();
+ player\@MXV@currplayer.settings.privateData.paused=true;
}
- player\the\@MXV@includes.stop();
- if(
- player\the\@MXV@includes.settings.startAt.time
- || player\the\@MXV@includes.settings.startAt.frame
- || player\the\@MXV@includes.settings.startAt.marker
- || player\the\@MXV@includes.id ==
- 'vnd.adobe.swname:AAPL_QuickTime'
- ){
- player\the\@MXV@includes.seek(%
- player\the\@MXV@includes.settings.startAt);
- }
- focusonplayer=-1;
- player\the\@MXV@includes.visible=false;
+ focusonplayer=-1; %page change
+ player\@MXV@currplayer.visible=false;
}
catch(e){}
)%
}%
\else%
- \if@MXV@autoclose%
+ \if@MXV@autostop%
\xdef\@MXV@pageclosejsentry{%
/JS (
try{%
- player\the\@MXV@includes.close(app.media.closeReason.general);
- focusonplayer=-1; %page change
- player\the\@MXV@includes.visible=false;
+ player\@MXV@currplayer.settings.privateData.paused=false;
+ %players tend to be bugged, always stop from playing state
+ if(!player\@MXV@currplayer.isPlaying){
+ player\@MXV@currplayer.play();
+ }
+ player\@MXV@currplayer.stop();
+ if(
+ player\@MXV@currplayer.settings.startAt.time
+ || player\@MXV@currplayer.settings.startAt.frame
+ || player\@MXV@currplayer.settings.startAt.marker
+ || player\@MXV@currplayer.id ==
+ 'vnd.adobe.swname:AAPL_QuickTime'
+ ){
+ player\@MXV@currplayer.seek(%
+ player\@MXV@currplayer.settings.startAt);
+ }
+ focusonplayer=-1;
+ player\@MXV@currplayer.visible=false;
}
catch(e){}
)%
}%
\else%
- \xdef\@MXV@pageclosejsentry{%@MXV@continue
- /JS (
- try{%
- focusonplayer=-1; %page change
- player\the\@MXV@includes.visible=false;
- }
- catch(e){}
- )%
- }%
+ \if@MXV@autoclose%
+ \xdef\@MXV@pageclosejsentry{%
+ /JS (
+ try{%
+ player\@MXV@currplayer.close(app.media.closeReason.general);
+ focusonplayer=-1; %page change
+ player\@MXV@currplayer.visible=false;
+ }
+ catch(e){}
+ )%
+ }%
+ \else%
+ \xdef\@MXV@pageclosejsentry{%@MXV@continue
+ /JS (
+ try{%
+ focusonplayer=-1; %page change
+ player\@MXV@currplayer.visible=false;
+ }
+ catch(e){}
+ )%
+ }%
+ \fi%
\fi%
\fi%
- \fi%
- %
- %script for activation/resume on page open event
- \xdef\@MXV@pageopenjsentry{%
- /JS (
- try{%
- if(player\the\@MXV@includes.isOpen){%
- player\the\@MXV@includes.visible=true;
- %
- %start or resume media which have autoplay option set;
- %also resume paused media which have autoresume option set
- \if@MXV@autoplay%
- player\the\@MXV@includes.play();
- if(!player\the\@MXV@includes.isPlaying){% still not playing?!
- if(
- player\the\@MXV@includes.settings.startAt.time
- || player\the\@MXV@includes.settings.startAt.frame
- || player\the\@MXV@includes.settings.startAt.marker
- || player\the\@MXV@includes.id ==
- 'vnd.adobe.swname:AAPL_QuickTime'
- ){
- player\the\@MXV@includes.seek(
- player\the\@MXV@includes.settings.startAt);
- }else{
- player\the\@MXV@includes.stop();
+ %
+ %script for activation/resume on page open event
+ \xdef\@MXV@pageopenjsentry{%
+ /JS (
+ try{%
+ if(player\@MXV@currplayer.isOpen){%
+ %drag the player on the current slide (presentation mode)
+ player\@MXV@currplayer.page=this.pageNum;
+ %... and make it visible
+ player\@MXV@currplayer.visible=true;
+ %
+ %start or resume media which have autoplay option set;
+ %also resume paused media which have autoresume option set
+ \if@MXV@autoplay%
+ player\@MXV@currplayer.settings.privateData.paused=false;
+ player\@MXV@currplayer.play();
+ if(!player\@MXV@currplayer.isPlaying){% still not playing?!
+ if(
+ player\@MXV@currplayer.settings.startAt.time
+ || player\@MXV@currplayer.settings.startAt.frame
+ || player\@MXV@currplayer.settings.startAt.marker
+ || player\@MXV@currplayer.id=='vnd.adobe.swname:AAPL_QuickTime'
+ ){
+ player\@MXV@currplayer.seek(
+ player\@MXV@currplayer.settings.startAt);
+ }else{
+ player\@MXV@currplayer.stop();
+ }
+ player\@MXV@currplayer.play();
}
- player\the\@MXV@includes.play();
- }
- \else%
- \if@MXV@autoresume%
- if(player\the\@MXV@includes.settings.privateData.paused){%
- player\the\@MXV@includes.play();
- if(!player\the\@MXV@includes.isPlaying){%
- if(
- player\the\@MXV@includes.settings.startAt.time
- || player\the\@MXV@includes.settings.startAt.frame
- || player\the\@MXV@includes.settings.startAt.marker
- || player\the\@MXV@includes.id ==
- 'vnd.adobe.swname:AAPL_QuickTime'
- ){
- player\the\@MXV@includes.seek(%
- player\the\@MXV@includes.settings.startAt);
- }else{
- player\the\@MXV@includes.stop();%
+ \else%
+ \if@MXV@autoresume%
+ if(player\@MXV@currplayer.settings.privateData.paused){%
+ player\@MXV@currplayer.settings.privateData.paused=false;
+ player\@MXV@currplayer.play();
+ if(!player\@MXV@currplayer.isPlaying){%
+ if(
+ player\@MXV@currplayer.settings.startAt.time
+ || player\@MXV@currplayer.settings.startAt.frame
+ || player\@MXV@currplayer.settings.startAt.marker
+ || player\@MXV@currplayer.id ==
+ 'vnd.adobe.swname:AAPL_QuickTime'
+ ){
+ player\@MXV@currplayer.seek(%
+ player\@MXV@currplayer.settings.startAt);
+ }else{
+ player\@MXV@currplayer.stop();%
+ }
+ player\@MXV@currplayer.play();
}
- player\the\@MXV@includes.play();
}
- }
+ \fi%
\fi%
- \fi%
+ }
+ else{%
+ throw "isClosed";
+ }
}
- else{%
- throw "isClosed";
+ catch(e){%
+ \@MXV@if{\if@MXV@autoplay true\else\if@MXV@runposter true\else %
+ false\fi\fi}%
+ if(focusonplayer==undefined){%
+ var focusonplayer=0; %shared by all annots
+ }
+ \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}%
+ {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}%
+ \@MXV@events{\@MXV@currplayer}%
+ {\if@MXV@mouse true\else false\fi}%
+ {\if@MXV@autoplay true\else false\fi}%
+ var player\@MXV@currplayer=app.media.openPlayer({%
+ settings: settings,
+ events: events
+ });
+ \fi%
+ }%
+ )
+ }%
+ %
+ %script for normal activation by mouse click
+ \xdef\@MXV@activationjsentry{%
+ /JS (
+ if(focusonplayer==undefined){%
+ var focusonplayer=0; %shared by all annots
}
- }
- catch(e){%
- \@MXV@if{\if@MXV@autoplay true\else\if@MXV@runposter true\else %
- false\fi\fi}%
- if(focusonplayer==undefined){%
- var focusonplayer=0; %shared by all annots
- }
- \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}%
- {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}%
- \@MXV@events{\the\@MXV@includes}%
- {\if@MXV@mouse true\else false\fi}%
- {\if@MXV@autoplay true\else false\fi}%
- var player\the\@MXV@includes=app.media.openPlayer({%
- settings: settings,
- events: events
- });
- \fi%
- }%
- )
- }%
- %
- %script for normal activation by mouse click
- \xdef\@MXV@activationjsentry{%
- /JS (
- if(focusonplayer==undefined){%
- var focusonplayer=0; %shared by all annots
- }
- \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}%
- {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}%
- \@MXV@events{\the\@MXV@includes}{\if@MXV@mouse true\else false\fi}%
- {true}%
- var player\the\@MXV@includes=app.media.openPlayer({%
- settings: settings,
- events: events
- });
- )
- }%
- }%
- }%
- %
- %total height of text
- \@MXV@totalheight=\@MXV@height%
- \advance\@MXV@totalheight by \@MXV@depth%
- %traiselen=distance at which text is to be raised to centre it vertically
- %braiselen=vertical centre of media box (auxiliary measure)
- \@MXV@traiselen=0.5\@MXV@height%
- \advance\@MXV@traiselen by -0.5\@MXV@depth%
- %
- \ifthenelse{\equal{#3}{}}{% no height argument
- \@MXV@braiselen=0.5\@MXV@height%
- }{%override height of text, height argument given
- \@MXV@braiselen=#3%
- \@MXV@braiselen=0.5\@MXV@braiselen%
- \setlength{\@MXV@height}{#3}%
- }%
- %
- \ifthenelse{\equal{\@MXV@boxdepth}{}}{% no depth option given
- \ifthenelse{\lengthtest{\@MXV@totalheight>\@MXV@height}}{%
- %depth of text only taken into account, if the total height
- %is smaller than the height of the display box
- \advance\@MXV@braiselen by -0.5\@MXV@depth%
- }{%
- \@MXV@depth=0pt%
- }%
- }{%override depth of text, depth option given
- \setlength{\@MXV@@boxdepth}{\@MXV@boxdepth}%
- \advance\@MXV@braiselen by -0.5\@MXV@@boxdepth%
- \setlength{\@MXV@depth}{\@MXV@boxdepth}%
- }%
- %finally centre text vertically
- \ifthenelse{\NOT\equal{#3}{}\OR\NOT\equal{\@MXV@boxdepth}{}}{%
- \advance\@MXV@traiselen by -\@MXV@braiselen%
- \@MXV@traiselen=-\@MXV@traiselen%
- \savebox{\@MXV@textbox}{\raisebox{\@MXV@traiselen}[0pt][0pt]{%
- \usebox{\@MXV@textbox}}}%
- }{}%
- \ifthenelse{\equal{#2}{}}{}{%override horiz. dimension of text
- \setlength{\@MXV@width}{#2}%
- %centre text horizontally
- \savebox{\@MXV@textbox}{\makebox[\@MXV@width][c]{\usebox{\@MXV@textbox}}}%
- }%
- %
- %insert textbox, obscured by poster
- \if@MXV@boxopt%
- \if@MXV@textoverposter\else%
- \makebox[0pt][l]{\usebox{\@MXV@textbox}}%
- \fi%
- \fi%
- %
- \ifthenelse{\NOT\boolean{@MXV@url}\AND\NOT\boolean{@MXV@inline}}{%
- \IfFileExists{#4}{}{%
- \AtEndDocument{%
- \PackageWarning{movie15}{%
- File: `#4'\MessageBreak
- could not be found in the current directory.\MessageBreak
- Maybe it is a URL and you just forgot to set\MessageBreak
- option `url' ?
+ \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}%
+ {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}%
+ \@MXV@events{\@MXV@currplayer}{\if@MXV@mouse true\else false\fi}%
+ {true}%
+ var player\@MXV@currplayer=app.media.openPlayer({%
+ settings: settings,
+ events: events
+ });
+ )
}%
}%
}%
- }{}%
- %
- %insert link target, if media has been labelled
- \ifx\@MXV@label\@empty\else%
- \raisebox{\@MXV@height}{%
- \ifpdf%
- \pdfdest name {@MXV@\@MXV@label} xyz %
- \else%
- \hypertarget{@MXV@\@MXV@label}{}%
- \fi%
+ %
+ %insert link target, if media has been labelled
+ \ifthenelse{\NOT\equal{\@MXV@@label}{}}{%
+ \raisebox{\@MXV@height}{%
+ \ifpdf%
+ \pdfdest name {@MXV@\@MXV@@label} xyz %
+ \else%
+ \hypertarget{@MXV@\@MXV@@label}{}%
+ \fi%
+ }%
+ }{}%
+ %
+ %insert textbox, obscured by poster
+ \ifthenelse{\boolean{@MXV@boxopt}\AND\NOT\boolean{@MXV@textoverposter}}{%
+ \makebox[0pt][l]{\usebox{\@MXV@textbox}}%
+ }{}%
+ %
+ %insert annotation
+ \ifthenelse{\boolean{@MXV@iiid}}{%
+ \@MXV@includeiiid{\@MXV@width}{\@MXV@height}{\@MXV@depth}{#4}%
+ }{%
+ \@MXV@includemovie{\@MXV@width}{\@MXV@height}{\@MXV@depth}{#4}%
}%
- \fi%
- %
- %insert annotation
- \ifthenelse{\boolean{@MXV@iiid}}{%
- \@MXV@includeiiid{\@MXV@width}{\@MXV@height}{\@MXV@depth}{#4}%
- }{%
- \@MXV@includemovie{\@MXV@width}{\@MXV@height}{\@MXV@depth}{#4}%
+ %
+ %insert textbox, overprinting the poster
+ \ifthenelse{\boolean{@MXV@boxopt}\AND\boolean{@MXV@textoverposter}}{%
+ \makebox[0pt][r]{\usebox{\@MXV@textbox}}%
+ }{}%
}%
- %
- %insert textbox, overprinting the poster
- \if@MXV@boxopt%
- \if@MXV@textoverposter%
- \makebox[0pt][r]{\usebox{\@MXV@textbox}}%
- \fi%
- \fi%
}
%for remote control of media
\newcommand\movieref[3][]{%
\leavevmode%
- \@MXV@reset%
- \ifpdf\else\global\advance\@MXV@links by 1\fi%increment link counter
- %
\savebox{\@MXV@textbox}{#3}% save text argument
%
- %check if label is defined at all
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@#2.playerid}}{undefined}}{%
- \usebox{\@MXV@textbox}% write out text box
- \PackageWarning{movie15}{%
- Reference `#2' on page \thepage \space undefined%
- }%
- \ifthenelse{\isundefined{\@MXV@undefwarning}}{%
- \gdef\@MXV@undefwarning{}%
- \AtEndDocument{%
- \PackageWarningNoLine{movie15}{%
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak%
- @@ There were undefined references! @@\MessageBreak%
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}%
+ %find out if some presentation making package is being used
+ %and whether the contents should be hidden or not on the current slide
+ \setboolean{@MXV@presentation}{false}%
+ \setboolean{@MXV@hide}{false}%
+ \ifx\ifpd@overlay\@undefined\relax%
+ \else% powerdot
+ \setboolean{@MXV@presentation}{true}%
+ \ifthenelse{\boolean{pd@overlay}}{}{%
+ \ifthenelse{\pd@method=2}{}{%
+ \setboolean{@MXV@hide}{true}%
}%
+ }%
+ \fi%
+ \ifx\ifbeamer@anotherslide\@undefined\relax\else%
+ \setboolean{@MXV@presentation}{true}%
+ \ifthenelse{\boolean{beamer@anotherslide}}{%
+ \setboolean{@MXV@hide}{true}%
}{}%
- }{%
+ \fi%
%
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@#2.externalviewer}}{true}}{%
- \setboolean{@MXV@externalviewer}{true}%
+ \ifthenelse{\boolean{@MXV@hide}}{%
+ %put whitespace instead of link annot
+ \phantom{\usebox{\@MXV@textbox}}%
}{%
- \setboolean{@MXV@externalviewer}{false}%
- }%
- \if@MXV@externalviewer\else%
- %movieref used in 3D context?
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@#2.3D}}{true}}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \setboolean{@MXV@iiid}{true}%
- }{%
- \@MXV@neediiiD%
- }%
- }{}%
+ \@MXV@reset%
%
- %actions completely different in 3D & 2D context
- \ifthenelse{\boolean{@MXV@iiid}}{% #### 3D ####
- \setkeys{movie15}{#1}%
- \if@MXV@defaultviewprovided% define a new view,
- %using any of the coo, c2c, roo, caa options
- \edef\@MXV@args{\@MXV@coo\space\@MXV@ctoc\space\@MXV@roo\space}%
- \expandafter\@MXV@ciiwmatrix\@MXV@args% build C2W matrix
- \@MXV@viewobj% create pdf object of 3D view
- \edef\@MXV@iiidview{\@MXV@@viewobj}%
- %else use the indexed view specified by option `3Dviewindex'
- \fi%
- %
- %java script action
- \ifthenelse{\NOT\equal{\@MXV@jscriptiiidfile}{}%
- \OR\NOT\equal{\@MXV@calc}{}%
+ \xdef\@MXV@label{#2}%
+ %
+ \global\advance\@MXV@links by 1%increment link counter
+ %
+ %label this link for later page number determination
+ \@MXV@labeltoaux{@MXV@link\the\@MXV@links.page}{%
+ \noexpand\the\@MXV@page}%
+ %
+ \ifthenelse{\boolean{@MXV@presentation}}{%
+ %in presentation mode the label must be extended by the physical page No.
+ \xdef\@MXV@@label{\@MXV@label.\@MXV@getlabelvalue{@MXV@link\the\@MXV@links.page}}%
+ }{%
+ \xdef\@MXV@@label{\@MXV@label}%
+ }%
+ %
+ %check if label is defined at all
+ \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}}{undefined}}{%
+ \usebox{\@MXV@textbox}% write out text box
+ \PackageWarning{movie15}{%
+ Reference `\@MXV@label' on page \thepage \space undefined%
+ }%
+ \ifthenelse{\isundefined{\@MXV@undefwarning}}{%
+ \gdef\@MXV@undefwarning{}%
+ \AtEndDocument{%
+ \PackageWarningNoLine{movie15}{%
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak%
+ @@ There were undefined references! @@\MessageBreak%
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}%
+ }%
+ }{}%
+ }{%
+ \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.externalviewer}}{true}}{%
+ \setboolean{@MXV@externalviewer}{true}%
}{%
- \ifx\@MXV@jscriptiiidfile\@empty\else%
- \ifthenelse{%
- \equal{\@MXV@getlabelvalue{\@MXV@jscriptiiidfile}}{undefined}%
+ \setboolean{@MXV@externalviewer}{false}%
+ }%
+ \if@MXV@externalviewer\else%
+ %movieref used in 3D context?
+ \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.3D}}{true}}{%
+ \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
+ \setboolean{@MXV@iiid}{true}%
}{%
- \ifpdf%
- \pdfobj stream file {\@MXV@jscriptiiidfile}%
- \pdfrefobj\pdflastobj%
- \edef\@MXV@jscriptiiid{/JS \the\pdflastobj\space 0 R}%
- \@MXV@newlabel{\@MXV@jscriptiiidfile}{\the\pdflastobj}%
- \else%
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /_objdef {linkjscriptiiid\the\@MXV@links}%
- /type/stream%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {linkjscriptiiid\the\@MXV@links}%
- (\@MXV@jscriptiiidfile) (r) file%
- }%
- }%
- \edef\@MXV@jscriptiiid{%
- /JS {linkjscriptiiid\the\@MXV@links}%
- }%
- \@MXV@newlabel{\@MXV@jscriptiiidfile}%
- {linkjscriptiiid\the\@MXV@links}%
- \fi%
+ \@MXV@neediiiD%
+ }%
+ }{}%
+ %
+ %actions completely different in 3D & 2D context
+ \ifthenelse{\boolean{@MXV@iiid}}{% #### 3D ####
+ \setkeys{movie15}{#1}%
+ \if@MXV@defaultviewprovided% define a new view,
+ %using any of the coo, c2c, roo, caa options
+ \edef\@MXV@args{\@MXV@coo\space\@MXV@ctoc\space\@MXV@roo\space}%
+ \expandafter\@MXV@ciiwmatrix\@MXV@args% build C2W matrix
+ \@MXV@viewobj% create pdf object of 3D view
+ \edef\@MXV@iiidview{\@MXV@@viewobj}%
+ %else use the indexed view specified by option `3Dviewindex'
+ \fi%
+ %
+ %java script action
+ \ifthenelse{\NOT\equal{\@MXV@jscriptiiidfile}{}%
+ \OR\NOT\equal{\@MXV@calc}{}%
}{%
- \ifpdf%
- \edef\@MXV@jscriptiiid{%
- /JS \@MXV@getlabelvalue{\@MXV@jscriptiiidfile}\space 0 R%
- }%
- \else%
- \edef\@MXV@jscriptiiid{%
- /JS {\@MXV@getlabelvalue{\@MXV@jscriptiiidfile}}%
+ \ifx\@MXV@jscriptiiidfile\@empty\else%
+ \ifthenelse{%
+ \equal{\@MXV@getlabelvalue{\@MXV@jscriptiiidfile}}{undefined}%
+ }{%
+ \ifpdf%
+ \pdfobj stream file {\@MXV@jscriptiiidfile}%
+ \pdfrefobj\pdflastobj%
+ \edef\@MXV@jscriptiiid{/JS \the\pdflastobj\space 0 R}%
+ \@MXV@newlabel{\@MXV@jscriptiiidfile}{\the\pdflastobj}%
+ \else%
+ \pdfmark{%
+ pdfmark=/OBJ,%
+ Raw={%
+ /_objdef {linkjscriptiiid\the\@MXV@links}%
+ /type/stream%
+ }%
+ }%
+ \pdfmark{%
+ pdfmark=/PUT,%
+ Raw={%
+ {linkjscriptiiid\the\@MXV@links}%
+ (\@MXV@jscriptiiidfile) (r) file%
+ }%
+ }%
+ \edef\@MXV@jscriptiiid{%
+ /JS {linkjscriptiiid\the\@MXV@links}%
+ }%
+ \@MXV@newlabel{\@MXV@jscriptiiidfile}%
+ {linkjscriptiiid\the\@MXV@links}%
+ \fi%
+ }{%
+ \ifpdf%
+ \edef\@MXV@jscriptiiid{%
+ /JS \@MXV@getlabelvalue{\@MXV@jscriptiiidfile}\space 0 R%
+ }%
+ \else%
+ \edef\@MXV@jscriptiiid{%
+ /JS {\@MXV@getlabelvalue{\@MXV@jscriptiiidfile}}%
+ }%
+ \fi%
}%
\fi%
- }%
- \fi%
- \edef\@MXV@jscriptiiidaction{%
- /Next <<%
- /S/JavaScript% fill hash (annot3D) with refs to Annot3D objects
- /JS (% for use within the user provided script
- try{%
- annot3D["#2"]=getAnnots3D(%
- \@MXV@getlabelvalue{%
- @MXV@player\@MXV@getlabelvalue{@MXV@#2.playerid}.page%
- }-1%
- )[\@MXV@getlabelvalue{@MXV@#2.3Doncurpage}-1];
- annot3D["#2"].activated=true;
- }catch(e){%
- try{%
- annot3D=new Array;
- annot3D["#2"]=getAnnots3D(%
- \@MXV@getlabelvalue{%
- @MXV@player\@MXV@getlabelvalue{@MXV@#2.playerid}.page%
- }-1%
- )[\@MXV@getlabelvalue{@MXV@#2.3Doncurpage}-1];
- annot3D["#2"].activated=true;
- }catch(e){%
- spc=String.fromCharCode(32);
- app.alert("3D" + spc + "annotation" + spc + "could" + spc +
- "not" + spc + "be" + spc + "activated!");
- }%
- }%
- )%
- %JavaScript for calculating 3Droo and 3Dcoo settings for a given
- %aperture angle
- \ifx\@MXV@calc\@empty\else%
+ \edef\@MXV@jscriptiiidaction{%
/Next <<%
- /S/JavaScript%
- /JS (try{%
- %aperture angle of the virtual camera
- var aac = \@MXV@calc;
- %
- %list of nodes
- var nodes = annot3D["#2"].context3D.scene.nodes;
- var cnt = nodes.count;
- %
- %auxiliary vectors
- var dir = new annot3D["#2"].context3D.Vector3();
- var up = new annot3D["#2"].context3D.Vector3();
- var corner = new annot3D["#2"].context3D.Vector3();
- %
- %auxiliary 4x4 matrix
- var bbox4x4 = new annot3D["#2"].context3D.Matrix4x4();
- %
- %centre of global bounding box --> centre of orbit
- var coo = %
- annot3D["#2"].context3D.scene.computeBoundingBox().center;
- %
- %radius of bounding sphere
- var rBSphere = 0;
- %
- %iterate over all nodes in the scene
- for(i=0; i<cnt; i++){%
- var node = nodes.getByIndex(i);
- %
- %but inspect mesh nodes only
- if(node.constructor.name == 'Mesh'){%
- %get the bbox of the node (local coordinates)
- var bbox = node.computeBoundingBox();
- %
- %local to parent transformation matrix
- var trans = node.transform.transpose;
- %
- %build local to world transformation matrix by recursively
- %multiplying the parent's transf. matrix on the left
- var parent = node.parent;
- while(parent.constructor.name != 'Scene'){%
- trans = parent.transform.transpose.multiply(trans);
- parent = parent.parent;
- }%
- %
- %transform the local bounding box corner coordinates to
- %world coordinates for bounding sphere radius
- %determination;
- %Matrix4x4 method transformDirection(<Vector3>) seems
- %to be bugged, therefore we must resort to the
- %multiply(<Matrix4x4>) method using an auxiliary matrix
- %which contains the local bounding box corner coordinates
- %
- %auxiliary matrix from bbox.min coordinates
- bbox4x4.setView(bbox.min, dir, up);
- %
- %transform to world coordinates
- bbox4x4 = trans.multiply(bbox4x4.transpose);
- %
- %extract the transformed coordinates
- corner.set(bbox4x4.transpose.translation);
+ /S/JavaScript% fill hash (annot3D) with refs to Annot3D objects
+ /JS (% for use within the user provided script
+ try{%
+ annot3D["\@MXV@label"]=getAnnots3D(%
+ \@MXV@getlabelvalue{%
+ @MXV@annot\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}.page%
+ }-1%
+ )[\@MXV@getlabelvalue{@MXV@\@MXV@@label.3Doncurpage}-1];
+ annot3D["\@MXV@label"].activated=true;
+ }catch(e){%
+ try{%
+ annot3D=new Array;
+ annot3D["\@MXV@label"]=getAnnots3D(%
+ \@MXV@getlabelvalue{%
+ @MXV@annot\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}.page%
+ }-1%
+ )[\@MXV@getlabelvalue{@MXV@\@MXV@@label.3Doncurpage}-1];
+ annot3D["\@MXV@label"].activated=true;
+ }catch(e){%
+ spc=String.fromCharCode(32);
+ app.alert("3D" + spc + "annotation" + spc + "could" + spc +
+ "not" + spc + "be" + spc + "activated!");
+ }%
+ }%
+ )%
+ %JavaScript for calculating 3Droo and 3Dcoo settings for a given
+ %aperture angle
+ \ifx\@MXV@calc\@empty\else%
+ /Next <<%
+ /S/JavaScript%
+ /JS (try{%
+ %aperture angle of the virtual camera
+ var aac = \@MXV@calc;
%
- %vector from centre of orbit to bbox corner position
- corner.subtractInPlace(coo);
+ %list of nodes
+ var nodes = annot3D["\@MXV@label"].context3D.scene.nodes;
+ var cnt = nodes.count;
%
- %update bounding sphere radius
- rBSphere = Math.max(rBSphere, corner.length);
+ %auxiliary vectors
+ var dir = new annot3D["\@MXV@label"].context3D.Vector3();
+ var up = new annot3D["\@MXV@label"].context3D.Vector3();
+ var corner = new annot3D["\@MXV@label"].context3D.Vector3();
%
- %the same procedure with bbox.max
- bbox4x4.setView(bbox.max, dir, up);
- bbox4x4 = trans.multiply(bbox4x4.transpose);
- corner.set(bbox4x4.transpose.translation);
- corner.subtractInPlace(coo);
- rBSphere = Math.max(rBSphere, corner.length);
+ %auxiliary 4x4 matrix
+ var bbox4x4 = new annot3D["\@MXV@label"].context3D.Matrix4x4();
%
- %and with all remaining 6 bbox corners
- corner.set(bbox.min.x, bbox.max.y, bbox.max.z);
- bbox4x4.setView(corner, dir, up);
- bbox4x4 = trans.multiply(bbox4x4.transpose);
- corner.set(bbox4x4.transpose.translation);
- corner.subtractInPlace(coo);
- rBSphere = Math.max(rBSphere, corner.length);
+ %centre of global bounding box --> centre of orbit
+ var coo = %
+ annot3D["\@MXV@label"].context3D.scene.computeBoundingBox().center;
%
- corner.set(bbox.min.x, bbox.min.y, bbox.max.z);
- bbox4x4.setView(corner, dir, up);
- bbox4x4 = trans.multiply(bbox4x4.transpose);
- corner.set(bbox4x4.transpose.translation);
- corner.subtractInPlace(coo);
- rBSphere = Math.max(rBSphere, corner.length);
+ %radius of bounding sphere
+ var rBSphere = 0;
%
- corner.set(bbox.min.x, bbox.max.y, bbox.min.z);
- bbox4x4.setView(corner, dir, up);
- bbox4x4 = trans.multiply(bbox4x4.transpose);
- corner.set(bbox4x4.transpose.translation);
- corner.subtractInPlace(coo);
- rBSphere = Math.max(rBSphere, corner.length);
+ %iterate over all nodes in the scene
+ for(i=0; i<cnt; i++){%
+ var node = nodes.getByIndex(i);
+ %
+ %but inspect mesh nodes only
+ if(node.constructor.name == 'Mesh'){%
+ %get the bbox of the node (local coordinates)
+ var bbox = node.computeBoundingBox();
+ %
+ %local to parent transformation matrix
+ var trans = node.transform.transpose;
+ %
+ %build local to world transformation matrix by recursively
+ %multiplying the parent's transf. matrix on the left
+ var parent = node.parent;
+ while(parent.constructor.name != 'Scene'){%
+ trans = parent.transform.transpose.multiply(trans);
+ parent = parent.parent;
+ }%
+ %
+ %transform the local bounding box corner coordinates to
+ %world coordinates for bounding sphere radius
+ %determination;
+ %Matrix4x4 method transformDirection(<Vector3>) seems
+ %to be bugged, therefore we must resort to the
+ %multiply(<Matrix4x4>) method using an auxiliary matrix
+ %which contains the local bounding box corner coordinates
+ %
+ %auxiliary matrix from bbox.min coordinates
+ bbox4x4.setView(bbox.min, dir, up);
+ %
+ %transform to world coordinates
+ bbox4x4 = trans.multiply(bbox4x4.transpose);
+ %
+ %extract the transformed coordinates
+ corner.set(bbox4x4.transpose.translation);
+ %
+ %vector from centre of orbit to bbox corner position
+ corner.subtractInPlace(coo);
+ %
+ %update bounding sphere radius
+ rBSphere = Math.max(rBSphere, corner.length);
+ %
+ %the same procedure with bbox.max
+ bbox4x4.setView(bbox.max, dir, up);
+ bbox4x4 = trans.multiply(bbox4x4.transpose);
+ corner.set(bbox4x4.transpose.translation);
+ corner.subtractInPlace(coo);
+ rBSphere = Math.max(rBSphere, corner.length);
+ %
+ %and with all remaining 6 bbox corners
+ corner.set(bbox.min.x, bbox.max.y, bbox.max.z);
+ bbox4x4.setView(corner, dir, up);
+ bbox4x4 = trans.multiply(bbox4x4.transpose);
+ corner.set(bbox4x4.transpose.translation);
+ corner.subtractInPlace(coo);
+ rBSphere = Math.max(rBSphere, corner.length);
+ %
+ corner.set(bbox.min.x, bbox.min.y, bbox.max.z);
+ bbox4x4.setView(corner, dir, up);
+ bbox4x4 = trans.multiply(bbox4x4.transpose);
+ corner.set(bbox4x4.transpose.translation);
+ corner.subtractInPlace(coo);
+ rBSphere = Math.max(rBSphere, corner.length);
+ %
+ corner.set(bbox.min.x, bbox.max.y, bbox.min.z);
+ bbox4x4.setView(corner, dir, up);
+ bbox4x4 = trans.multiply(bbox4x4.transpose);
+ corner.set(bbox4x4.transpose.translation);
+ corner.subtractInPlace(coo);
+ rBSphere = Math.max(rBSphere, corner.length);
+ %
+ corner.set(bbox.max.x, bbox.min.y, bbox.min.z);
+ bbox4x4.setView(corner, dir, up);
+ bbox4x4 = trans.multiply(bbox4x4.transpose);
+ corner.set(bbox4x4.transpose.translation);
+ corner.subtractInPlace(coo);
+ rBSphere = Math.max(rBSphere, corner.length);
+ %
+ corner.set(bbox.max.x, bbox.min.y, bbox.max.z);
+ bbox4x4.setView(corner, dir, up);
+ bbox4x4 = trans.multiply(bbox4x4.transpose);
+ corner.set(bbox4x4.transpose.translation);
+ corner.subtractInPlace(coo);
+ rBSphere = Math.max(rBSphere, corner.length);
+ %
+ corner.set(bbox.max.x, bbox.max.y, bbox.min.z);
+ bbox4x4.setView(corner, dir, up);
+ bbox4x4 = trans.multiply(bbox4x4.transpose);
+ corner.set(bbox4x4.transpose.translation);
+ corner.subtractInPlace(coo);
+ rBSphere = Math.max(rBSphere, corner.length);
+ }%
+ }%
%
- corner.set(bbox.max.x, bbox.min.y, bbox.min.z);
- bbox4x4.setView(corner, dir, up);
- bbox4x4 = trans.multiply(bbox4x4.transpose);
- corner.set(bbox4x4.transpose.translation);
- corner.subtractInPlace(coo);
- rBSphere = Math.max(rBSphere, corner.length);
+ %radius of orbit
+ var roo = rBSphere / Math.sin(aac * Math.PI / 360.);
%
- corner.set(bbox.max.x, bbox.min.y, bbox.max.z);
- bbox4x4.setView(corner, dir, up);
- bbox4x4 = trans.multiply(bbox4x4.transpose);
- corner.set(bbox4x4.transpose.translation);
- corner.subtractInPlace(coo);
- rBSphere = Math.max(rBSphere, corner.length);
+ %assemble result string
+ var res = '';
+ spc=String.fromCharCode(32);
+ if(aac != 30){%
+ res += util.printf('3Daac=\%s,' + spc, %
+ (Math.abs(aac) < 1.001e-6 && Math.abs(aac) > 0 ? %
+ util.printf('\%.18f', aac): aac), 32%
+ );
+ }%
+ if(coo.length){%
+ res += util.printf( '3Dcoo=\%s' + spc + '\%s' + spc + '\%s,'
+ + spc, %
+ (Math.abs(coo.x) < 1.001e-6 && Math.abs(coo.x) > 0 ? %
+ util.printf('\%.18f', coo.x): coo.x), %
+ (Math.abs(coo.y) < 1.001e-6 && Math.abs(coo.y) > 0 ? %
+ util.printf('\%.18f', coo.y): coo.y), %
+ (Math.abs(coo.z) < 1.001e-6 && Math.abs(coo.z) > 0 ? %
+ util.printf('\%.18f', coo.z): coo.z)%
+ );
+ }%
+ res += '3Droo=' + roo + ',';
%
- corner.set(bbox.max.x, bbox.max.y, bbox.min.z);
- bbox4x4.setView(corner, dir, up);
- bbox4x4 = trans.multiply(bbox4x4.transpose);
- corner.set(bbox4x4.transpose.translation);
- corner.subtractInPlace(coo);
- rBSphere = Math.max(rBSphere, corner.length);
- }%
- }%
- %
- %radius of orbit
- var roo = rBSphere / Math.sin(aac * Math.PI / 360.);
- %
- %assemble result string
- var res = '';
- spc=String.fromCharCode(32);
- if(aac != 30){%
- res += util.printf('3Daac=\%s,' + spc, %
- (Math.abs(aac) < 1.001e-6 && Math.abs(aac) > 0 ? %
- util.printf('\%.18f', aac): aac), 32%
- );
- }%
- if(coo.length){%
- res += util.printf( '3Dcoo=\%s' + spc + '\%s' + spc + '\%s,'
- + spc, %
- (Math.abs(coo.x) < 1.001e-6 && Math.abs(coo.x) > 0 ? %
- util.printf('\%.18f', coo.x): coo.x), %
- (Math.abs(coo.y) < 1.001e-6 && Math.abs(coo.y) > 0 ? %
- util.printf('\%.18f', coo.y): coo.y), %
- (Math.abs(coo.z) < 1.001e-6 && Math.abs(coo.z) > 0 ? %
- util.printf('\%.18f', coo.z): coo.z)%
- );
- }%
- res += '3Droo=' + roo + ',';
- %
- %open pop-up displaying the result string
- var settings = {%
- initialize: function(dialog) {%
- dialog.load({%
- "text": res%
- });
- }, %
- description: {%
- name: '3D' + spc + 'Camera' + spc + 'Settings', %
- elements: [%
- {%
- type: "static_text", %
- name: 'Copy' + spc + 'and' + spc + 'paste' + spc +
- 'the' + spc + 'following' + spc + 'to' + spc +
- 'the' + spc + 'option' + spc + 'list' + spc +
- 'of' + spc + '\string\\\string\\includemovie!'%
- },
- {%
- type: "edit_text", %
- item_id: "text", %
- alignment: "align_fill", %
- readonly: true%
+ %open pop-up displaying the result string
+ var settings = {%
+ initialize: function(dialog) {%
+ dialog.load({%
+ "text": res%
+ });
}, %
- {%
- type: "ok", %
- ok_name: "Close"%
+ description: {%
+ name: '3D' + spc + 'Camera' + spc + 'Settings', %
+ elements: [%
+ {%
+ type: "static_text", %
+ name: 'Copy' + spc + 'and' + spc + 'paste' + spc +
+ 'the' + spc + 'following' + spc + 'to' + spc +
+ 'the' + spc + 'option' + spc + 'list' + spc +
+ 'of' + spc + '\string\\\string\\includemovie!'%
+ },
+ {%
+ type: "edit_text", %
+ item_id: "text", %
+ alignment: "align_fill", %
+ readonly: false%
+ }, %
+ {%
+ type: "ok", %
+ ok_name: "Close"%
+ }%
+ ]%
}%
- ]%
- }%
- };
- app.execDialog(settings);
- }catch(e){})%
- \fi%
- \ifx\@MXV@jscriptiiidfile\@empty\else%
- /Next <<%
- /S/JavaScript%
- \@MXV@jscriptiiid% user provided script
- >>%
- \fi%
- \ifx\@MXV@calc\@empty\else%
+ };
+ app.execDialog(settings);
+ }catch(e){})%
+ \fi%
+ \ifx\@MXV@jscriptiiidfile\@empty\else%
+ /Next <<%
+ /S/JavaScript%
+ \@MXV@jscriptiiid% user provided script
+ >>%
+ \fi%
+ \ifx\@MXV@calc\@empty\else%
+ >>%
+ \fi%
>>%
- \fi%
- >>%
- }%
- }{\edef\@MXV@jscriptiiidaction{}}%
- }{% #### 2D ####
- %retrieve original settings
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@#2.mouse}}{true}}{%
- \setboolean{@MXV@mouse}{true}%
- }{%
- \setboolean{@MXV@mouse}{false}%
- }%
- \edef\@MXV@ctrls{\@MXV@getlabelvalue{@MXV@#2.showUI}}%
- \edef\@MXV@palindrome{\@MXV@getlabelvalue{@MXV@#2.palindrome}}%
- \edef\@MXV@repeat{\@MXV@getlabelvalue{@MXV@#2.repeat}}%
- \edef\@MXV@rate{\@MXV@getlabelvalue{@MXV@#2.rate}}%
- \edef\@MXV@startat{\@MXV@getlabelvalue{@MXV@#2.startAt}}%
- \edef\@MXV@endat{\@MXV@getlabelvalue{@MXV@#2.endAt}}%
- \edef\@MXV@volume{\@MXV@getlabelvalue{@MXV@#2.volume}}%
- \setkeys{movie15}{#1}%override with new settings
- %
- \edef\@MXV@operation{}%
- %create /OP and /JS entries
- \if@MXV@linkplay%
- \edef\@MXV@operation{%
- /OP 0%
- /JS (%
- if(focusonplayer==undefined){%
- var focusonplayer=0; %shared by all annots
}%
- \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}%
- {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}%
- \@MXV@events{\@MXV@getlabelvalue{@MXV@#2.playerid}}%
- {\if@MXV@mouse true\else false\fi}{true}%
- try{%
- if(player\@MXV@getlabelvalue{@MXV@#2.playerid}.isOpen){%
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.close(%
- app.media.closeReason.general);
- player\@MXV@getlabelvalue{@MXV@#2.playerid}=null;
- }%
+ }{\edef\@MXV@jscriptiiidaction{}}%
+ }{% #### 2D ####
+ %retrieve original settings
+ \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.mouse}}{true}}{%
+ \setboolean{@MXV@mouse}{true}%
+ }{%
+ \setboolean{@MXV@mouse}{false}%
+ }%
+ \edef\@MXV@ctrls{\@MXV@getlabelvalue{@MXV@\@MXV@label.showUI}}%
+ \edef\@MXV@palindrome{\@MXV@getlabelvalue{@MXV@\@MXV@label.palindrome}}%
+ \edef\@MXV@repeat{\@MXV@getlabelvalue{@MXV@\@MXV@label.repeat}}%
+ \edef\@MXV@rate{\@MXV@getlabelvalue{@MXV@\@MXV@label.rate}}%
+ \edef\@MXV@startat{\@MXV@getlabelvalue{@MXV@\@MXV@label.startAt}}%
+ \edef\@MXV@endat{\@MXV@getlabelvalue{@MXV@\@MXV@label.endAt}}%
+ \edef\@MXV@volume{\@MXV@getlabelvalue{@MXV@\@MXV@label.volume}}%
+ \setkeys{movie15}{#1}%override with new settings
+ %
+ \edef\@MXV@operation{}%
+ %
+ %get the player ID
+ \edef\@MXV@currplayer{\@MXV@getlabelvalue{@MXV@\@MXV@label.playerid}}%
+ %
+ %create /OP and /JS entries
+ \if@MXV@linkplay%
+ \edef\@MXV@operation{%
+ /OP 0%
+ /JS (%
+ if(focusonplayer==undefined){%
+ var focusonplayer=0; %shared by all annots
+ }%
+ \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}%
+ {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}%
+ \@MXV@events{\@MXV@currplayer}%
+ {\if@MXV@mouse true\else false\fi}{true}%
+ try{%
+ if(player\@MXV@currplayer.isOpen){%
+ player\@MXV@currplayer.close(%
+ app.media.closeReason.general);
+ player\@MXV@currplayer=null;
+ }%
+ }%
+ catch(e){}%
+ %
+ try{%
+ var player\@MXV@currplayer=app.media.openPlayer({%
+ settings: settings,%
+ events: events%
+ });
+ }%
+ catch (e){}%
+ )%
}%
- catch(e){}%
- %
- %
- try{%
- var player\@MXV@getlabelvalue{@MXV@#2.playerid}=%
- app.media.openPlayer({%
- settings: settings,%
- events: events%
- });
+ \fi%
+ \if@MXV@linkresume% resume/pause
+ \edef\@MXV@operation{%
+ /OP 3%
+ /JS (%
+ try{%
+ player\@MXV@currplayer.visible=true;
+ if(!player\@MXV@currplayer.isPlaying){%
+ player\@MXV@currplayer.settings.privateData.paused=false;
+ player\@MXV@currplayer.play();
+ if(!player\@MXV@currplayer.isPlaying){%
+ %media at end will restart from beginning
+ if(
+ player\@MXV@currplayer.settings.startAt.time
+ || player\@MXV@currplayer.settings.startAt.frame
+ || player\@MXV@currplayer.settings.startAt.marker
+ || player\@MXV@currplayer.id ==
+ 'vnd.adobe.swname:AAPL_QuickTime'
+ ){
+ player\@MXV@currplayer.seek(
+ player\@MXV@currplayer.settings.startAt);
+ }else{
+ player\@MXV@currplayer.stop();
+ }
+ player\@MXV@currplayer.play();
+ }%
+ }%
+ else{%
+ player\@MXV@currplayer.pause();
+ player\@MXV@currplayer.settings.privateData.paused=true;
+ }%
+ }%
+ catch(e){}%
+ )%
}%
- catch (e){}%
- )%
- }%
- \fi%
- \if@MXV@linkresume% resume/pause
- \edef\@MXV@operation{%
- /OP 3%
- /JS (%
- try{%
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.visible=true;
- if(!player\@MXV@getlabelvalue{@MXV@#2.playerid}.isPlaying){%
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.play();
- if(!player\@MXV@getlabelvalue{@MXV@#2.playerid}.isPlaying){%
- %media at end will restart from beginning
+ \fi%
+ \if@MXV@linkstop%
+ \edef\@MXV@operation{%
+ /OP 1%
+ /JS (%
+ try{%
+ if(!player\@MXV@currplayer.isPlaying){%
+ player\@MXV@currplayer.settings.privateData.paused=false;
+ player\@MXV@currplayer.play();
+ }%
+ player\@MXV@currplayer.stop();
if(
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.settings.startAt.time
- || player\@MXV@getlabelvalue{@MXV@#2.playerid}.settings.startAt.frame
- || player\@MXV@getlabelvalue{@MXV@#2.playerid}.settings.startAt.marker
- || player\@MXV@getlabelvalue{@MXV@#2.playerid}.id ==
+ player\@MXV@currplayer.settings.startAt.time
+ || player\@MXV@currplayer.settings.startAt.frame
+ || player\@MXV@currplayer.settings.startAt.marker
+ || player\@MXV@currplayer.id ==
'vnd.adobe.swname:AAPL_QuickTime'
){
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.seek(
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.settings.startAt);
- }else{
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.stop();
+ player\@MXV@currplayer.seek(%
+ player\@MXV@currplayer.settings.startAt);
}
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.play();
}%
- }%
- else{%
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.pause();
- }%
- }%
- catch(e){}%
- )%
- }%
- \fi%
- \if@MXV@linkstop%
- \edef\@MXV@operation{%
- /OP 1%
- /JS (%
- try{%
- if(!player\@MXV@getlabelvalue{@MXV@#2.playerid}.isPlaying){%
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.play();
- }%
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.stop();
- if(
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.settings.startAt.time
- || player\@MXV@getlabelvalue{@MXV@#2.playerid}.settings.startAt.frame
- || player\@MXV@getlabelvalue{@MXV@#2.playerid}.settings.startAt.marker
- || player\@MXV@getlabelvalue{@MXV@#2.playerid}.id ==
- 'vnd.adobe.swname:AAPL_QuickTime'
- ){
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.seek(%
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.settings.startAt);
- }
+ catch(e){}%
+ )%
}%
- catch(e){}%
- )%
- }%
- \fi%
- \if@MXV@linkpause% pause/resume
- \edef\@MXV@operation{%
- /OP 2%
- /JS (%
- try{%
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.visible=true;
- if(!player\@MXV@getlabelvalue{@MXV@#2.playerid}.isPlaying){%
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.play();
- if(!player\@MXV@getlabelvalue{@MXV@#2.playerid}.isPlaying){%
- %media at end will restart from beginning
- if(
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.settings.startAt.time
- || player\@MXV@getlabelvalue{@MXV@#2.playerid}.settings.startAt.frame
- || player\@MXV@getlabelvalue{@MXV@#2.playerid}.settings.startAt.marker
- || player\@MXV@getlabelvalue{@MXV@#2.playerid}.id ==
- 'vnd.adobe.swname:AAPL_QuickTime'
- ){
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.seek(
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.settings.startAt);
- }else{
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.stop();
- }
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.play();
+ \fi%
+ \if@MXV@linkpause% pause/resume
+ \edef\@MXV@operation{%
+ /OP 2%
+ /JS (%
+ try{%
+ player\@MXV@currplayer.visible=true;
+ if(!player\@MXV@currplayer.isPlaying){%
+ player\@MXV@currplayer.settings.privateData.paused=false;
+ player\@MXV@currplayer.play();
+ if(!player\@MXV@currplayer.isPlaying){%
+ %media at end will restart from beginning
+ if(
+ player\@MXV@currplayer.settings.startAt.time
+ || player\@MXV@currplayer.settings.startAt.frame
+ || player\@MXV@currplayer.settings.startAt.marker
+ || player\@MXV@currplayer.id ==
+ 'vnd.adobe.swname:AAPL_QuickTime'
+ ){
+ player\@MXV@currplayer.seek(
+ player\@MXV@currplayer.settings.startAt);
+ }else{
+ player\@MXV@currplayer.stop();
+ }
+ player\@MXV@currplayer.play();
+ }%
+ }%
+ else{%
+ player\@MXV@currplayer.pause();
+ player\@MXV@currplayer.settings.privateData.paused=true;
+ }%
}%
- }%
- else{%
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.pause();
- }%
+ catch(e){}%
+ )%
}%
- catch(e){}%
- )%
- }%
- \fi%
- \if@MXV@linkclose%
- \edef\@MXV@operation{%
- /OP 1%
- /JS (%
- try{%
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.close(%
- app.media.closeReason.general);
- player\@MXV@getlabelvalue{@MXV@#2.playerid}=null;
+ \fi%
+ \if@MXV@linkclose%
+ \edef\@MXV@operation{%
+ /OP 1%
+ /JS (%
+ try{%
+ player\@MXV@currplayer.close(%
+ app.media.closeReason.general);
+ player\@MXV@currplayer=null;
+ }%
+ catch(e){}%
+ )%
}%
- catch(e){}%
- )%
- }%
- \fi%
- \if@MXV@linkreset% reset to orig. settings
- %retrieve original settings
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@#2.mouse}}{true}}{%
- \setboolean{@MXV@mouse}{true}%
- }{%
- \setboolean{@MXV@mouse}{false}%
- }%
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@#2.autoplay}}{true}}{%
- \setboolean{@MXV@autoplay}{true}%
- }{%
- \setboolean{@MXV@autoplay}{false}%
- }%
- %
- \edef\@MXV@operation{%
- /OP 0%
- /JS (%
- if(focusonplayer==undefined){%
- var focusonplayer=0; %shared by all annots
+ \fi%
+ \if@MXV@linkreset% reset to orig. settings
+ %retrieve original settings
+ \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.mouse}}{true}}{%
+ \setboolean{@MXV@mouse}{true}%
+ }{%
+ \setboolean{@MXV@mouse}{false}%
}%
- \@MXV@settings{\@MXV@getlabelvalue{@MXV@#2.showUI}}%
- {\@MXV@getlabelvalue{@MXV@#2.palindrome}}%
- {\@MXV@getlabelvalue{@MXV@#2.repeat}}%
- {\@MXV@getlabelvalue{@MXV@#2.rate}}%
- {\@MXV@getlabelvalue{@MXV@#2.startAt}}%
- {\@MXV@getlabelvalue{@MXV@#2.endAt}}%
- {\@MXV@getlabelvalue{@MXV@#2.volume}}%
- \@MXV@events{\@MXV@getlabelvalue{@MXV@#2.playerid}}%
- {\if@MXV@mouse true\else false\fi}%
- {\if@MXV@autoplay true\else false\fi}%
- try{%
- if(player\@MXV@getlabelvalue{@MXV@#2.playerid}.isOpen){%
- player\@MXV@getlabelvalue{@MXV@#2.playerid}.close(%
- app.media.closeReason.general);
- player\@MXV@getlabelvalue{@MXV@#2.playerid}=null;
- }%
+ \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.autoplay}}{true}}{%
+ \setboolean{@MXV@autoplay}{true}%
+ }{%
+ \setboolean{@MXV@autoplay}{false}%
}%
- catch(e){}%
%
- try{%
- var player\@MXV@getlabelvalue{@MXV@#2.playerid}=%
- app.media.openPlayer({%
- settings: settings,%
- events: events%
- });
+ \edef\@MXV@operation{%
+ /OP 0%
+ /JS (%
+ if(focusonplayer==undefined){%
+ var focusonplayer=0; %shared by all annots
+ }%
+ \@MXV@settings{\@MXV@getlabelvalue{@MXV@\@MXV@label.showUI}}%
+ {\@MXV@getlabelvalue{@MXV@\@MXV@label.palindrome}}%
+ {\@MXV@getlabelvalue{@MXV@\@MXV@label.repeat}}%
+ {\@MXV@getlabelvalue{@MXV@\@MXV@label.rate}}%
+ {\@MXV@getlabelvalue{@MXV@\@MXV@label.startAt}}%
+ {\@MXV@getlabelvalue{@MXV@\@MXV@label.endAt}}%
+ {\@MXV@getlabelvalue{@MXV@\@MXV@label.volume}}%
+ \@MXV@events{\@MXV@currplayer}%
+ {\if@MXV@mouse true\else false\fi}%
+ {\if@MXV@autoplay true\else false\fi}%
+ try{%
+ if(player\@MXV@currplayer.isOpen){%
+ player\@MXV@currplayer.close(%
+ app.media.closeReason.general);
+ player\@MXV@currplayer=null;
+ }%
+ }%
+ catch(e){}%
+ %
+ try{%
+ var player\@MXV@currplayer=app.media.openPlayer({%
+ settings: settings,%
+ events: events%
+ });
+ }%
+ catch (e){}%
+ )%
}%
- catch (e){}%
- )%
+ \fi%
}%
\fi%
- }%
- \fi%
- %
- \ifpdf%
- \ifthenelse{\isundefined{\@pdfborder}}{%
- \def\@MXV@linkattr{}%
- }{%
- \edef\@MXV@linkattr{%
- /Border [\@pdfborder]%
- /C [\@linkbordercolor]%
- /H \@pdfhighlight%
- }%
- }%
- %
- \pdfstartlink%
- attr{\@MXV@linkattr}%
- user{%
- /Subtype /Link%
- /A <<%
- /S/GoTo%
- /D (@MXV@#2)%
- \if@MXV@externalviewer\else%
- \if@MXV@iiid%
- \ifx\@MXV@iiidview\@empty\else%
- /Next <<%
- /S/GoTo3DView%
- /TA \@MXV@getlabelvalue{@MXV@#2.annot}\space 0 R%
- /V \@MXV@iiidview%
- \fi%
- \@MXV@jscriptiiidaction%
- \ifx\@MXV@iiidview\@empty\else%
- >>%
- \fi%
+ %
+ \ifpdf%
+ \ifthenelse{\isundefined{\@pdfborder}}{%
+ \def\@MXV@linkattr{}%
+ }{%
+ \edef\@MXV@linkattr{%
+ \ifx\beamer@version\@undefined%
+ /Border [\@pdfborder]%
\else%
- /Next <<%
- /S/Rendition%
- /R \@MXV@getlabelvalue{@MXV@#2.rendition}\space 0 R%
- /AN \@MXV@getlabelvalue{@MXV@#2.annot}\space 0 R%
- \@MXV@operation%
- >>%
+ /Border [1 1 1]%
\fi%
- \fi%
- >>%
- }%
- \usebox{\@MXV@textbox}% write out text box
- \pdfendlink%
- \else%
- \pdfmark[{\usebox{\@MXV@textbox}}]{%
- pdfmark=/ANN,%
- Subtype=/Link,%
- Color=\@linkbordercolor,%
- AcroHighlight=\@pdfhighlight,%
- Raw={%
- /_objdef {linkannot\the\@MXV@links}%
- }%
- }%
- %
- %entire action entry moved outside
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {linkannot\the\@MXV@links} <<%
- /A <<%
- /S/GoTo%
- /D/@MXV@#2%
- \if@MXV@externalviewer\else%
- \if@MXV@iiid%
- \ifx\@MXV@iiidview\@empty\else%
+ /C [\@linkbordercolor]%
+ /H \@pdfhighlight%
+ }%
+ }%
+ %
+ \pdfstartlink%
+ attr{\@MXV@linkattr}%
+ user{%
+ /Subtype /Link%
+ /A <<%
+ /S/GoTo%
+ /D (@MXV@\@MXV@label)%
+ \if@MXV@externalviewer\else%
+ \if@MXV@iiid%
+ \ifx\@MXV@iiidview\@empty\else%
+ /Next <<%
+ /S/GoTo3DView%
+ /TA \@MXV@getlabelvalue{@MXV@\@MXV@@label.annot}\space 0 R%
+ /V \@MXV@iiidview%
+ \fi%
+ \@MXV@jscriptiiidaction%
+ \ifx\@MXV@iiidview\@empty\else%
+ >>%
+ \fi%
+ \else%
/Next <<%
- /S/GoTo3DView%
- /TA {3Dannot\@MXV@getlabelvalue{@MXV@#2.playerid}}%
- /V \@MXV@iiidview%
- \fi%
- \@MXV@jscriptiiidaction%
- \ifx\@MXV@iiidview\@empty\else%
+ /S/Rendition%
+ /R \@MXV@getlabelvalue{@MXV@\@MXV@@label.rendition}\space 0 R%
+ /AN \@MXV@getlabelvalue{@MXV@\@MXV@@label.annot}\space 0 R%
+ \@MXV@operation%
>>%
\fi%
- \else%
- /Next <<%
- /S /Rendition%
- /R {mediarendition\@MXV@getlabelvalue{@MXV@#2.playerid}}%
- /AN {screenannot\@MXV@getlabelvalue{@MXV@#2.playerid}}%
- \@MXV@operation%
- >>%
\fi%
- \fi%
- >>%
- >>%
- }%
+ >>%
+ }%
+ \usebox{\@MXV@textbox}% write out text box
+ \pdfendlink%
+ \else%
+ \pdfmark[{\usebox{\@MXV@textbox}}]{%
+ pdfmark=/ANN,%
+ Subtype=/Link,%
+ Color=\@linkbordercolor,%
+ AcroHighlight=\@pdfhighlight,%
+ Raw={%
+ /_objdef {linkannot\the\@MXV@links}%
+ }%
+ }%
+ %
+ %entire action entry moved outside
+ \pdfmark{%
+ pdfmark=/PUT,%
+ Raw={%
+ {linkannot\the\@MXV@links} <<%
+ /A <<%
+ /S/GoTo%
+ /D (@MXV@\@MXV@label)%
+ \if@MXV@externalviewer\else%
+ \if@MXV@iiid%
+ \ifx\@MXV@iiidview\@empty\else%
+ /Next <<%
+ /S/GoTo3DView%
+ /TA {3Dannot\@MXV@getlabelvalue{@MXV@\@MXV@@label.annot}}%
+ /V \@MXV@iiidview%
+ \fi%
+ \@MXV@jscriptiiidaction%
+ \ifx\@MXV@iiidview\@empty\else%
+ >>%
+ \fi%
+ \else%
+ /Next <<%
+ /S /Rendition%
+ /R {mediarendition\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}}%
+ /AN {screenannot\@MXV@getlabelvalue{@MXV@\@MXV@@label.annot}}%
+ \@MXV@operation%
+ >>%
+ \fi%
+ \fi%
+ >>%
+ >>%
+ }%
+ }%
+ \fi%
}%
- \fi%
}%
}
@@ -2736,7 +2941,7 @@
}
%compatibility macros
-\newcommand\movie[3][]{%
+\providecommand\movie[3][]{%
\leavevmode%
\@MXV@reset%
\def\@MXV@autostart{}\def\@MXV@loop{}\def\@MXV@showcontrols{}%