summaryrefslogtreecommitdiff
path: root/tex/context/modules/mkiv/s-present-windows.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/modules/mkiv/s-present-windows.mkiv')
-rw-r--r--tex/context/modules/mkiv/s-present-windows.mkiv350
1 files changed, 350 insertions, 0 deletions
diff --git a/tex/context/modules/mkiv/s-present-windows.mkiv b/tex/context/modules/mkiv/s-present-windows.mkiv
new file mode 100644
index 000000000..22d6fdba1
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-windows.mkiv
@@ -0,0 +1,350 @@
+%D \module
+%D [ file=s-resent-windows, % was s-pre-09
+%D version=unknown,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Windows,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startmodule[present-windows]
+
+%D I made this style when I had to give a presentation on the \MAPS\ bibliography
+%D production for several user group meetings. This style is rather tuned for
+%D combinations of examples and explanations. The colors match the \MAPS\
+%D bibliography colors.
+
+\doifelsemode {asintended} {
+ \setupbodyfont[ludicaot,14.4pt]
+} {
+ \setupbodyfont[pagella,14.4pt]
+}
+
+%D A couple of years later, in 2001 this style was documented and made public. While
+%D documenting, I also changed box building on top of overlays into the now
+%D available layer positioning. So, this styles demonstrates quite some tricks.
+%D
+%D I'm sure that nowadays it can be done with less code but therei sno real need to
+%D rewrite history.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [topspace=0cm,
+ backspace=0cm,
+ header=0pt,
+ footer=0pt,
+ width=middle,
+ height=middle]
+
+%D Local environments can be set by using the setups commands. For downward
+%D compatibility, we keep supporting the \type {\...Settings} hooks. Using local
+%D environments is seldom needed.
+
+\let\TextSettings \empty
+\let\SampleSettings\empty
+
+\startsetups [text] \TextSettings \stopsetups
+\startsetups [sample] \SampleSettings \stopsetups
+
+%D The dimensions are kind of fixed.
+
+\def\FrameWidth {448pt}
+\def\FrameHeight {348pt}
+\def\FrameOffset {24pt}
+\def\FrameSkip {12pt}
+
+%D But they {\em can} and {\em will} be changed.
+
+\def\FrameWidth {408pt}
+\def\FrameHeight {318pt}
+
+%D The funny values come from the $3:4$ display aspect ratio.
+
+\definecolor[PageColor] [s=.40]
+\definecolor[TextColor] [s=.90]
+\definecolor[InteractionColor][r=.40]
+\definecolor[LineColor] [r=.60,g=.60]
+
+%D Of course we go interactive and since we will probably open other documents, we
+%D make sure that the viewer opens a new window.
+
+\setupinteraction
+ [color=InteractionColor,
+ contrastcolor=LineColor,
+ display=new,
+ state=start]
+
+\setupinteractionscreen
+ [option=max]
+
+%D Before we come to the real macros, we do a little bit of tuning.
+
+\setupitemize
+ [1][packed]
+
+\setuptyping
+ [blank=medium]
+
+%D Apart from the titlepage, the page gets a simple colored background. Later we
+%D will activate the background.
+
+\setupbackgrounds
+ [page]
+ [backgroundcolor=PageColor]
+
+%D Everything gets frames by a nice \METAPOST\ frame.
+
+\defineoverlay [background] [\uniqueMPgraphic{background}]
+
+\startuniqueMPgraphic{background}
+ pickup pencircle scaled (1.5*\FrameSkip) ;
+ draw OverlayBox withcolor "PageColor" ;
+ pickup pencircle scaled \FrameSkip ;
+ fill OverlayBox withcolor "TextColor" ;
+ draw OverlayBox withcolor "LineColor" ;
+\stopuniqueMPgraphic
+
+%D We will present samples and explanation pair||wise, so we need a hyperlink that
+%D skips a page. Contrary to \MKII\ we put the next button in the page background and
+%D the two windows get buttons that toggle between them. This is easier.
+
+\defineoverlay [nextpage] [\overlaybutton{nextpage}]
+\defineoverlay [previouspage] [\overlaybutton{previouspage}]
+\defineoverlay [skippage] [\overlaybutton{realpage(\number\numexpr\realpageno+2\relax)}]
+\defineoverlay [samepage] [\overlaybutton{realpage(\number\numexpr\realpageno \relax)}]
+
+%D Layers are normally used to position multiple content on a specific overlay. Here
+%D we will use them to position only and since the samples and text will swap place,
+%D we will use quite a few layers.
+
+\defineoverlay [text] [\composedlayer{text}]
+\defineoverlay [sample] [\composedlayer{sample}]
+\defineoverlay [common] [\composedlayer{common}]
+
+%D There are three positions. When combined, the sample and text windows overlap,
+%D otherwise the lone window is centered. We could have used one layer and reversed
+%D the order by setting the \type {direction} parameter, but this approach is more
+%D readable.
+
+\definelayer
+ [text]
+ [x=\makeupwidth,
+ y=\makeupheight,
+ location=lt,
+ hoffset=-\FrameSkip,
+ voffset=-\FrameSkip]
+
+\definelayer
+ [sample]
+ [hoffset=\FrameSkip,
+ voffset=\FrameSkip]
+
+\definelayer
+ [common]
+ [x=.5\makeupwidth,
+ y=.5\makeupheight,
+ location=c]
+
+%D The topic is put in the lower right corner of the text window.
+
+\defineoverlay [topic] [\composedlayer{topic}]
+
+\definelayer
+ [topic]
+ [x=\FrameWidth,
+ y=\FrameHeight,
+ location=lt,
+ hoffset=-\FrameOffset,
+ voffset=-\FrameSkip]
+
+%D The topic is put in a framed box. That way we can make sure that it gets a
+%D background, which looks better when it covers something else. Otherwise we could
+%D have stuck to:
+%D
+%D \starttyping
+%D \def\Topic#1%
+%D {\setlayer[topic]{\color[PageColor]{\bfb\setstrut#1}}}
+%D \stoptyping
+%D
+%D But, we go for the nice alternative:
+
+\unexpanded\def\Topic#1%
+ {\doifsomething{#1}
+ {\setlayer [topic]
+ {\bfb\setstrut
+ \inframed
+ [frame=off,
+ foregroundcolor=PageColor,
+ offset=0pt,
+ background=color,
+ backgroundcolor=TextColor]
+ {#1}}}}
+
+%D The sample as well as the explanation will be collected in a buffer. That way we
+%D can reuse the content. We could have used a box instead, but can we be sure that
+%D the content is not adapting itself? So, buffers we use.
+
+\resetbuffer[sample]
+\resetbuffer[text]
+
+%D Both the sample and explanation are kind of windowed.
+
+\defineframedtext
+ [SampleText]
+ [width=\FrameWidth,
+ height=\FrameHeight,
+ offset=\FrameOffset,
+ frame=off,
+ align=normal,
+ strut=no,
+ before=,
+ after=,
+ background=background]
+
+%D We safe some keying in by combining things in one macro.
+
+\unexpanded\def\DoSampleText#1#2#3% kind layer overlays
+ {\setupframedtexts[SampleText][background={background,#3}]
+ \setlayer[#2]
+ {\startSampleText[none]
+ \setups[#1]
+ \getbuffer[#1]
+ \stopSampleText}}
+
+\unexpanded\def\StartSample{\dostartbuffer[sample][StartSample][StopSample]}
+\unexpanded\def\StartText {\dostartbuffer[text] [StartText] [StopText]}
+
+%D The following definitions apply at the outer level.
+
+\unexpanded\def\StopSample
+ {\startstandardmakeup
+ \DoSampleText{sample}{common}{samepage}
+ \stopstandardmakeup
+ \resetbuffer[sample]}
+
+\unexpanded\def\StopText
+ {\startstandardmakeup
+ \DoSampleText{text}{common}{topic,samepage}
+ \stopstandardmakeup
+ \resetbuffer[text]}
+
+\setupbackgrounds[page][background={color,nextpage}]
+\setupbackgrounds[text][background=common]
+
+%D When we combine sample and text, we get slightly different definitions. As you
+%D can see we generate two pages. Watch how we manipulate the order of the overlays
+%D and teh nature of the buttons. Here some abstraction really pays off.
+
+\unexpanded\def\StartIdea
+ {\bgroup
+ \let\StopSample\relax
+ \let\StopText \relax}
+
+\unexpanded\def\StopIdea
+ {\setupbackgrounds[page][background={color,skippage}]
+ \setupbackgrounds[text][background={text,sample}]
+ \startstandardmakeup
+ \DoSampleText{sample}{sample}{nextpage}
+ \DoSampleText{text} {text} {topic,nextpage}
+ \stopstandardmakeup
+ \setupbackgrounds[page][background={color,nextpage}]
+ \setupbackgrounds[text][background={sample,text}]
+ \startstandardmakeup
+ \DoSampleText{sample}{sample}{previouspage}
+ \DoSampleText{text} {text} {topic,previouspage}
+ \stopstandardmakeup
+ \egroup}
+
+%D The rest of the definitions takes care of the title page. Please don't steal this
+%D one for your own documents.
+
+\defineoverlay[joke] [\useMPgraphic{joke}{n=0}] % not to be changed!
+
+\startuseMPgraphic{joke}{n}
+ StartPage ;
+ path p, q ; numeric w ; pair xy ;
+ set_grid(OverlayWidth,OverlayHeight,OverlayWidth/8,OverlayHeight/8) ;
+ if \MPvar{n}=1 :
+ p := fulldiamond ; fill Page withcolor \MPcolor{TextColor} ;
+ else :
+ p := fullsquare ; fill Page withcolor \MPcolor{PageColor} ;
+ fi ;
+ forever :
+ xy := center Page randomized (OverlayWidth,OverlayHeight) ;
+ if new_on_grid(xpart xy, ypart xy) :
+ q := (p xyscaled (OverlayWidth/5,OverlayHeight/5))
+ randomized (\FrameSkip,\FrameSkip)
+ shifted xy ;
+ w := (\FrameSkip) randomized (\FrameSkip/2) ;
+ draw q withcolor \MPcolor{PageColor} withpen pencircle scaled (1.5w) ;
+ fill q withcolor \MPcolor{TextColor} ;
+ draw q withcolor \MPcolor{LineColor} withpen pencircle scaled ( w) ;
+ fi ;
+ exitif grid_full ;
+ endfor ;
+ StopPage ;
+\stopuseMPgraphic
+
+\defineoverlay[fuzzy][\useMPgraphic{fuzzy}]
+
+\startuseMPgraphic{fuzzy}
+ path p ; numeric w ;
+ p := (fullsquare xyscaled (OverlayWidth,OverlayHeight))
+ randomized (\FrameSkip,\FrameSkip) ;
+ w := (\FrameSkip) randomized (\FrameSkip/2) ;
+ draw p withcolor \MPcolor{PageColor} withpen pencircle scaled (1.5w) ;
+ fill p withcolor \MPcolor{TextColor} ;
+ draw p withcolor \MPcolor{LineColor} withpen pencircle scaled ( w) ;
+\stopuseMPgraphic
+
+%D This time we use a fit window, but with a slightly randomized frame, our
+%D trademark so to say.
+
+\unexpanded\def\StartTitlePage
+ {\bgroup
+ \setupbackgrounds[page][background={joke,nextpage}]
+ \startstandardmakeup
+ \switchtobodyfont[big]
+ \setupframedtexts
+ [SampleText]
+ [background=fuzzy,
+ foregroundcolor=PageColor,
+ width=fit,
+ height=fit,
+ align=middle]
+ \startSampleText[middle]
+ \bfd\setupinterlinespace
+ \def\\{\bfb\setupinterlinespace\vfil\def\\{\vfil}}}
+
+\unexpanded\def\StopTitlePage
+ {\stopSampleText
+ \stopstandardmakeup
+ \egroup}
+
+\unexpanded\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+%D Let's nil some error prone presentation macros.
+
+\let\Subject \Topic
+\let\Topics \gobbleoneargument
+\let\Subjects \relax
+
+%D We will avoid \quote {overfull} messages.
+
+\dontcomplain
+
+\stopmodule
+
+\continueifinputfile{s-present-windows.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-windows-001.tex}
+