]> git.donarmstrong.com Git - lilypond.git/blobdiff - mf/feta-sleur.mf
release: 1.3.131
[lilypond.git] / mf / feta-sleur.mf
index 8c411fb3820b4f70df4a2da0a430d3236cc0dc6a..fc6298daa664cc7f770c2361ca57b7530d79d50a 100644 (file)
@@ -1,61 +1,59 @@
-% feta-sleur.mf 
-mode_setup;
-thin:=.2pt;
-thick:=5thin;
-ybow:=.2;
-abow:=1.5;
-
-def draw_slur(expr a,b,d) =
-       beginchar(0,0,0,0) "Embedded mf";
-               % huh, factor 8?
-               z1=8a;
-               z2=8b;
-               save alpha; alpha=angle(z2-z1);
-               save len; len=length(z2-z1);
-               z3=(0,0);
-               z4=(len/2,len*ybow*d);
-               z5=(len,0);
-               save beta; beta=abow*angle(z4-z3);
-               penpos3(thin,90+beta);
-               penpos4(thick,90);
-               penpos5(thin,90-beta);
-               pickup pencircle;
-               path boogje;
-               boogje = z3l{dir(beta)}..z4l{right}..z5l{dir(-beta)}
-                       ..z5r{dir(180-beta)}..z4r{left}
-                       ..z3r{dir(180+beta)}..cycle;
-               penlabels(1,2,3,4,5);
-               boogje := boogje rotated alpha;
-               % silly mo*tex convenction
-%              boogje := boogje shifted ((x1-x2)/2,0);
-               fill boogje;
-               endchar;
-       enddef;
+% 
+% feta-sleur.mf --  implement runtime MF slurs
+% 
+% source file of LilyPond's pretty-but-neat music font
+% 
+% (c) 1997--2001 Jan Nieuwenhuizen <janneke@gnu.org>
+% & Han-Wen Nienhuys <hanwen@cs.uu.nl>
+% 
+% see Documentation/fonts.tex
 
-def sign(expr a) =
-       ((abs(a))/(a))
-       enddef;
+% mode_setup;
+
+%% staffsize#=16pt#;
+% staff_space#:=staffsize#/4;
+% stafflinethickness#:=0.1staff_space#;
 
-def xdraw_slur(expr a,b,d) =
-       beginchar(0,0,0,0) "Embedded mf";
-               % huh, factor 8?
-               z1=8a;
-               z3=8b;
-               save alpha; alpha=angle(z3-z1);
-               z2=(1/2[x1,x3],1/2[y1,y3])+d*ybow*(x3-x1)*dir(alpha+90);
-               save beta; beta=d*sign(y3-y1)*abow*angle(z2-z1)-alpha;
-%              message "d: "&decimal d;
-%              message "dy: "& decimal sign(y3-y1);
-%              message "alpha: "&decimal alpha;
-%              message "beta: "&decimal beta;
-               penpos1(thin,alpha+beta+90);
-               penpos2(thick,alpha+90);
-               penpos3(thin,alpha-beta+90);
-               pickup pencircle;
-               fill z1l{dir(alpha+beta)}..z2l{dir(alpha)}
-                       ..z3l{dir(alpha-beta)}..z3r{dir(180+alpha-beta)}
-                       ..z2r{dir(180+alpha)}..z1r{dir(180+alpha+beta)}
-                       ..cycle;
-               penlabels(1,2,3);
-               endchar;
+pi:=3.14159;
+
+def atan(expr x) = 
+       (angle(1,x)*pi/180)
        enddef;
+
+
+sleur_pen#:=stafflinethickness#;
+slurheightlimit#:=staffsize#/2;
+slurthick#:=1.8stafflinethickness#;
+
+define_pixels(staffsize,staff_space,stafflinethickness);
+define_pixels(sleur_pen,slurheightlimit,slurthick);
+
+sluralpha:=2slurheightlimit#/pi;
+slurratio:=1/3;
+slurbeta:=pi*slurratio/2slurheightlimit#;
+
+def draw_slur(expr dxs,dys,hs,d) =
+       save x, y;
+       save b, dx, dy, h, indent;
+       dx#:=dxs*1pt#;
+       dy#:=dys*1pt#;
+       h#:=hs*1pt#;
+       define_pixels(dx,dy);
+       b#:=length(dx#,dy#);
+       indent#:=sluralpha*atan(slurbeta*b#);
+       define_pixels(b,h,indent);
+       height:=(indent+h)*d;
+       z1=(0,0);
+       z2=(b,0);
+       z3=(indent,height);
+       z4=(b-indent,height);
+       z5=z4-(0,d*slurthick);
+       z6=z3-(0,d*slurthick);
+       path boogje;
+       boogje=z1..controls z3 and z4..z2..controls z5 and z6..cycle;
+       boogje:=boogje rotated angle(dxs,dys);
+       pickup pencircle scaled sleur_pen;
+       filldraw boogje;
+enddef;
+
+