% Feta (not the Font-En-Tja) music font -- implement noteheads
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2011 Jan Nieuwenhuizen <janneke@gnu.org>
+% Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
% & Han-Wen Nienhuys <hanwen@xs4all.nl>
% & Juergen Reuter <reuter@ipd.uka.de>
%
enddef;
-%
-% dimensions aren't entirely right.
-%
def draw_longa (expr up) =
save stemthick, fudge;
stemthick# = 2 stafflinethickness#;
define_whole_blacker_pixels (stemthick);
- fudge = hround (blot_diameter / 2);
+ % Longas of smaller design sizes should have their lines farther
+ % apart (the overlap with notehead ellipsoid should be smaller).
+ fudge = hround (blot_diameter
+ * min (max (-0.15,
+ (0.9
+ - (20 / (design_size + 4)))),
+ 0.3));
draw_outside_ellipse (1.80, 0, 0.707, 0);
undraw_inside_ellipse (1.30, 125, 0.68, 2 stafflinethickness#);
+ set_char_box (stemthick#,
+ width# + stemthick#,
+ noteheight# / 2,
+ noteheight# / 2);
+
pickup pencircle scaled stemthick;
+ % Longas of smaller design sizes should have their lines longer.
+ line_length := min (max (0.7, (64/60 - (design_size / 60))), 0.85);
+
+ % Line lengths between 0.72 and 0.77 are not nice
+ % because they are neither separate nor connected
+ % when there is an interval of fourth.
+ if line_length < 0.75:
+ quanted_line_length := min (0.72, line_length);
+ else:
+ quanted_line_length := max (0.77, line_length);
+ fi;
+
+ final_line_length := quanted_line_length * staff_space;
+
if up:
- bot y1 = -d;
- top y2 = h;
+ bot y1 = -final_line_length;
+ top y2 = final_line_length;
rt x1 - fudge = 0;
x1 = x2;
- fudge + lft x3 = w;
+ fudge + lft x3 = width;
x4 = x3;
top y4 = h + 3.0 staff_space;
y3 = y1;
else:
bot y1 = -d - 3.0 staff_space;
- top y2 = h;
+ top y2 = final_line_length;
rt x1 - fudge = 0;
x1 = x2;
- fudge + lft x3 = w;
+ fudge + lft x3 = width;
x4 = x3;
y4 = y2;
- bot y3 = -d;
+ bot y3 = -final_line_length;
fi;
draw_gridline (z1, z2, stemthick);
def draw_brevis (expr linecount, line_thickness_multiplier) =
- save stemthick, fudge;
+ save stemthick, fudge, gap;
stemthick# = line_thickness_multiplier * 2 * stafflinethickness#;
define_whole_blacker_pixels (stemthick);
- % Breves of smaller design sizes should have their lines
- % farther apart (the overlap should be smaller).
- fudge = hround (blot_diameter *
- min (max (-0.15, (0.8 - (20 / (design_size + 4)) + .1 linecount)), 0.3));
+ % double-lined breves of smaller design sizes should have
+ % bigger gap between the lines.
+ gap# := (0.95 - 0.008 * design_size) * stemthick#;
+
+ % Breves of smaller design sizes should have their lines farther
+ % apart (the overlap with notehead ellipsoid should be smaller).
+ fudge = hround (blot_diameter
+ * min (max (-0.15,
+ (0.8
+ - (20 / (design_size + 4))
+ + .1 linecount)),
+ 0.3));
draw_outside_ellipse (1.80, 0, 0.707, 0);
undraw_inside_ellipse (1.30, 125, 0.68, 2 stafflinethickness#);
+ set_char_box (stemthick# * linecount + gap# * (linecount - 1),
+ width# + stemthick# * linecount + gap# * (linecount - 1),
+ noteheight# / 2,
+ noteheight# / 2);
+
+ define_pixels (gap);
pickup pencircle scaled stemthick;
% Breves of smaller design sizes should have their lines longer.
rt x1 - fudge = 0;
x1 = x2;
- fudge + lft x3 = w;
+ fudge + lft x3 = width;
x4 = x3;
y4 = y2;
y3 = y1;
- % Breves of smaller design sizes should have their lines
- % farther apart.
- line_distance := (1.95 - 0.008 * design_size) * stemthick;
for i := 0 step 1 until linecount - 1:
- draw_gridline (z1 - (i * line_distance, 0),
- z2 - (i * line_distance, 0),
+ line_distance := i * (gap + stemthick);
+ draw_gridline (z1 - (line_distance, 0),
+ z2 - (line_distance, 0),
stemthick);
- draw_gridline (z3 + (i * line_distance, 0),
- z4 + (i * line_distance, 0),
+ draw_gridline (z3 + (line_distance, 0),
+ z4 + (line_distance, 0),
stemthick);
endfor;
enddef;