X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ps%2Flily.ps;h=154fa206c0effa5275f6ca9deab6324ea1cc1d61;hb=469b0c1660e8481379eb5a5c032feb3600e1c530;hp=f2d5c1a058093286fa13f40b3ea35d06fde31331;hpb=014f0f6a4f09a4b93d0041cc8237fd3c7a5ad389;p=lilypond.git diff --git a/ps/lily.ps b/ps/lily.ps index f2d5c1a058..154fa206c0 100644 --- a/ps/lily.ps +++ b/ps/lily.ps @@ -1,204 +1,265 @@ -%!PS-Adobe-1.0: lily.ps +%!PS-Adobe-1.0: lily.ps +% +% Functions for direct and embedded PostScript -% 2 setlanguagelevel % hmm. auto_resize_dicts doesn't help either. -% round cappings +% round cappings 1 setlinecap +/euclidean_length +{ + 1 copy mul exch 1 copy mul add sqrt +} bind def -/draw_beam % width slope thick -{ - 2 div /beam_thick exch def - /beam_slope exch def - /beam_wd exch def - beam_slope beam_wd mul /beam_ht exch def - 0 beam_thick neg moveto - beam_wd beam_ht rlineto - 0 beam_thick 2 mul rlineto - 0 beam_thick lineto - closepath fill -} bind def +/draw_beam % width slope thick +{ + 2 div /beam_thick exch def + /beam_slope exch def + /beam_wd exch def + beam_slope beam_wd mul /beam_ht exch def + 0 beam_thick neg moveto + beam_wd beam_ht rlineto + 0 beam_thick 2 mul rlineto + 0 beam_thick lineto + closepath fill +} bind def -/draw_decrescendo % width height cons thick +/draw_repeat_slash % width slope thick { - setlinewidth - /cresc_cont exch def - /cresc_ht exch def - /cresc_wd exch def - - cresc_wd cresc_cont moveto - 0 cresc_ht lineto - stroke - cresc_wd cresc_cont neg moveto - 0 cresc_ht neg lineto - stroke + /beamthick exch def + /slope exch def + /width exch def + beamthick beamthick slope div euclidean_length + /xwid exch def + 0 0 moveto + xwid 0 rlineto + width slope width mul rlineto + xwid neg 0 rlineto +% width neg width angle sin mul neg rlineto + closepath fill } bind def -/draw_crescendo % width height cons thick +/draw_hairpin % width start_h end_h thick { - setlinewidth - /cresc_cont exch def - /cresc_ht exch def - /cresc_wd exch def - - 0 cresc_cont moveto - cresc_wd cresc_ht lineto - stroke - 0 cresc_cont neg moveto - cresc_wd cresc_ht neg lineto - stroke + setlinewidth + /end_h exch def + /start_h exch def + /wid exch def + 0 start_h moveto + wid end_h lineto + stroke + 0 start_h neg moveto + wid end_h neg lineto + stroke } bind def -/lily_distance -{ - 1 copy mul exch 1 copy mul add sqrt -} bind def +/draw_tuplet % height gap dx dy thick dir +{ + /dir exch def + setlinewidth + 1 setlinecap + 1 setlinejoin + /tuplet_dy exch def + /tuplet_dx exch def + /tuplet_gapx exch def + /tuplet_h exch def + tuplet_dy tuplet_dx div tuplet_gapx mul /tuplet_gapy exch def -/draw_tuplet % height gap dx dy thick dir -{ -% urg: the only Level-2 PS, check effect in print -% true setstrokeadjust - /dir exch def - setlinewidth - 1 setlinecap - 1 setlinejoin - /tuplet_dy exch def - /tuplet_dx exch def - /tuplet_gapx exch def - /tuplet_h exch def - tuplet_dy tuplet_dx div tuplet_gapx mul /tuplet_gapy exch def + 0 0 moveto + 0 tuplet_h dir mul lineto + tuplet_dx tuplet_gapx sub 2 div + tuplet_dy tuplet_gapy sub 2 div tuplet_h dir mul add lineto + tuplet_dx tuplet_gapx add 2 div + tuplet_dy tuplet_gapy add 2 div tuplet_h dir mul add moveto + tuplet_dx tuplet_dy tuplet_h dir mul add lineto + tuplet_dx tuplet_dy lineto + stroke +} bind def +/difficult_draw_ez_ball % ch letter_col ball_col font +{ + % font + findfont 0.7 scalefont setfont + 0.1 setlinewidth 0 0 moveto - 0 tuplet_h dir mul lineto - tuplet_dx tuplet_gapx sub 2 div - tuplet_dy tuplet_gapy sub 2 div tuplet_h dir mul add lineto - tuplet_dx tuplet_gapx add 2 div - tuplet_dy tuplet_gapy add 2 div tuplet_h dir mul add moveto - tuplet_dx tuplet_dy tuplet_h dir mul add lineto - tuplet_dx tuplet_dy lineto - stroke + 0 setgray + 0.5 0 0.5 0 360 arc closepath fill stroke + % ball_col + 1 eq { + 0.01 setlinewidth + 1 setgray + 0.5 0 0.4 0 360 arc closepath + fill stroke + } if + % letter_col + setgray + % 0.25 is empiric centering. Change to taste + 0.25 -0.25 moveto + % ch + show } bind def -/draw_volta % h w thick vert_start vert_end +% Simple, but does it work everywhere? +% The filled circles are drawn by setting the linewidth +% to 2*radius and drawing a point. Is that (defined to be) +% a nice filled circle? +/draw_ez_ball % ch letter_col ball_col font { - /vert_end exch def - /vert_start exch def - setlinewidth - /volta_w exch def - /volta_h exch def -% urg: the only Level-2 PS, check effect in print -% true setstrokeadjust - 1 setlinecap - 1 setlinejoin - vert_start 0 eq { - 0 0 moveto - 0 volta_h lineto - } if - 0 volta_h moveto - volta_w volta_h lineto - vert_end 0 eq { - volta_w 0 lineto - } if - stroke + % font + findfont 0.85 scalefont setfont + /origin { 0.45 0 } def + 0 setgray + 1.1 setlinewidth + origin moveto + origin lineto stroke + % ball_col + setgray + 0.9 setlinewidth + origin moveto + origin lineto stroke + % letter_col + setgray + % 0.25 is empiric centering. Change to taste + origin moveto + -0.28 -0.30 rmoveto + % ch + show } bind def -% this is for drawing slurs. -/draw_bezier_sandwich % thickness -{ - setlinewidth - moveto - curveto +/draw_volta % h w thick vert_start vert_end +{ + /vert_end exch def + /vert_start exch def + setlinewidth + /volta_w exch def + /volta_h exch def + 1 setlinecap + 1 setlinejoin + vert_start 0 eq { + 0 0 moveto + 0 volta_h lineto + } if + 0 volta_h moveto + volta_w volta_h lineto + vert_end 0 eq { + volta_w 0 lineto + } if + stroke +} bind def + +% this is for drawing slurs. +/draw_bezier_sandwich % thickness controls +{ + setlinewidth + moveto + curveto + lineto + curveto + gsave + fill + grestore + stroke +} bind def + +/draw_dashed_line % dash thickness dx dy +{ + 1 setlinecap + 1 setlinejoin + setdash + setlinewidth + 0 0 moveto lineto - curveto - gsave - fill - grestore - stroke -} bind def + stroke +} bind def -/draw_dashed_slur -{ - 1 setlinecap - 1 setlinejoin - setdash - setlinewidth - 8 -2 roll - moveto - curveto - stroke -} bind def +/draw_dashed_slur % dash thickness controls +{ + 1 setlinecap + 1 setlinejoin + setdash + setlinewidth + 8 -2 roll + moveto + curveto + stroke +} bind def -/bracket_traject -{ - /traject_ds exch def - /traject_alpha exch def - traject_ds traject_alpha sin mul add - exch - traject_ds traject_alpha cos mul add - exch -} bind def +/bracket_traject +{ + /traject_ds exch def + /traject_alpha exch def + traject_ds traject_alpha sin mul add + exch + traject_ds traject_alpha cos mul add + exch +} bind def /half_bracket -{ -%6 - 0 0 -%5a - bracket_b bracket_v add bracket_h bracket_t sub bracket_u add - bracket_alpha bracket_v -0.15 mul bracket_traject -%5b - 1 bracket_h - 0 bracket_v 0.5 mul bracket_traject -%5c - 0 bracket_h -%4a - bracket_b bracket_h bracket_t sub - 0 bracket_v 0.4 mul bracket_traject -%4b - bracket_b bracket_v add bracket_h bracket_t sub bracket_u add - bracket_alpha bracket_v -0.25 mul bracket_traject -%4c - bracket_b bracket_v add bracket_h bracket_t sub bracket_u add -%3 - bracket_b bracket_h bracket_t sub -%2 - bracket_b 0 -%1 - 0 0 -} bind def +{ +%6 + 0 0 +%5a + bracket_thick arch_height add half_height arch_thick sub arch_width add + arch_angle arch_height -0.15 mul bracket_traject +%5b + bracket_thick 0.5 mul half_height + 0 arch_height 0.5 mul bracket_traject +%5c + 0 half_height +%4a + bracket_thick half_height arch_thick sub + 0 arch_height 0.4 mul bracket_traject +%4b + bracket_thick arch_height add half_height arch_thick sub arch_width add + arch_angle arch_height -0.25 mul bracket_traject +%4c + bracket_thick arch_height add half_height arch_thick sub arch_width add +%3 + bracket_thick half_height arch_thick sub +%2 + bracket_thick 0 +%1 + 0 0 +} bind def -/draw_half_bracket { - moveto - lineto - lineto - curveto - curveto - lineto - gsave - fill - grestore -} bind def +/draw_half_bracket { + moveto + lineto + lineto + curveto + curveto + lineto + gsave + fill + grestore +} bind def -/draw_bracket % height -{ - 2 div bracket_b add /bracket_h exch def - bracket_t setlinewidth -% urg: the only Level-2 PS, check effect in print -% true setstrokeadjust - 1 setlinecap - 1 setlinejoin - half_bracket - 20 copy - 1 -1 scale - draw_half_bracket - stroke - 1 -1 scale -% ugh, ugh: - 0.05 0 translate - draw_half_bracket - stroke -} bind def +/draw_bracket % arch_angle arch_width arch_height bracket_height arch_thick bracket_thick +{ + % urg + + /bracket_thick exch def + /arch_thick exch def + /bracket_height exch def + /arch_height exch def + /arch_width exch def + /arch_angle exch def + + bracket_height 2 div bracket_thick add /half_height exch def + bracket_thick 0.5 mul setlinewidth + 1 setlinecap + 1 setlinejoin + half_bracket + 20 copy + 1 -1 scale + draw_half_bracket + stroke + 1 -1 scale + draw_half_bracket + stroke +} bind def