This is the version I ended up with, seems to do exactly what I had in mind:

\startuniqueMPgraphic{mpshadow}
% BodyFontSize should be the current font size of/in the frame
mw := BodyFontSize/3;
ox := 3 ; % offset x
oy := 2 ; % offset y
bx := 1.7mw ; % bleed x (height of the shadow)
by := 3mw ; % bleed y (width of the shadow)
rx := 2mw ; % max. corner radius x
ry := 1mw ; % max. corner radius y
steps := 10 ; % number of shadow layers, 10 is a good value
hue := 0.03 ; % 0.02 is a good value
ycorr := 1mw ; % difference between overlay height and shadow height

for step = 1 upto steps:

part := (step-1)/steps;
xstep := bx * part ; % current part of bleed
ystep := by * part ;
crx := (rx + rx*part)/2; % current radius
cry := (ry + ry*part)/2;

% points of the rounded rectangle
xa := -xstep + ox;
xb := -xstep + ox + crx;
xc :=  xstep + ox - crx + \overlaywidth;
xd :=  xstep + ox       + \overlaywidth;
ya := -ystep + ycorr + oy;
yb := -ystep + ycorr + oy + cry;
yc :=  ystep - ycorr + oy - cry + \overlayheight;
yd :=  ystep - ycorr + oy       + \overlayheight;

fill (xb, ya)---
(xc, ya)...
(xd, yb)---
(xd, yc)...
(xc, yd)---
(xb, yd)...
(xa, yc)---
(xa, yb)...cycle
withcolor transparent(1, hue, black) ;

endfor;

setbounds currentpicture to OverlayBox ;
\stopuniqueMPgraphic

\defineoverlay[shadow][\useMPgraphic{mpshadow}]

\setupexternalfigures[location=default]

\starttext

\startplacefigure
  [title={MyTitle.}]
  \externalfigure[mill]
\stopplacefigure

\blank[2em]

\startplacefigure
  [title={MyTitle.}]
\externalfigure[mill][background=shadow]
\stopplacefigure

\stoptext

Op zo 11 mei 2025 om 15:18 schreef Wolfgang Schuster <
wolfgang.schuster.li...@gmail.com>:

> Am 10.05.2025 um 21:39 schrieb Jeroen:
> > Is there a way with metapost to get a slightly off-centered (upper-
> > right) shadow around a figure?
>
> This a simple version (the \setupexternalfigures line is needed to load
> the example image because it won't wotk with dummy graphics):
>
> \startuseMPgraphic{shadow}
>    fill OverlayBox shifted (EmWidth/2,EmWidth/2) withcolor "lightgray" ;
>    setbounds currentpicture to OverlayBox ;
> \stopuseMPgraphic
>
> \defineoverlay [shadow] [\useMPgraphic{shadow}]
>
> \setupexternalfigures[location=default]
>
> \starttext
>
> \externalfigure[mill]
> \blank
> \externalfigure[mill][background=shadow]
>
> \stoptext
>
> Wolfgang
>
>
> ___________________________________________________________________________________
> If your question is of interest to others as well, please add an entry to
> the Wiki!
>
> maillist : ntg-context@ntg.nl /
> https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
> webpage  : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
> archive  : https://github.com/contextgarden/context
> wiki     : https://wiki.contextgarden.net
>
> ___________________________________________________________________________________
>
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / 
https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage  : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive  : https://github.com/contextgarden/context
wiki     : https://wiki.contextgarden.net
___________________________________________________________________________________

Reply via email to