%D \module
%D   [      file=s-present-dark, % tug-2001
%D        version=2018.09.25, % 2000.*.*
%D          title=\CONTEXT\ Style File,
%D       subtitle=Presentation Environment Dark,
%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-dark]

%D The original document dates from 2000 and was meant for a presentation at \TUG\
%D 2001. It used widgets and in particular check fields and push buttons.
%D \JAVASCRIPT\ was used to show or hide them when rolling over, and appearances
%D changed in a subtle way. It actually worked quite well at that time.
%D
%D However, over time these widgets proved to be sort of unstable. For instance we
%D used the parent|-|child model of which (inheritance and appearance) behaviour
%D changed over time. We're talking of a few decades ago when \TEX\ was one of the
%D few (maybe only) tools that could actually support everything that the manual
%D introduced: the \quote {standard} seemed to be ahead of the viewer. Anyway, we
%D adapted but it meant that old document in principle were not always future proof.
%D
%D We used in this document a push button in the background of the menu so that it
%D could become visible when rolled over. There were no layers in \PDF\ at that
%D time! Nowadays such a trick doesn't work well because of the way a viewer
%D intercepts regions. One gets kind of erratic behaviour when applying \JAVASCRIPT.
%D
%D I spent quite some time to test if we could still do the same without side
%D effects and in the process also noticed that some functionality in \JAVASCRIPT\
%D seems broken (or changed due to maybe security issues). So, in the end I decided
%D to simplify the approach and use layers to pop up the menu when the mouse goes
%D over it but no longer hide it when the mouse leaves that area. It just doesn't
%D work too well otherwise.

%D We start with the layout. We basically have three areas: edge, margin and text.
%D Each are more or less the same width.

\setuppapersize
  [S6][S6]

\setuplayout
  [backspace=380pt,
   topspace=20pt,
   leftedge=100pt,
   leftedgedistance=10pt,
   leftmargin=230pt,
   leftmargindistance=20pt,
   header=0pt,
   footer=0pt,
   width=200pt,
   backspace=360pt,
   width=220pt,
   leftmargin=210pt,
   height=middle]

%D The bodyfont is the Latin Modern Variable (of course at that time we used
%D the Computer Modern predecessors). We still apply protrusion and expansion.
%D The new \quotation {Modern Latin} look also works ok on screen.

\definefontfeature
  [default]
  [default]
  [expansion=pure,
   protrusion=pure]

\setupalign
  [verytolerant,stretch,hanging] % space

\setupbodyfont
  [modernvariable,11pt]

% \setupbodyfont
%   [modernlatin,11pt]

\setupinmargin
  [style=,
   color=]

%D We use some predefined \JAVASCRIPT\ functions. These are rather old helpers.
%D Normally only the libraries (sets of functions) that are used will be
%D embedded.

\useJSscripts[fld]
\useJSscripts[nav]

%D The remarks that will pop up. By default they are not visible. Clicking
%D on the page (or menu item) will show them step by step.

\newcounter\bofremarks
\newcounter\nofremarks

\setupfield
  [remark]
  [offset=overlay,
   option={readonly,hidden},
   color=,
   style=,
   frame=off]

\defineframed
  [remarkable]
  [frame=off,
   backgroundcolor=white,
   background=RollBackground]

\starttexdefinition unexpanded remark #1#2

    \doglobal\increment\nofremarks

    \definesymbol
        [remark:x:\nofremarks]
        [\remarkable{#1}]

    \definesymbol
        [remark:y:\nofremarks]
        [\remarkable{#2}]

    \definefield
        [remark:x:\nofremarks][check][remark]
        [remark:x:\nofremarks]
        [remark:x:\nofremarks]

    \definefield
        [remark:y:\nofremarks][check][remark]
        [remark:y:\nofremarks]
        [remark:y:\nofremarks]

    \inleft
        [scope=local]
        {
            \hpack to \hsize {
                \hss
                \linebox {
                    \fitfield[remark:y:\nofremarks]
                }
            }
        }

    \bgroup

    \setbox\scratchbox\hbox {
        #1
    }

    \hpack to \wd\scratchbox {
        \wd\scratchbox\zeropoint
        \box\scratchbox
        \hss
        \linebox {
            \fitfield[remark:x:\nofremarks]
        }
        \hss
    }

    \egroup

\stoptexdefinition

%D We use lots of backgrounds. The \METAPOST\ graphics are a bit overkill
%D but we keep them.

\setupbackgrounds
  [text]
  [background=StepFields]

\defineoverlay
  [StepFields]
  [\directsetup{syncrefs}\overlaybutton{ShowRemark}]

\setupbackgrounds
  [page]
  [background=PageBackground]

%D Just look in \type {java-imp-fld.mkiv} how \type {HideFields} and
%D alike are defined. They are defined references to \JAVASCRIPT\ calls.

\setupinteraction
  [state=start,
   click=no,
   menu=on,
   style=,
   color=,
   frame=off,
   contrastcolor=]

\setupinteractionscreen
  [option=max]

\setupbackgrounds
  [paper]
  [background=color,
   backgroundcolor=black]

\defineoverlay
  [PageBackground]
  [\useMPgraphic{PageBackground}]

\startuseMPgraphic{PageBackground}
    StartPage ;
        numeric w ; w := 1.25 * PaperWidth ;
        numeric n ; n := 2.50 * PageNumber ;
        numeric d ; d := (1 + (PageNumber-1)/5) * 5pt ;
        fill Page
            withcolor black ;
        for i=1 upto 500 :
            draw
                center Page
                    randomized w
                    rotatedaround(center Page,n)
                withpen pencircle
                    scaled (uniformdeviate d)
                withcolor
                    (yellow randomized (.3,.8))
            ;
        endfor ;
    StopPage ;
\stopuseMPgraphic

\defineoverlay
  [TextBackground]
  [\uniqueMPgraphic{TextBackground}]

\startuniqueMPgraphic{TextBackground}
    fill
        OverlayBox
        withcolor black ;
    draw
        OverlayBox
        withpen pencircle scaled 1pt
        withcolor OverlayColor ;
\stopuniqueMPgraphic

\defineoverlay
  [RollBackground]
  [\uniqueMPgraphic{RollBackground}]

\startuniqueMPgraphic{RollBackground}
    fill
        OverlayBox
        withcolor black ;
    draw
        OverlayBox
        withpen pencircle scaled 1pt
        withcolor OverlayColor ;
\stopuniqueMPgraphic

\setupinteractionmenu
  [left]
  [state=start,
   width=\leftedgewidth,
   frame=on,
   framecolor=white,
   rulethickness=1pt,
   foregroundcolor=white,
   background=RollBackground]

\startsetups syncrefs
    \normalexpanded {
        \definereference
           [ShowRemark]
           [StepFields{remark:x,\bofremarks,\nofremarks},
            StepFields{remark:y,\bofremarks,\nofremarks}]
    }
\stopsetups

%D The menu buttons used to be rollover buttons but are now normal simple
%D ones (more predictable).

\defineviewerlayer
  [buttons]

\startinteractionmenu[left]
    \vfill
    \directsetup{syncrefs}
    \startviewerlayer[buttons]
        \startbut [previouspage,HideFields]  Previous \stopbut
        \startbut [nextpage,HideFields]      Next     \stopbut
        \startbut [ShowRemark]               Remark   \stopbut
        \startbut [HideFields]               Reset    \stopbut
        \startbut [CloseDocument,HideFields] Quit     \stopbut
    \stopviewerlayer
\stopinteractionmenu

\setupinteraction
  [closeaction=ForgetChanges,
   openpageaction={HideFields,HideLayer{buttons}},
   closepageaction={HideFields,HideLayer{buttons}}]

\defineoverlay
  [ShowMenu]
  [\overlayrollbutton{VideLayer{buttons}}{}]

\setupbackgrounds
  [text][leftedge]
  [backgroundoffset=10pt,
   background=ShowMenu]

%D The environment has been adapted a bit. Instead of taking two
%D arguments we now use a key|-|value approach. The remark is shown
%D when one rolls over the title (author).

\defineframedtext
  [MainText]
  [frame=off,
   offset=10pt,
   width=\textwidth,
   before=,
   after=,
   color=,
   foregroundcolor=white,
   background=TextBackground,
   backgroundcolor=white]

\starttexdefinition unexpanded StartIdea
    \dosingleempty{\texdefinition{StartIdeaIndeed}}
\stoptexdefinition

\starttexdefinition StartIdeaIndeed [#1]
    \let\bofremarks\nofremarks
    \increment\bofremarks
    \startstandardmakeup
    \setvariables[Idea][#1]
    \startMainText
    \setupalign[verytolerant,stretch,hanging]
\stoptexdefinition

\starttexdefinition unexpanded StopIdea
    \doifvariable {Idea} {text} {
        \blank
        \rightaligned {
            \doifelsevariable {Idea} {remark} {
                \tooltip
                    [left]
                    {\getvariable{Idea}{title}}
                    {\getvariable{Idea}{remark}}
            } {
                \getvariable{Idea}{title}
            }
        }
    }
    \stopMainText
    \vfill
    \stopstandardmakeup
\stoptexdefinition

\stopmodule

\continueifinputfile{s-present-dark.mkiv}

\usemodule[present-common]

\inputpresentationfile{tug/2001/tug-2001-ideas.tex}
