]> git.donarmstrong.com Git - lilypond.git/blob - mf/feta-arrow.mf
Add '-dcrop' option to ps and svg backends
[lilypond.git] / mf / feta-arrow.mf
1
2 %
3 % Draw an arrow
4 %
5 % * `stemslant' gives the direction of the stem's left boundary
6 %   (needed for brushed stems, equals "up" for straight stems)
7 % * `extend' is used to make the stem longer or shorter (if negative);
8 %   different kinds of accidentals need different values here
9 %
10 def draw_arrow (expr attach, stemwidth, stemslant, extend, pointingdown) =
11 begingroup;
12         save htip;  % tip height
13         save wwing; % wing `radius'
14         save angle_wing_bot, angle_wing_top, angle_tip;
15         save upshift;
16         clearxy;
17
18         wwing := 0.26 stemwidth;
19         htip := staff_space * 0.85 + stafflinethickness - wwing;
20
21         % `flip' is used to reflect the arrow vertically
22         % if arrow points downward
23         transform flip;
24         if pointingdown:
25                 flip = identity reflectedabout (origin, right);
26         else:
27                 flip = identity;
28         fi;
29
30         z1 = attach shifted (-stemwidth / 2, 0);
31         upshift := max (0, wwing + 0.1 staff_space + extend);
32         z2 = z1 shifted (((unitvector stemslant)
33                           scaled upshift) transformed flip);
34
35         z7 = attach shifted ((stemwidth/2),0);
36         z6 = z7 shifted (((unitvector (-xpart stemslant, ypart stemslant))
37                           scaled upshift) transformed flip);
38         z2 - z3 = ( 0.38 staff_space, 0.05 htip) transformed flip;
39         z6 - z5 = (-0.38 staff_space, 0.05 htip) transformed flip;
40
41         z4 = attach shifted ((-0.2 stemwidth, upshift + htip)
42                              transformed flip);
43         z4'= attach shifted (( 0.2 stemwidth, upshift + htip)
44                              transformed flip);
45
46         % `angle_wing_bot' is the angle at which the arc
47         % from z2 to z3a enters z3a
48         % `angle_wing_top' is the angle at which the arc
49         % from z3b to z4 leaves z3b
50         % `angle_tip' is the angle at which the arc
51         % from z4 to z4' leaves z4
52         angle_wing_bot = 30;
53         angle_wing_top = 55;
54         angle_tip = 68;
55
56         z3a = z3 shifted ((((dir angle_wing_bot) rotated -90)
57                            scaled wwing) transformed flip);
58         z3b = z3 shifted ((((dir angle_wing_top) rotated 90)
59                            scaled wwing) transformed flip);
60
61         z5a = z5 shifted ((((dir (180 - angle_wing_bot)) rotated 90)
62                            scaled wwing) transformed flip);
63         z5b = z5 shifted ((((dir (180 - angle_wing_top)) rotated -90)
64                            scaled wwing) transformed flip);
65
66         % Draw the arrow
67         pickup pencircle scaled 1;
68         fill z1
69              -- z2{stemslant transformed flip}
70              .. {(-dir angle_wing_bot) transformed flip}z3a
71              .. z3b{(dir angle_wing_top) transformed flip}
72              .. z4{(dir angle_tip) transformed flip}
73              .. z4'{(dir (-angle_tip)) transformed flip}
74              .. {(dir (-angle_wing_top)) transformed flip}z5b
75              .. z5a{(-dir (-angle_wing_bot)) transformed flip}
76              .. z6{((-stemslant) reflectedabout (origin, up)) transformed flip}
77              -- z7
78              -- cycle;
79
80         labels (range 0 thru 7, 4', 3a, 3b, 5a, 5b);
81 endgroup;
82 enddef;