-% bolletjes.mf
-% part of LilyPond's pretty-but-neat music font
+%
+% feta-bolletjes.mf -- implement noteheads
+%
+% source file of LilyPond's pretty-but-neat music font
+%
+% (c) 1997, 1998 Jan Nieuwenhuizen <janneke@gnu.org>
+% & Han-Wen Nienhuys <hanwen@stack.nl>
+%
+
% most beautiful noteheads are pronounced, not circular,
% and not even symmetric.
noteheight#:=interline#+ (1 + overdone_heads) *stafflinethickness#;
define_pixels(noteheight);
+brevis_wid# := 2 interline#;
-def draw_brevis =
+def draw_brevis(expr brevwid) =
save beamheight, head_width;
save holeheight, stem_width;
save serif_size, serif_protrude;
- head_width# = 2 interline#;
+ head_width# = brevwid;
holeheight = 3 stafflinethickness;
stem_width = 1.4 stafflinethickness;
-- z4l -- z4r -- z3r{left} .. z2r{up} -- cycle;
addto currentpicture also currentpicture yscaled -1;
- addto currentpicture also currentpicture reflectedabout(z4r, z4l);
+ show z4r; show z4l;
+ addto currentpicture also currentpicture
+ shifted (-x4r,0) xscaled -1 shifted (x4l,0);
+
+enddef;
+
+save uitsteek;
+ uitsteek = .25;
+def draw_ledger(expr wid)=
+ set_char_box(uitsteek * wid, (1+ uitsteek)*wid,
+ ledgerlinethickness#/2,ledgerlinethickness#/2);
+ pickup pencircle scaled ledgerlinethickness;
+ rt x2 = w;
+ lft x1 = -b;
+ y1 = y2 = 0;
+ draw z1 .. z2;
enddef;
fet_beginchar("Brevis notehead", "-1", "brevisball")
- draw_brevis;
+ draw_brevis(brevis_wid#);
+fet_endchar;
+fet_beginchar("Brevis ledger", "-1l", "brevisledger")
+ draw_ledger(brevis_wid#);
fet_endchar;
-
%
% Some sources (eg Musix/OpusTeX think that the appendage should be on
% the right, my only other ref [Willemze], shows an appendage to the left
%
fet_beginchar("Longa notehead", "-2", "longaball");
- draw_brevis;
+ draw_brevis(brevis_wid#);
save theta;
z7 = z5;
z6 - z7 = (-stem_width/2, -interline);
fill z7r .. z6r{z6-z7} .. {z7-z6} z6l -- z7l -- cycle;
penlabels(6,7);
fet_endchar;
+fet_beginchar("Longa ledger", "-2l", "longaledger")
+ draw_ledger(brevis_wid#);
+fet_endchar;
+
% setup user vars
def setup_notehead_vars =
a_w:=1; % no rotate-> no width correction
notehead_calc;
+ whole_notehead_width# := wd#;
notehead_draw;
fet_endchar;
+fet_beginchar("Whole ledger line", "0l", "wholeledger")
+ draw_ledger(whole_notehead_width#);
+fet_endchar;
+
% half note
% Wanske, p.39
fet_beginchar("Half notehead", "1",
a_w:=1.12;
notehead_calc;
+ half_notehead_width# := wd#;
notehead_draw;
fet_endchar;
+fet_beginchar("Half ledger", "1l", "halfledger")
+ draw_ledger(half_notehead_width#);
+fet_endchar;
+
% quarter note
% Wanske p.38
fet_beginchar("Quart notehead", "2", "quartball")
fet_endchar;
+fet_beginchar("Quart ledger", "2l", "quartledger")
+ draw_ledger(black_notehead_width#);
+fet_endchar;
+
+
+%if test = 0:
+%else:
+def draw_harmonic_notehead(expr harmwid) =
+ save beamheight, head_width, head_char_width;
+ save holeheight, stem_width;
+ save serif_size, serif_protrude;
+ save stemthick;
+ save thin, thick;
+ save ht, schuif_op;
+
+% setup_notehead_vars;
+
+% a_b:=1.54;
+% ai_a:=0;
+% ai_bi:=1;
+% b_h:=0.85;
+% a_w:=1.09;
+
+% notehead_calc;
+
+
+ head_width# = harmwid;
+
+ define_pixels(head_width);
+
+% ht# = noteheight#;
+ head_char_width = 1.54 noteheight;
+ head_char_width# := 1.54 ht#;
+ %schuif_op = head_char_width - head_width; %ugh
+ %schuif_op# := head_char_width# - head_width#;
+% set_char_box(0, head_char_width#, noteheight#/2, noteheight#/2);
+ set_char_box(0, head_width#, head_width#/2, head_width#/2);
+% 2 beamheight + holeheight = noteheight;
+ thin = stafflinethickness;
+ thick = 2.2 stafflinethickness;
+% serif_size = (holeheight - stafflinethickness)/2;
+% serif_protrude = 1.5 serif_size;
+ penpos1(thick, 45);
+ penpos2(thin, 315);
+ penpos3(thin, 135);
+ penpos4(thick, 45);
+ penpos5(thick, 225);
+ penpos6(thin, 135);
+ penpos7(thin, 315);
+ penpos8(thick, 225);
+
+% 1.5 noteheight = head_width;
+ z1l = (0, 0);
+ z2l = z1l;
+% z3l = (head_width/2,-head_width/2);
+ z3l = (head_width/2, -noteheight/2);
+ z4l = z3l;
+ z5l = (head_width, 0);
+ z6l = z5l;
+% z7l = (head_width/2, head_width/2);
+ z7l = (head_width/2, noteheight/2);
+ z8l = z7l;
+
+ pickup pencircle; %scaled stemthick;
+ penlabels(1,2,3,4,5,6,7,8);
+ test_grid;
+ fill z1l -- z2r -- z7r -- z7l -- cycle;
+ fill z1l -- z1r -- z4r -- z4l -- cycle;
+ fill z3r -- z3l -- z6l -- z6r -- cycle;
+ fill z5r -- z5l -- z8l -- z8r -- cycle;
+enddef;
+
+%save uitsteek;
+% uitsteek = .25;
+harmonic_wid# := interline#;
+
+fet_beginchar("Harmonic notehead","harmonic","harmonicball")
+ draw_harmonic_notehead(harmonic_wid#)
+fet_endchar;
+
+fet_beginchar("Harmonic ledger", "harmonicl", "harmonicledger")
+ draw_ledger(harmonic_wid#);
+fet_endchar;
+%fi
fet_endgroup("balls");