]> git.donarmstrong.com Git - lilypond.git/blob - mf/feta-klef.mf
release: 0.1.29
[lilypond.git] / mf / feta-klef.mf
1
2 fet_begingroup("klef");
3
4 def draw_bass_clef(expr reduction, center) = 
5         save thinness, left_shoot, reduced_il;
6         save left_fat, right_fat, dot_size, dot_sep;
7         save hip_factor;
8
9         left_shoot = 0.3;
10         left_fat = .3;
11         right_fat = .5;
12         dot_size = .4;
13         dot_sep = 1.2;
14         hip_factor = 0.95;
15         thinness = stafflinethickness;
16         
17
18         reduced_il# = interline# * reduction;
19         define_pixels(reduced_il);
20         set_char_box(left_fat * reduced_il#, 
21                 (1 + hip_factor + right_fat/2)* reduced_il# +
22                 (dot_sep+ 1) * dot_size *reduced_il#
23                 , 2.5 reduced_il#, 1.0 reduced_il#)
24
25         z2 - z1 = (1.1 reduced_il, reduced_il);
26         z3 = (x2 + hip_factor* reduced_il, y1);
27         z4 - z1 = (- left_shoot * reduced_il, -2.5 reduced_il);
28
29         z1extreme = z1l - ( thinness/2, 0);
30         penpos1(left_fat* reduced_il , 0);
31         z1r = (center, 0);
32         z5 = (x3l +  dot_sep * dot_size * interline, .5 interline);
33         
34         
35         penpos3(right_fat * reduced_il, 180);
36
37         penlabels(1,3);
38         labels(2,4);
39
40
41         pickup pencircle scaled thinness;
42         filldraw z1r{up} .. z2{right} .. z3r{down}  .. {curl 0} z4 {curl 0}
43                 .. z3l{up} .. z2{left} .. z1l{down} -- cycle;
44
45         draw_bulb(1, z1r, z1extreme, 1.2 , 1.2);
46
47         pickup pencircle scaled (dot_size * interline);
48         draw z5;
49         draw z5 yscaled -1;
50
51 enddef;
52
53
54 %
55 % Inspired by Baerenreiter, Auf dem Strom
56
57 % FIXME: dims
58 % FIXME: right vertical tangent seems to be lower than the F-line
59 % FIXME: bulb curve smoothly into "long curve" on the  inside
60 %
61 %
62 % [Wanske] says that the extreme x point should be exactly between 
63 % the dots, but her picture shows that the extreme is ~ 0.2 ss lower
64
65 def draw_bass_klef(expr reduction) = 
66         save reduced_il, left_tilt, left_thick;
67         reduced_il# = interline# * reduction;
68         left_tilt = 10;
69
70         define_pixels(reduced_il);
71         left_thick = .25  reduced_il;
72         
73         set_char_box(0, 2.7 reduced_il#, 2.5 reduced_il#, reduced_il#);
74         x1r - x1l = left_thick;
75         x1l = 0;
76         y1l = 0;
77
78         y2 = reduced_il;
79
80         x3r = x1l + 12/7 reduced_il;
81         x2 = .5 [x1,x3];
82         x3l - x3r = .48 reduced_il;
83         y3l = -0.05 interline;
84         x4 = x1l - stafflinethickness;
85         y4 = -2.2  reduced_il;
86         z5 = (x3l +  1/3 reduced_il, .5 reduced_il);
87
88         penpos1(whatever, left_tilt);
89         penpos2(1.2 stafflinethickness, -90);
90         penpos3(whatever,  185);
91         penpos4(stafflinethickness, 135);
92
93         draw_bulb(1, z1r,  z1l, .45 reduced_il, 1.0);
94
95
96         fill z1r{up} .. z2r{right} .. tension .9 .. z3r{down}  .. {curl 0} 
97                 simple_serif(z4r, z4l, 90) {curl 0}
98                 .. z3l{up} .. tension .9 .. z2l{left} 
99                 .. z1l{dir (-90 + left_tilt)} -- cycle;
100         labels(2,4);
101         penlabels(1,2,3,4);
102
103         pickup pencircle scaled (1/3 reduced_il);
104         draw z5;
105         draw z5 yscaled -1;
106 enddef;
107
108 fet_beginchar("F clef ", "bass", "bassclef")
109         draw_bass_klef(1.0);
110 fet_endchar;
111 fet_beginchar("F clef (reduced)", "bass_change", "cbassclef")
112         draw_bass_klef(0.8);
113 fet_endchar;
114
115
116 fet_endgroup("klef");