X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Ffeta-clefs.mf;h=1a4656ac09a85b82dff8fdc88fcd151d2ddff145;hb=662f7fa0284ab9fae27942934c41354d64a5958e;hp=de4e83c6165f65e9b1169886c08ff0208ec69b61;hpb=8e45bb167fa4efc8fc87f2e8bdfd6a48d2e0140a;p=lilypond.git diff --git a/mf/feta-clefs.mf b/mf/feta-clefs.mf index de4e83c616..1a4656ac09 100644 --- a/mf/feta-clefs.mf +++ b/mf/feta-clefs.mf @@ -1,7 +1,7 @@ % Feta (not the Font-En-Tja) music font -- implement Clefs -*-Fundamental-*- % This file is part of LilyPond, the GNU music typesetter. % -% Copyright (C) 1997--2009 Han-Wen Nienhuys , +% Copyright (C) 1997--2010 Han-Wen Nienhuys , % Jan Nieuwenhuizen , % Juergen Reuter % @@ -305,11 +305,14 @@ def debugfill = fill enddef; def draw_gclef (expr reduction) = save reduced_ss, downstroke_dir, downstroke_angle, center; save breapth_factor, inner_thick_end, thinness, thickness, thinnib; - save start_angle, inner_start_angle, thinness; + save start_angle, inner_start_angle; save upward_swoosh_angle, bot_angle; save pat; + save corr_angle, corr, left_, right_, up_, down_, bot_angle_; path pat; pair downstroke_dir, center; + transform corr; + pair left_, right_, up_, down_; reduced_ss# = staff_space# * reduction; define_pixels (reduced_ss); @@ -406,44 +409,73 @@ def draw_gclef (expr reduction) = z21l = z20l; z21r = z9r; - pat := z21l - .. z10l{down} - .. z10'l; - - fill z2l{right} - .. z3l - .. z4l{left} - ..tension 1.07.. z5l{up} % inside curve - .. z7l{up} - ..tension 1.2.. z20r{curl 1} - .. {direction 0 of pat}z20l - -- z8 - -- z9r % {dir (downstroke_angle + 0)} - ..tension 0.8.. z7r{down} - .. z5r{down} - .. z4r{right} - .. z3r - .. z2r{left} - ..tension .95.. z1r - -- simple_serif (z1r, z1l, 80) - -- z1l + % after computing all points, we want to rotate the clef + % rotating the whole picture won't work due to the complexity + % of the path and metafont's memory limitations, so we transform + % each point and draw the clef thereafter + corr_angle := 1.5; + corr := identity rotatedabout (center, -corr_angle); + + bot_angle_ := bot_angle + corr_angle; + + left_ := left rotated corr_angle; + right_ := right rotated corr_angle; + up_ := up rotated corr_angle; + down_ := down rotated corr_angle; + + % transform points; we transform every point and save it + % to a shifted index range: z1 -> z101, z2 -> z102, etc. + for n := 1 upto 21: + forsuffixes e := l,,r: + z[n+100]e = z[n]e transformed corr; + endfor + endfor + + % transform helper points + for n := 10, 11: + forsuffixes e := l,,r: + z[n+100]'e = z[n]'e transformed corr; + endfor + endfor + + pat := z121l + .. z110l{down} + .. z110'l; + + fill z102l{right} + .. z103l + .. z104l{left_} + ..tension 1.07.. z105l{up_}% inside curve + .. z107l{up_} + ..tension 1.2.. z120r{curl 1} + .. {direction 0 of pat}z120l + -- z108 + -- z109r % {dir (downstroke_angle + 0)} + ..tension 0.8.. z107r{down_} + .. z105r{down_} + .. z104r{right_} + .. z103r + .. z102r{left_} + ..tension .95.. z101r + -- simple_serif (z101r, z101l, 80) + -- z101l ..tension 0.85.. cycle; - penstroke z21e - .. z10e{down} - .. z10'e - .. z6e - .. z11'e - .. z11e{dir (-95)} - .. z12e{dir (bot_angle)}; + penstroke z121e + .. z110e{down_} + .. z110'e + .. z106e + .. z111'e + .. z111e{dir (-95 + corr_angle)} + .. z112e{dir (bot_angle_)}; - fill new_bulb (z12r, bot_angle, z13r, z12l, bot_angle + 180, + fill new_bulb (z112r, bot_angle_, z113r, z112l, bot_angle_ + 180, 0.45 reduced_ss, 0.38 reduced_ss, thinnib + .05 staff_space, 1, -1) -- cycle; - penlabels (range 1 thru 21); - penlabels (10', 11'); + penlabels (range 101 thru 121); + penlabels (110', 111'); draw_staff (-1, 3, 0); enddef;