scrn-pag.mklx /size: 9944 b    last modification: 2023-12-21 09:44
1%D \module
2%D   [       file=scrn-pag,
3%D        version=1998.01.15,
4%D          title=\CONTEXT\ Screen Macros,
5%D       subtitle=Pages, % moved code
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14% pagecomments will be done differently
15
16\writestatus{loading}{ConTeXt Screen Macros / Pages}
17
18\registerctxluafile{scrn-pag}{autosuffix}
19
20\unprotect
21
22\installcorenamespace{interactionscreen}
23
24\installparameterhandler \??interactionscreen {interactionscreen}
25\installsetuphandler     \??interactionscreen {interactionscreen}
26
27\newdimension\canvaswidth
28\newdimension\canvasheight
29\newdimension\canvasbackoffset
30\newdimension\canvastopoffset
31\newdimension\canvasmaxwidth
32\newdimension\canvasmaxheight
33\newdimension\canvascropoffset
34\newdimension\canvastrimoffset
35\newdimension\canvasbleedoffset
36\newdimension\canvasartoffset
37
38\mutable\lettonothing\currentinteractionscreendelay
39\mutable\lettonothing\currentinteractionscreenheight
40\mutable\lettonothing\currentinteractionscreenwidth
41
42\newconditional\c_scrn_canvas_tight_page
43
44\def\scrn_canvas_calculate
45  {\begingroup
46   \edef\currentinteractionscreenwidth {\interactionscreenparameter\c!width }%
47   \edef\currentinteractionscreenheight{\interactionscreenparameter\c!height}%
48   \canvasbackoffset\backspace
49   \canvastopoffset\topspace
50   \donetrue
51   \ifx\currentinteractionscreenwidth\v!max
52     \global\canvaswidth\printpaperwidth
53   \orelse\ifx\currentinteractionscreenwidth\v!fit
54     \donefalse
55     \global\canvaswidth\dimexpr
56       \leftcombitotal
57     + \makeupwidth
58     + \rightcombitotal
59     + 2\dimexpr
60          \interactionscreenparameter\c!backspace
61        + \interactionscreenparameter\c!horoffset
62        \relax
63     \relax
64   \orelse\ifx\currentinteractionscreenwidth\v!tight
65     \donefalse
66     \ifdim\backspace>\canvaswidth
67       \ifdim\backspace>\zeropoint\relax
68         \global\advanceby\canvasbackoffset -\canvaswidth
69       \fi
70     \fi
71     \global\advanceby\canvaswidth\dimexpr
72       \makeupwidth
73     + \rightcombitotal
74     + 2\dimexpr
75          \interactionscreenparameter\c!backspace
76        + \interactionscreenparameter\c!horoffset
77        \relax
78     \relax
79   \else
80     \donefalse
81     \global\canvaswidth\currentinteractionscreenwidth
82   \fi
83   \ifx\currentinteractionscreenheight\v!max
84     \global\canvasheight\printpaperheight
85   \orelse\ifx\currentinteractionscreenheight\v!fit
86     \donefalse
87     \global\canvasheight\dimexpr
88       \topheight
89     + \topdistance
90     + \makeupheight
91     + \bottomdistance
92     + \bottomheight
93     + 2\dimexpr
94          \interactionscreenparameter\c!topspace
95        + \interactionscreenparameter\c!veroffset
96        \relax
97     \relax
98   \orelse\ifx\currentinteractionscreenheight\v!tight
99     \donefalse
100     \global\canvasheight\dimexpr\topheight+\topdistance\relax
101     \ifdim\topspace>\canvasheight
102       \ifdim\topspace>\zeropoint\relax
103         \global\advanceby\canvastopoffset -\canvasheight
104       \fi
105     \fi
106     \global\advanceby\canvasheight\dimexpr
107       \makeupheight
108     + \bottomdistance
109     + \bottomheight
110     + 2\dimexpr
111          \interactionscreenparameter\c!topspace
112        + \interactionscreenparameter\c!veroffset
113        \relax
114     \relax
115   \else
116     \donefalse
117     \global\canvasheight\currentinteractionscreenheight
118   \fi
119   \ifconditional\c_page_layouts_location_is_set
120     \global\c_scrn_canvas_tight_page\conditionalfalse
121   \fi
122   \ifconditional\c_scrn_canvas_tight_page
123     \global\canvasmaxwidth \paperwidth
124     \global\canvasmaxheight\paperheight
125   \else
126     \global\canvasmaxwidth \printpaperwidth
127     \global\canvasmaxheight\printpaperheight
128   \fi
129   % new:
130   \ifdone
131     \global\canvascropoffset \layoutcropoffset
132     \global\canvastrimoffset \layouttrimoffset
133     \global\canvasbleedoffset\layoutbleedoffset
134     \global\canvasartoffset  \layoutartoffset
135   \else
136     \global\canvascropoffset \zeropoint
137     \global\canvastrimoffset \zeropoint
138     \global\canvasbleedoffset\zeropoint
139     \global\canvasartoffset  \zeropoint
140   \fi
141   \endgroup}
142
143\newdimension\layoutcropoffset
144\newdimension\layouttrimoffset
145\newdimension\layoutbleedoffset
146\newdimension\layoutartoffset
147
148\appendtoks
149   \edef\p_cropoffset{\layoutparameter\c!cropoffset}%
150   \ifx\p_cropoffset\v!auto
151     \ifconditional\c_page_layouts_location_is_middle
152       \scratchheight\dimexpr(\printpaperheight-\paperheight)/2\relax
153       \scratchwidth \dimexpr(\printpaperwidth -\paperwidth )/2\relax
154       \layoutcropoffset\ifdim\scratchheight>\scratchwidth\scratchheight\else\scratchwidth\fi
155       \layouttrimoffset \layoutparameter\c!trimoffset
156       \layoutbleedoffset\layoutparameter\c!bleedoffset
157       \layoutartoffset  \layoutparameter\c!artoffset
158     \else
159       \writestatus\m!system{auto crop etc only supported when location=middle}%
160       \layoutcropoffset \zeropoint
161       \layouttrimoffset \zeropoint
162       \layoutbleedoffset\zeropoint
163       \layoutartoffset  \zeropoint
164     \fi
165   \else
166     \layoutcropoffset \layoutparameter\c!cropoffset
167     \layouttrimoffset \layoutparameter\c!trimoffset
168     \layoutbleedoffset\layoutparameter\c!bleedoffset
169     \layoutartoffset  \layoutparameter\c!artoffset
170   \fi
171   \relax
172\to \everysetuplayout
173
174\setuplayout
175  [\c!cropoffset=\zeropoint,
176   \c!trimoffset=\zeropoint,
177   \c!bleedoffset=\zeropoint,
178   \c!artoffset=\zeropoint]
179
180% test the next when something is changed here:
181%
182% \setuppapersize[A5][A3]  \showframe
183%
184% % \setuplayout[location=middle] \setupinteractionscreen[option=fit]
185% % \setuplayout[location=middle] \setupinteractionscreen[option=auto]
186% %                               \setupinteractionscreen[option=fit]
187% %                               \setupinteractionscreen[option=auto]
188%
189% \starttext \input ward \stoptext
190
191\let\scrn_canvas_synchronize_simple \relax
192\let\scrn_canvas_synchronize_complex\relax
193
194\appendtoks
195    \glet\scrn_canvas_synchronize_simple \scrn_canvas_synchronize_simple_indeed
196    \glet\scrn_canvas_synchronize_complex\scrn_canvas_synchronize_complex_indeed
197\to \everysetuplayout
198
199\appendtoks
200    \glet\scrn_canvas_synchronize_simple \scrn_canvas_synchronize_simple_indeed
201    \glet\scrn_canvas_synchronize_complex\scrn_canvas_synchronize_complex_indeed
202\to \everysetuplayouttarget
203
204\def\scrn_canvas_synchronize_common {
205    mode        {\interactionscreenparameter\c!option}%
206    singlesided \ifsinglesided true\else false\fi\space
207    doublesided \ifdoublesided true\else false\fi\space
208    copies      \numexpr\interactionscreenparameter\c!copies\relax
209    print       {\interactionscreenparameter\c!print}%
210}
211
212\appendtoks
213    \lettonothing\scrn_canvas_synchronize_common
214\to \everyaftershipout
215
216\def\scrn_canvas_synchronize_only
217  {\clf_setupcanvas
218     paperwidth  \printpaperwidth
219     paperheight \printpaperheight
220     \scrn_canvas_synchronize_common
221   \relax}
222
223\def\scrn_canvas_synchronize_set#width#height%
224  {\clf_setupcanvas
225     paperwidth  \dimexpr#width\relax
226     paperheight \dimexpr#height\relax
227   \relax}
228
229\let\scrn_canvas_synchronize_reset\scrn_canvas_synchronize_only
230
231\def\scrn_canvas_synchronize_simple_indeed
232  {\scrn_canvas_synchronize_only
233  %\glet\scrn_canvas_synchronize_simple \relax
234   \glet\scrn_canvas_synchronize_complex\relax}
235
236\def\scrn_canvas_synchronize_complex_indeed
237  {\scrn_canvas_calculate % otherwise we need to hook it into setuppage etc
238   \clf_setupcanvas
239        leftoffset  \canvasbackoffset
240        topoffset   \canvastopoffset
241        width       \canvaswidth
242        height      \canvasheight
243        paperwidth  \canvasmaxwidth
244        paperheight \canvasmaxheight
245        cropoffset  \canvascropoffset
246        trimoffset  \canvastrimoffset
247        bleedoffset \canvasbleedoffset
248        artoffset   \canvasartoffset
249        \scrn_canvas_synchronize_common
250   \relax
251  %\glet\scrn_canvas_synchronize_simple \relax
252   % one shot only
253   \glet\scrn_canvas_synchronize_complex\relax}
254
255\appendtoks
256    \begingroup
257    \edef\p_option{\interactionscreenparameter\c!option}%
258    \ifx\p_option\v!max
259      \global\c_scrn_canvas_tight_page\conditionaltrue
260    \orelse\ifx\p_option\v!fit
261      \global\c_scrn_canvas_tight_page\conditionaltrue
262    \else
263      \global\c_scrn_canvas_tight_page\conditionalfalse
264    \fi
265    \endgroup
266\to \everysetupinteractionscreen
267
268\setupinteractionscreen
269  [\c!width=\printpaperwidth,
270   \c!height=\printpaperheight,
271   \c!horoffset=\zeropoint,
272   \c!veroffset=\zeropoint,
273   \c!backspace=\backspace,
274   \c!topspace=\topspace,
275   \c!copies=\plusone, % not the best place but backend anyway
276   \c!option=\v!auto]
277
278\appendtoks
279    \glet\scrn_canvas_synchronize_simple \scrn_canvas_synchronize_simple_indeed
280    \glet\scrn_canvas_synchronize_complex\scrn_canvas_synchronize_complex_indeed
281\to \everysetupinteractionscreen
282
283%D Conditional page breaks:
284
285\permanent\tolerant\protected\def\screen[#list]%
286  {\iflocation
287     \page[#list]%
288   \fi}
289
290%D Page transitions:
291
292\lettonothing\scrn_transitions_list
293
294\permanent\tolerant\protected\def\setuppagetransitions[#list]%
295  {\edef\scrn_transitions_list{#list}%
296   \ifx\scrn_transitions_list\v!reset
297     \lettonothing\scrn_transitions_list
298   \fi}
299
300\def\scrn_transitions_set
301  {\iflocation \ifempty\scrn_transitions_list \else
302     \scrn_transitions_set_indeed
303   \fi \fi}
304
305\def\scrn_transitions_set_indeed
306  {\begingroup
307   \edef\currentinteractionscreendelay{\interactionscreenparameter\c!delay}%
308   \clf_setpagetransition
309      n     {\scrn_transitions_list}%
310      delay \ifx\currentinteractionscreendelay\v!none \zerocount\else\currentinteractionscreendelay\fi
311   \relax
312   \endgroup}
313
314\prependtoks
315    \scrn_transitions_set
316\to \everyshipout
317
318\setupinteractionscreen
319  [\c!delay=\v!none]
320
321\setuppagetransitions
322  [\v!reset]
323
324\protect \endinput
325