X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ps%2Fmusic-drawing-routines.ps;h=ed6b76bb09be3e7f35ed022e522f5c90ded3d173;hb=98ba77f9a972c75e431f29a47df18676c3d65621;hp=154fa206c0effa5275f6ca9deab6324ea1cc1d61;hpb=f7c306cacfbdf6229e9414c691e36e49b41ea71a;p=lilypond.git diff --git a/ps/music-drawing-routines.ps b/ps/music-drawing-routines.ps index 154fa206c0..ed6b76bb09 100644 --- a/ps/music-drawing-routines.ps +++ b/ps/music-drawing-routines.ps @@ -1,82 +1,161 @@ -%!PS-Adobe-1.0: lily.ps +%!PS-Adobe-1.0: music-drawing-routines.ps % % Functions for direct and embedded PostScript -% round cappings -1 setlinecap + +/set_tex_dimen { + cvr def +} bind def + + /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 +% FIXME. translate to middle of box. +% Nice rectangle with rounded corners +/draw_box % breapth width depth height +{ +% currentdict /testing known { + %% real thin lines for testing + /blot 0.005 def +% }{ +% /blot blot-diameter def +% } ifelse + + 0 setlinecap + blot setlinewidth + 1 setlinejoin + + blot 2 div sub /h exch def + blot 2 div sub /d exch def + blot 2 div sub /w exch def + blot 2 div sub /b exch def + + b neg d neg moveto + b w add 0 rlineto + 0 d h add rlineto + b w add neg 0 rlineto + 0 d h add neg rlineto + + currentdict /testing known { + %% outline only, for testing: + stroke + }{ + closepath gsave stroke grestore fill + } ifelse +} bind def + + +/draw_round_box % breapth width depth height blot +{ + /blot exch def + + 0 setlinecap + blot setlinewidth + 1 setlinejoin + + blot 2 div sub /h exch def + blot 2 div sub /d exch def + blot 2 div sub /w exch def + blot 2 div sub /b exch def + + b neg d neg moveto + b w add 0 rlineto + 0 d h add rlineto + b w add neg 0 rlineto + 0 d h add neg rlineto + + currentdict /testing known { + %% outline only, for testing: + stroke + }{ + closepath gsave stroke grestore fill + } ifelse +} bind def + +% Nice beam with rounded corners +/draw_beam % slope width thick blot +{ + /blot exch def + blot setlinewidth + + 0 setlinecap + 1 setlinejoin + + blot sub /t exch def + blot sub /w exch def + w mul /h exch def + + blot 2 div t 2 div neg moveto + w h rlineto + 0 t rlineto + w neg h neg rlineto + 0 t neg rlineto + + currentdict /testing known { + %% outline only, for testing: + stroke + }{ + closepath gsave stroke grestore fill + } ifelse } bind def -/draw_repeat_slash % width slope thick +/draw_polygon % x(n) y(n) x(n-1) y(n-1) ... x(1) y(1) n blot { - /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 + /blot exch def + + 0 setlinecap + blot setlinewidth + 1 setlinejoin + + /points exch def + 2 copy + moveto + 1 1 points {pop lineto} for + currentdict /testing known { + %% outline only, for testing: + stroke + }{ + closepath gsave stroke grestore fill + } ifelse } bind def -/draw_hairpin % width start_h end_h thick +/draw_repeat_slash % width slope thick { - 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 + 1 setlinecap + 1 setlinejoin + + /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_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 - - - 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 +/draw_white_text % text scale font +{ + %font + findfont + %scale + exch scalefont setfont + 1 setgray + 0 0 moveto + %-0.05 -0.05 moveto + % text + show +} bind def + +/draw_ez_ball % ch letter_col ball_col font { % font findfont 0.7 scalefont setfont @@ -100,10 +179,12 @@ } bind def % Simple, but does it work everywhere? +% Han-Wen reports that one printer (brand?) at cs.uu.nl chokes on this, +% reverted for now -- jcn +% % 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 +% to 2*radius and drawing a point. +/simple_draw_ez_ball % ch letter_col ball_col font { % font findfont 0.85 scalefont setfont @@ -126,41 +207,40 @@ show } bind def -/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 -{ +{ + % round ending and round beginning + 1 setlinejoin 1 setlinecap setlinewidth moveto curveto lineto - curveto + curveto + closepath gsave fill grestore stroke } bind def +/draw_dot % x1 y2 R +{ +% 0 360 arc fill stroke + 0 360 arc closepath fill stroke +} bind def + +/draw_white_dot % x1 y2 R +{ +% 0 360 arc fill stroke + 0 360 arc closepath % fill stroke +gsave + 1 setgray fill +grestore +% 0 360 arc closepath % fill stroke + 0.05 setlinewidth 0 setgray stroke +} bind def + /draw_dashed_line % dash thickness dx dy { 1 setlinecap @@ -185,6 +265,50 @@ } bind def +% a b c d subvec == a-c b-d +/subvec { + 3 2 roll exch sub + 3 1 roll + sub exch +} bind def + + +% centre? zzwidth zzheight thickness x0 y0 x1 y1 +/draw_zigzag_line { + newpath + 6 dict begin + + 4 2 roll % zzuw zzh th x1 y1 x0 y0 + 2 copy + moveto + subvec % zzuw zzh th dx dy + + 2 copy euclidean_length /l exch def + l div /uy exch def + l div /ux exch def + setlinewidth + /zzh exch def + l exch div round /n exch def + n 0 gt { %if + /zzw l n 2 mul div def + { + uy zzh mul 2 div ux zzh mul -2 div rmoveto + } if + 1 1 n { + ux zzw mul uy zzh mul sub + uy zzw mul ux zzh mul add + rlineto + ux zzw mul uy zzh mul add + uy zzw mul ux zzh mul sub + rlineto + } bind for + }{ %else + pop + ux l mul uy l mul rlineto + } ifelse + stroke + end +} bind def /bracket_traject { @@ -263,3 +387,4 @@ stroke } bind def +%end music-drawing-routines.ps