summaryrefslogtreecommitdiff
path: root/tex/context/base/grph-trf.mkiv
diff options
context:
space:
mode:
authorMarius <mariausol@gmail.com>2011-12-15 15:20:16 +0200
committerMarius <mariausol@gmail.com>2011-12-15 15:20:16 +0200
commit87020c1d54ea9608876f219ba4a2be5949e21916 (patch)
treec43d623de6394f14ba339436533a05580d7db24a /tex/context/base/grph-trf.mkiv
parentb68cb421b46c1b7ce16be9172a3ce6ad0472a55f (diff)
downloadcontext-87020c1d54ea9608876f219ba4a2be5949e21916.tar.gz
beta 2011.12.15 13:56
Diffstat (limited to 'tex/context/base/grph-trf.mkiv')
-rw-r--r--tex/context/base/grph-trf.mkiv112
1 files changed, 81 insertions, 31 deletions
diff --git a/tex/context/base/grph-trf.mkiv b/tex/context/base/grph-trf.mkiv
index 9b4201116..4801a2aa5 100644
--- a/tex/context/base/grph-trf.mkiv
+++ b/tex/context/base/grph-trf.mkiv
@@ -14,7 +14,8 @@
%D It may be that some functionality got lost. If it concerns
%D defined features, let me know and it will be sorted out.
-%D We will move the calculations to lua.
+%D We will move the calculations to \LUA\ and clean up this
+%D lot anyway.
\writestatus{loading}{ConTeXt Graphic Macros / Transformations}
@@ -285,34 +286,46 @@
\def\setscaleboxbydimension
{\ifdim\scaleboxdimx>\zeropoint
\ifdim\scaleboxdimy>\zeropoint
- \dosetdimensionscaleboxsize
- {\docalculatescaleboxscale\scaleboxdimy\scaleboxsizey\scaleboxscay
- \docalculatescaleboxscale\scaleboxdimx\scaleboxsizex\scaleboxscax}%
- {\docalculatescaleboxscale\scaleboxdimy\scaleboxsizey\scaleboxscay
- \docalculatescaleboxscale\scaleboxdimx\scaleboxsizex\scaleboxscax}%
- {\docalculatescaleboxscale\scaleboxdimy\scaleboxsizey\scaleboxscay
- \docalculatescaleboxscale\scaleboxdimx\scaleboxsizex\scaleboxscax}%
+ \setscaleboxbydimension_a
\else
- \dosetdimensionscaleboxsize
- {\docalculatescaleboxscales\scaleboxdimx\scaleboxsizex\scaleboxdimy\scaleboxsizey}%
- {\docalculatescaleboxscales\scaleboxdimx\scaleboxsizex\scaleboxdimy\scaleboxsizey}%
- {\docalculatescaleboxscales\scaleboxdimx\scaleboxsizex\scaleboxdimy\scaleboxsizey}%
+ \setscaleboxbydimension_b
\fi
\else
\ifdim\scaleboxdimy>\zeropoint
- \dosetdimensionscaleboxsize
- {\docalculatescaleboxscales\scaleboxdimy\scaleboxsizey\scaleboxdimx\scaleboxsizex}%
- {\docalculatescaleboxscales\scaleboxdimy\scaleboxsizey\scaleboxdimx\scaleboxsizex}%
- {\docalculatescaleboxscales\scaleboxdimy\scaleboxsizey\scaleboxdimx\scaleboxsizex}%
+ \setscaleboxbydimension_c
\else
- \dosetdimensionscaleboxsize
- {\doapplyscaleboxscale\scaleboxdimx\scaleboxsizex\scaleboxscax\c!xscale
- \doapplyscaleboxscale\scaleboxdimy\scaleboxsizey\scaleboxscay\c!yscale}%
- {\docalculatescaleboxscales\scaleboxdimx\scaleboxsizex\scaleboxdimy\scaleboxsizey}%
- {\docalculatescaleboxscales\scaleboxdimy\scaleboxsizey\scaleboxdimx\scaleboxsizex}%
+ \setscaleboxbydimension_d
\fi
\fi}
+\def\setscaleboxbydimension_a
+ {\dosetdimensionscaleboxsize
+ {\docalculatescaleboxscale\scaleboxdimy\scaleboxsizey\scaleboxscay
+ \docalculatescaleboxscale\scaleboxdimx\scaleboxsizex\scaleboxscax}%
+ {\docalculatescaleboxscale\scaleboxdimy\scaleboxsizey\scaleboxscay
+ \docalculatescaleboxscale\scaleboxdimx\scaleboxsizex\scaleboxscax}%
+ {\docalculatescaleboxscale\scaleboxdimy\scaleboxsizey\scaleboxscay
+ \docalculatescaleboxscale\scaleboxdimx\scaleboxsizex\scaleboxscax}}
+
+\def\setscaleboxbydimension_b
+ {\dosetdimensionscaleboxsize
+ {\docalculatescaleboxscales\scaleboxdimx\scaleboxsizex\scaleboxdimy\scaleboxsizey}%
+ {\docalculatescaleboxscales\scaleboxdimx\scaleboxsizex\scaleboxdimy\scaleboxsizey}%
+ {\docalculatescaleboxscales\scaleboxdimx\scaleboxsizex\scaleboxdimy\scaleboxsizey}}
+
+\def\setscaleboxbydimension_c
+ {\dosetdimensionscaleboxsize
+ {\docalculatescaleboxscales\scaleboxdimy\scaleboxsizey\scaleboxdimx\scaleboxsizex}%
+ {\docalculatescaleboxscales\scaleboxdimy\scaleboxsizey\scaleboxdimx\scaleboxsizex}%
+ {\docalculatescaleboxscales\scaleboxdimy\scaleboxsizey\scaleboxdimx\scaleboxsizex}}
+
+\def\setscaleboxbydimension_d
+ {\dosetdimensionscaleboxsize
+ {\doapplyscaleboxscale\scaleboxdimx\scaleboxsizex\scaleboxscax\c!xscale
+ \doapplyscaleboxscale\scaleboxdimy\scaleboxsizey\scaleboxscay\c!yscale}%
+ {\docalculatescaleboxscales\scaleboxdimx\scaleboxsizex\scaleboxdimy\scaleboxsizey}%
+ {\docalculatescaleboxscales\scaleboxdimy\scaleboxsizey\scaleboxdimx\scaleboxsizex}}
+
\def\dosetdimensionscaleboxsize#1#2#3%
{#1\relax
\doifsomething{\scaleparameter\c!maxwidth}
@@ -326,15 +339,41 @@
#3\relax
\fi}}
-\def\docalculatescaleboxnorm#1#2#3#4#5% 2 3 parameters (dodo:speedup)
- {\processaction
- [\scaleparameter#2]
- [ \v!max=>\global#1\dimexpr#4\relax,
- \v!fit=>\global#1\dimexpr#5\relax,
- \v!broad=>\global#1\dimexpr#5-4\@@exbodyfont\relax,
- \v!auto=>\doifsomething{\scaleparameter#3}{\global#1\dimexpr\scaleparameter#3\relax},
- \s!default=>\doifsomething{\scaleparameter#3}{\global#1\dimexpr\scaleparameter#3\relax},
- \s!unknown=>\global#1\dimexpr\scaleparameter#2\dimexpr\@@exbodyfont/10\relax\relax]}
+% \def\docalculatescaleboxnorm#1#2#3#4#5% 2 3 parameters (dodo:speedup)
+% {\processaction
+% [\scaleparameter#2]
+% [ \v!max=>\global#1\dimexpr#4\relax,
+% \v!fit=>\global#1\dimexpr#5\relax,
+% \v!broad=>\global#1\dimexpr#5-4\@@exbodyfont\relax,
+% \v!auto=>\doifsomething{\scaleparameter#3}{\global#1\dimexpr\scaleparameter#3\relax},
+% \s!default=>\doifsomething{\scaleparameter#3}{\global#1\dimexpr\scaleparameter#3\relax},
+% \s!unknown=>\global#1\dimexpr\scaleparameter#2\dimexpr\@@exbodyfont/10\relax\relax]}
+
+\def\docalculatescaleboxnorm#1#2% todo: swap 1 and 2 and pass one less
+ {\edef\askedscaleboxnorm{\scaleparameter#2}%
+ \csname\??ef:n:\ifcsname\??ef:n:\askedscaleboxnorm\endcsname
+ \askedscaleboxnorm\else\s!unknown
+ \fi\endcsname{#1}}
+
+\setvalue{\??ef:n:\v!max}#1#2#3#4%
+ {\global#1#3}
+
+\setvalue{\??ef:n:\v!fit}#1#2#3#4%
+ {\global#1#4}
+
+\setvalue{\??ef:n:\v!broad}#1#2#3#4%
+ {\global#1\dimexpr#4-4\@@exbodyfont\relax}
+
+\setvalue{\??ef:n:\s!unknown}#1#2#3#4%
+ {\global#1\dimexpr\askedscaleboxnorm\dimexpr\@@exbodyfont/10\relax\relax}
+
+\def\docalculatescaleboxnormauto#1#2#3#4%
+ {\edef\askedscaleboxnorm{\scaleparameter#2}%
+ \ifx\askedscaleboxnorm\empty\else\global#1\askedscaleboxnorm\fi}
+
+\letvalue{\??ef:n:\v!auto }\docalculatescaleboxnormauto
+\letvalue{\??ef:n:\empty }\docalculatescaleboxnormauto
+\letvalue{\??ef:n:\s!default}\docalculatescaleboxnormauto
\def\docalculatescaleboxscales#1#2#3#4%
{\scratchdimen\dimexpr#1/\dimexpr#2/\plusthousand\relax\relax
@@ -426,7 +465,18 @@
\ifdim\ht\nextbox<\scratchdimen
\setbox\nextbox\vbox to \scratchdimen{\vss\box\nextbox\vss}%
\fi}}
-
+
+\def\fastscale#1%
+ {\begingroup
+ \ifnum#1=1000\relax
+ \setfalse\scaleboxdone
+ \else
+ \settrue\scaleboxdone
+ \edef\finalscaleboxxscale{\withoutpt\the\dimexpr#1pt/1000\relax}%
+ \let\finalscaleboxyscale\finalscaleboxxscale
+ \fi
+ \dowithnextbox{\doscaleboxindeed\flushnextbox\endgroup}\hbox}
+
%D \macros
%D {clip, setupclipping}
%D