%D \module
%D   [      file=s-pre-19,
%D        version=2000.07.31,
%D          title=\CONTEXT\ Style File,
%D       subtitle=Presentation Environment 19,
%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.

%D This style is made in the process or writing the \METAFUN\
%D manual. It exploits a few tricks, like graphics calculated
%D using positional information. It also uses the (at that
%D moment) new menu list placement alternative. If you forget
%D about the definition of the button shapes, which is
%D complicated in any system, this style is not even that hard
%D 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
%D made me think of those organic building with non equal
%D windows (we have a few in The Netherlands), so I decided to
%D label this style as \type {pre-organic}.
%D
%D At the end of this file, there is a small test file, so
%D when you process this file with \TEXEXEC\ and the options
%D \type {--mode=demo} and \type {--pdf}, you will get a demo
%D document.

%D We use one of the standard screen \quote {paper} sizes, and
%D map it onto the same size, so that we get a nicely cropped
%D page.

\setuppapersize
  [S6][S6]

%D Like in the \METAFUN\ manual, we use the Palatino as main
%D bodyfont. This font is quite readable on even low
%D resolution screens, although I admit that this style is
%D developed using an $1400\times1050$ pixel LCD screen, so I
%D may be biased.

%\startmode[asintended] \setupbodyfont[ppl] \stopmode

%D The layout specification sets up a text area and a right
%D edge area where the menus will go. Watch the rather large
%D edge distance. By setting the header and footer dimensions
%D to zero, we automatically get rid of page body ornaments,
%D like 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
%D white space.

\setupwhitespace
  [big]

%D Of course we use colors, since on computer displays they
%D come for free.

\setupcolors
  [state=start]

\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.
%D In this style, we disable the viewer's \quote {highlight a
%D hyperlink when it's clicked on} feature. We will use a
%D menu, so we enable menus. Later we will see the contract
%D color |<|hyperlinks gets that color when we are already on
%D 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
%D calculate menubuttons based on their position on the page,
%D we have to keep track of the positions. Therefore, we set
%D the \type {position} variable to \type {yes}.

\setupinteractionmenu
  [right]
  [frame=off,
   position=yes,
   align=middle,
   topoffset=-.75cm,
   bottomoffset=-.75cm,
   color=gray,
   contrastcolor=gray,
   style=bold,
   before=,
   after=]

%D The menu content is rather sober: a list of topics (later
%D we will define the command that generates topic entries),
%D 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
%D definition: the graphic that goes in the page background.
%D Because this graphic will change, we define a usable
%D \METAPOST\ graphic. Page backgrounds are recalculated each
%D page, opposite to the other backgrounds that are calculated
%D when a new background is defined, or when repetitive
%D 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)/\lastpage) * .15 ;
      squeezeness := 12pt - ((\realfolio-1)/\lastpage) * 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
%D instance of chapter headings. The number is made invisible.
%D Since it still is a numbered section header, \CONTEXT\ will
%D 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
%D force a complete list.

\setuplist
  [Topic]
  [criterium=all,
   style=bold,
   before=,
   after=]

%D The \type {\TitlePage} macro looks horrible, because we
%D want to keep the interface simple: a list of small
%D sentences, separated by \type {\\}.

\def\StartTitlePage
  {\startstandardmakeup
     \switchtobodyfont[big]
     \def\\{\vfill\bfb\let\\=\par}
     \bfd\setupinterlinespace\gray
     \vskip.5cm}

\def\StopTitlePage
  {\\\vskip.5cm  % the \\ is really needed
   \stopstandardmakeup}

\def\TitlePage#1%
  {\StartTitlePage#1\StopTitlePage}

%D A couple of goodies:

\def\Subject   {\Topic}
\def\Topics  #1{}
\def\Subjects  {}

%D For those who want to test:

\doifnotmode{demo}{\endinput}

\starttext

\setupMPvariables[page][alternative=3]

\TitlePage
  {A Few Nice Quotes\\
   A Simple Style Demo\\
   Hans Hagen, August 2000}


\Topic {Douglas R. Hofstadter} \input douglas \page
\Topic {Donald  E. Knuth}      \input knuth   \page
\Topic {Edward  R. Tufte}      \input tufte   \page
\Topic {Hermann    Zapf}       \input zapf    \page
%Topic {David   F. Stork}      \input stork   \page

\stoptext