]> git.donarmstrong.com Git - lilypond.git/blobdiff - mf/feta-accordion.mf
Fix 1111: Break dynamic line spanner if different direction is explicitly given
[lilypond.git] / mf / feta-accordion.mf
index 1a9e3625d984b73c31526796a5acb82c8936d599..97de6e494c9aedbe4339742e9d2f04385fd41de5 100644 (file)
@@ -1,7 +1,7 @@
 % Feta (not the Font-En-Tja) music font -- draw accordion symbols
 % This file is part of LilyPond, the GNU music typesetter.
 %
-% Copyright (C) 1998--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 1998--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %
 % LilyPond is free software: you can redistribute it and/or modify
 % it under the terms of the GNU General Public License as published by
@@ -30,7 +30,7 @@ accreg_lh# := 1.0 staff_space#;
 define_pixels (accreg_dot_size, accreg_linethickness, accreg_lh);
 
 
-fet_beginchar ("accDiscant", "accDiscant")
+fet_beginchar ("accordion register discant", "discant")
        save r, pat, lh, lt;
        path pat;
 
@@ -101,7 +101,7 @@ fet_beginchar ("accDiscant", "accDiscant")
 fet_endchar;
 
 
-fet_beginchar ("accDot", "accDot")
+fet_beginchar ("accordion register dot", "dot")
        set_char_box (accreg_dot_size# / 2, accreg_dot_size# / 2,
                      accreg_dot_size# / 2, accreg_dot_size# / 2);
 
@@ -114,7 +114,7 @@ fet_beginchar ("accDot", "accDot")
 fet_endchar;
 
 
-fet_beginchar ("accFreebase", "accFreebase")
+fet_beginchar ("accordion register freebass", "freebass")
        save r, lh, lt;
 
        r# = accreg_lh#;
@@ -171,7 +171,7 @@ fet_beginchar ("accFreebase", "accFreebase")
 fet_endchar;
 
 
-fet_beginchar ("accStdbase", "accStdbase")
+fet_beginchar ("accordion register stdbass", "stdbass")
        save r, p, lh, lt;
        path pat;
 
@@ -244,7 +244,7 @@ fet_beginchar ("accStdbase", "accStdbase")
 fet_endchar;
 
 
-fet_beginchar ("accBayanbase", "accBayanbase")
+fet_beginchar ("accordion register bayanbass", "bayanbass")
        save lh, lt;
 
        lh = vround accreg_lh;
@@ -372,7 +372,7 @@ def def_some_vars =
 enddef;
 
 
-fet_beginchar ("accOldEE", "accOldEE")
+fet_beginchar ("accordion oldEE", "oldEE")
        save r, pp, ir, lh, lt, stroke_width;
 
        r# = staff_space#;
@@ -452,7 +452,8 @@ fet_beginchar ("accOldEE", "accOldEE")
        fi;
 fet_endchar;
 
-fet_beginchar ("Accordion push", "push");
+
+fet_beginchar ("accordion push", "push");
        save width, height;
 
        height# := 2.0 staff_space# + 3.0 stafflinethickness#;
@@ -474,22 +475,43 @@ fet_beginchar ("Accordion push", "push");
        top y1 = height;
 
        rt x2 = 0;
-       y2 = 0.5 * (y1+y3);
+       y2 = 0.5 * (y1 + y3);
 
-       x3= x1;
+       x3 = x1;
        bot y3 = 0;
 
-       save pat;
-
-       path pat;
-
-       pat = z1 -- z2 -- z3;
-
-       draw pat;
-
+       save nw_offset, ne_offset;
+       pair nw_offset, ne_offset;
+       save sw_offset, se_offset, line_radius;
+       pair sw_offset, se_offset;
+
+       line_radius := linewidth / 2;
+       nw_offset := line_radius * unitvector (z1 - z2);
+       ne_offset := nw_offset rotated -90;
+       sw_offset := line_radius * unitvector (z3 - z2);
+       se_offset := sw_offset rotated 90;
+
+       z4 = ((z1 - ne_offset)
+            -- (z2 - ne_offset))
+            intersectionpoint
+            ((z2 - se_offset)
+            -- (z3 - se_offset));
+
+       fill z1 + ne_offset
+            -- z2 + ne_offset
+            .. rt z2 {down}
+            .. z2 + se_offset
+            -- z3 + se_offset
+            .. z3 + sw_offset {- se_offset}
+            .. z3 - se_offset
+            -- z4
+            -- z1 - ne_offset
+            .. z1 + nw_offset {ne_offset}
+            .. cycle;
 fet_endchar;
 
-fet_beginchar ("Accordion pull", "pull");
+
+fet_beginchar ("accordion pull", "pull");
        save width, height;
 
        height# := 2.0 staff_space# + 3.0 stafflinethickness#;
@@ -525,24 +547,17 @@ fet_beginchar ("Accordion pull", "pull");
        x5 = x1;
        y5 = y4;
 
-       save pat;
-
-       path pat;
-
-       pat = z1 + penradius * right {up} --
-             z2 + penradius * right {up} ..
-             z2 + penradius * up {left} --
-             z3 + penradius * up {left} ..
-             z3 + penradius * left {down} --
-             z4 + penradius * left {down} ..
-             z4 + penradius * down {right} --
-             z5 + penradius * (down + left) --
-             z1 + penradius * left {down} ..
-             z1 + penradius * down {right} ..
-             cycle;
-
-       fill pat;
-
+       fill z1 + penradius * right {up}
+            -- z2 + penradius * right {up}
+            .. z2 + penradius * up {left}
+            -- z3 + penradius * up {left}
+            .. z3 + penradius * left {down}
+            -- z4 + penradius * left {down}
+            .. z4 + penradius * down {right}
+            -- z5 + penradius * (down + left)
+            -- z1 + penradius * left {down}
+            .. z1 + penradius * down {right}
+            .. cycle;
 fet_endchar;
 
 fet_endgroup ("accordion");