%D \module %D [ file=s-present-organic, % s-pre-19, %D version=2000.07.31, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment Organic, %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-organic] %D This style is made in the process or writing the \METAFUN\ manual. It exploits a %D few tricks, like graphics calculated using positional information. It also uses %D the (at that moment) new menu list placement alternative. If you forget about the %D definition of the button shapes, which is complicated in any system, this style %D is not even that hard to follow. Watch how the left side of the buttons follow %D the right side of the text graphic. %D %D While playing bit with this style, the random alternative made me think of those %D organic building with non equal windows (we have a few in The Netherlands), so I %D decided to label this style as \type {pre-organic}. %D %D At the end of this file, there is a small test file, so when you process this %D file with \TEXEXEC\ and the options \type {--mode=demo} and \type {--pdf}, you %D will get a demo document. %D %D We use one of the standard screen \quote {paper} sizes, and map it onto the same %D size, so that we get a nicely cropped page. \setuppapersize [S6][S6] %D Like in the \METAFUN\ manual, we use the Palatino as main bodyfont. This font is %D quite readable on even low resolution screens, although I admit that this style %D is developed using an $1400\times1050$ pixel LCD screen, so I may be biased. \setupbodyfont[pagella] %D The layout specification sets up a text area and a right edge area where the %D menus will go. Watch the rather large edge distance. By setting the header and %D footer dimensions to zero, we automatically get rid of page body ornaments, like %D the pagenumber. \setuplayout [topspace=48pt, backspace=48pt, cutspace=12pt, width=400pt, margin=0cm, rightedge=88pt, rightedgedistance=48pt, header=0cm, footer=0cm, height=middle] %D We use a moderate, about a line height, interparagraph white space. \setupwhitespace [big] %D Of course we use colors, since on computer displays they come for free. \definecolor [red] [r=.75] \definecolor [yellow] [r=.75,g=.75] \definecolor [gray] [s=.50] \definecolor [white] [s=.85] \definecolor [PageColor] [yellow] \definecolor [TextColor] [white] \definecolor [OrnamentColor] [red] \definecolor [InteractionColor] [red] \definecolor [ContrastColor] [gray] %D This is an interactive document, so we enable interaction. In this style, we %D disable the viewer's \quote {highlight a hyperlink when it's clicked on} feature. %D We will use a menu, so we enable menus. Later we will see the contract color %D |<|hyperlinks gets that color when we are already on the location|>| in action. \setupinteraction [state=start, click=off, color=InteractionColor, contrastcolor=ContrastColor, menu=on] %D The menu itself is set up as follows. Because we will calculate menubuttons based %D on their position on the page, we have to keep track of the positions. Therefore, %D we set the \type {position} variable to \type {yes}. \setupinteractionmenu [right] [frame=off, position=yes, align=middle, topoffset=.75cm, % watch out, these are negative in mkii bottomoffset=.75cm, % watch out, these are negative in mkii color=gray, contrastcolor=gray, style=bold, before=, after=] %D The menu content is rather sober: a list of topics (later we will define the %D command that generates topic entries), and a close button. \startinteractionmenu[right] \placelist[Topic][alternative=right] \vfill \but [CloseDocument] close \\ \stopinteractionmenu %D We have now arived at the more interesting part of the style definition: the %D graphic that goes in the page background. Because this graphic will change, we %D define a usable \METAPOST\ graphic. Page backgrounds are recalculated each page, %D opposite to the other backgrounds that are calculated when a new background is %D defined, or when repetitive calculation is turned on. \setupbackgrounds [page] [background=page] \defineoverlay [page] [\useMPgraphic{page}] \setupMPvariables [page] [alternative=3] \startuseMPgraphic{page} \includeMPgraphic{rightsuperbutton} StartPage ; path p, q ; pickup pencircle scaled 3pt ; p := Field[Text][Text] enlarged 36pt superellipsed .90 ; fill Page withcolor \MPcolor{PageColor} ; fill p withcolor \MPcolor{TextColor} ; draw p withcolor \MPcolor{OrnamentColor} ; p := Field[Text][Text] enlarged 48pt superellipsed .90 ; def right_menu_button (expr nn, rr, pp, xx, yy, ww, hh, dd) = if (pp>0) and (rr>0) : q := rightsuperbutton(p,xx,yy,RightEdgeWidth,hh) ; fill q withcolor \MPcolor{TextColor} ; draw q withcolor if rr=2 : \MPcolor{ContrastColor} else : \MPcolor{InteractionColor} fi ; fi ; enddef ; \MPmenubuttons{right} StopPage ; \stopuseMPgraphic \startuseMPgraphic{page} \includeMPgraphic{rightsuperbutton} StartPage ; numeric alternative, seed, superness, squeezeness, randomness ; path p, q ; transform t ; alternative := \MPvar{alternative} ; seed := uniformdeviate 100 ; if alternative > 10 : superness := .85 + ((\realfolio-1)/max(\lastpage,1)) * .15 ; squeezeness := 12pt - ((\realfolio-1)/max(\lastpage,1)) * 10pt ; else : superness := .90 ; squeezeness := 12pt ; fi ; randomness := squeezeness ; alternative := alternative mod 10 ; t := identity if alternative=3: shifted (9pt,-9pt) fi ; % first we draw the shape that surrounds the text randomseed := seed ; p := Field[Text][Text] enlarged if alternative = 1 : 36pt superellipsed superness elseif alternative = 2 : 36pt squeezed squeezeness elseif alternative = 3 : 36pt randomized randomness else : 36pt fi ; pickup pencircle scaled 3pt ; fill Page withcolor \MPcolor{PageColor} ; fill p withcolor \MPcolor{TextColor} ; draw p withcolor \MPcolor{OrnamentColor} ; % we set p to the wider shape from which we will chip off pieces randomseed := seed ; p := ( Field[Text][Text] enlarged if alternative = 1 : 48pt superellipsed superness elseif alternative = 2 : 48pt squeezed squeezeness elseif alternative = 3 : 36pt randomized randomness else : 48pt fi ) transformed t ; % calls to *_menu_button are generated automatically ... vardef right_menu_button (expr nn, rr, pp, xx, yy, ww, hh, dd) = save q ; path q ; if (pp>0) and (rr>0) : q := rightsuperbutton(p,xx,yy,RightEdgeWidth,hh) ; % \MPw{menu:right:\realfolio} fill q withcolor \MPcolor{TextColor} ; draw q withcolor if rr=2 : \MPcolor{ContrastColor} else : \MPcolor{InteractionColor} fi ; fi ; enddef ; % ... and inserted when the graphic data is flushed here ... \MPmenubuttons{right} StopPage ; \stopuseMPgraphic \startuseMPgraphic{rightsuperbutton} vardef rightsuperbutton (expr pat, xpos, ypos, wid, hei) = save p, ptop, pbot, t, b, edge, shift, width, height ; path p, ptop, pbot ; pair t, b ; numeric edge, shift, width, height ; edge := xpos + wid ; shift := ypos + hei ; p := rightpath pat ; ptop := ((-infinity,shift)--(edge,shift)) ; pbot := ((-infinity,shift-hei)--(edge,shift-hei)) ; t := p intersection_point ptop ; b := p intersection_point pbot ; p := subpath(0,xpart (p intersectiontimes ptop)) of p ; p := subpath(xpart (p intersectiontimes pbot),length(p)) of p ; (p -- t -- point 1 of ptop & point 1 of ptop -- point 1 of pbot & point 1 of pbot -- b -- cycle) enddef ; \stopuseMPgraphic %D Topics are identified with \type {\Topic}, which is an instance of chapter %D headings. The number is made invisible. Since it still is a numbered section %D header, \CONTEXT\ will write the header to the table of contents. \definehead [Topic] [chapter] \setuphead [Topic] [number=no] %D We will use a bold font in the table of contents. We also force a complete %D list. \setuplist [Topic] [criterium=all, style=bold, before=, after=] %D The \type {\TitlePage} macro looks horrible, because we want to keep the %D interface simple: a list of small sentences, separated by \type {\\}. \unexpanded\def\StartTitlePage {\startstandardmakeup \switchtobodyfont[big] \enforced\protected\def\\{\vfill\bfb\enforced\let\\\par}% \bfd\setupinterlinespace\gray \vskip.5cm\relax} \unexpanded\def\StopTitlePage {\\ % the \\ is really needed \vskip.5cm\relax \stopstandardmakeup} \unexpanded\def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} %D A couple of goodies: \unexpanded\def\Subject {\Topic} \unexpanded\def\Topics #1{} \unexpanded\def\Subjects {} \startsetups document:start \StartTitlePage \documentvariable{title} \doifsomething {\documentvariable{subtitle}} { \\ \documentvariable{subtitle} } \doifsomething {\documentvariable{location}} { \\ \documentvariable{location} } \StopTitlePage \stopsetups \startsetups document:stop % \stopsetups \stopmodule \continueifinputfile{s-present-organic.mkiv} \usemodule[present-common] \inputpresentationfile{examples/present-organic-001.tex}