X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ps%2Fmusic-drawing-routines.ps;h=a2e74c35bfc238f5f4b4fd37985bee978982c8b9;hb=54a46d3a79b960aac8f0b5eb32e117c1bacc7076;hp=dd2f6efec9fd84db33b795d5493875a2c7a5946a;hpb=b4139c2fb2ec738a17ee1157edf23e8ea56ed560;p=lilypond.git diff --git a/ps/music-drawing-routines.ps b/ps/music-drawing-routines.ps index dd2f6efec9..a2e74c35bf 100644 --- a/ps/music-drawing-routines.ps +++ b/ps/music-drawing-routines.ps @@ -3,29 +3,81 @@ % Functions for direct and embedded PostScript -/blot-diameter { lilypondpaperblotdiameter } bind def +%% TODO: use dicts or prefixes to prevent namespace pollution. + +/pdfmark where +{pop} {userdict /pdfmark /cleartomark load put} ifelse + +% from adobe tech note 5002. +/BeginEPSF { %def + /b4_Inc_state save def % Save state for cleanup + /dict_count countdictstack def % Count objects on dict stack + /op_count count 1 sub def % Count objects on operand stack + userdict begin % Push userdict on dict stack + /showpage { } def % Redefine showpage, { } = null proc + 0 setgray 0 setlinecap % Prepare graphics state + 1 setlinewidth 0 setlinejoin + 10 setmiterlimit [ ] 0 setdash newpath + /languagelevel where % If level not equal to 1 then + {pop languagelevel % set strokeadjust and + 1 ne % overprint to their defaults. + {false setstrokeadjust false setoverprint + } if + } if +} bind def + + +/EndEPSF { %def + count op_count sub {pop} repeat % Clean up stacks + countdictstack dict_count sub {end} repeat + b4_Inc_state restore +} bind def -/set_tex_dimen { - cvr def +% llx lly urx ury URI +/mark_URI +{ + /command exch def + /ury exch def + /urx exch def + /lly exch def + /llx exch def + [ + /Rect [ llx lly urx ury ] + /Border [ 0 0 0 0 ] + + /Action + << + /Subtype /URI + /URI command + >> + /Subtype /Link + /ANN + pdfmark +} +bind def + +/set_tex_dimen +{ + cvr def } bind def -/euclidean_length -{ - 1 copy mul exch 1 copy mul add sqrt -} bind def +/euclidean_length +{ + 1 copy mul exch 1 copy mul add sqrt +} bind def % FIXME. translate to middle of box. % Nice rectangle with rounded corners /draw_box % breapth width depth height { - currentdict /testing known { +% currentdict /testing known { %% real thin lines for testing /blot 0.005 def - }{ - /blot blot-diameter def - } ifelse +% }{ +% /blot blot-diameter def +% } ifelse 0 setlinecap blot setlinewidth @@ -51,17 +103,6 @@ } bind def -/draw_symmetric_x_triangle % h w th -{ - setlinewidth - 0 0 moveto - dup 0 lineto - 2 div - exch lineto - 0 0 lineto - stroke -} bind def - /draw_round_box % breapth width depth height blot { /blot exch def @@ -90,14 +131,9 @@ } bind def % Nice beam with rounded corners -/draw_beam % slope width thick +/draw_beam % slope width thick blot { - currentdict /testing known { - %% real thin lines for testing - /blot 0.005 def - }{ - /blot blot-diameter def - } ifelse + /blot exch def blot setlinewidth 0 setlinecap @@ -119,10 +155,11 @@ }{ closepath gsave stroke grestore fill } ifelse -} bind def +} bind def -/draw_polygon % x(n) y(n) x(n-1) y(n-1) ... x(1) y(1) n blot +/draw_polygon % x(n) y(n) x(n-1) y(n-1) ... x(1) y(1) n blot fill { + /fillp exch def /blot exch def 0 setlinecap @@ -132,12 +169,12 @@ /points exch def 2 copy moveto - 1 1 points {pop lineto} for - currentdict /testing known { - %% outline only, for testing: - stroke + 1 1 points { pop lineto } for + closepath + fillp { + gsave stroke grestore fill }{ - closepath gsave stroke grestore fill + stroke } ifelse } bind def @@ -150,7 +187,7 @@ /slope exch def /width exch def beamthick beamthick slope div euclidean_length - /xwid exch def + /xwid exch def 0 0 moveto xwid 0 rlineto width slope width mul rlineto @@ -160,10 +197,23 @@ } bind def +/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 + findfont 0.7 scalefont setfont 0.1 setlinewidth 0 0 moveto 0 setgray @@ -174,7 +224,7 @@ 1 setgray 0.5 0 0.4 0 360 arc closepath fill stroke - } if + } if % letter_col setgray % 0.25 is empiric centering. Change to taste @@ -212,19 +262,22 @@ show } bind def -% this is for drawing slurs. -/draw_bezier_sandwich % thickness controls -{ - setlinewidth - moveto - curveto - lineto - curveto - gsave - fill - grestore - 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 + closepath + gsave + fill + grestore + stroke +} bind def /draw_dot % x1 y2 R { @@ -232,28 +285,50 @@ 0 360 arc closepath fill stroke } bind def +/draw_circle % R T F +{ + /filled exch def + setlinewidth + dup 0 moveto + 0 exch 0 exch + 0 360 arc closepath + gsave stroke grestore + filled { fill } if +} 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 - 1 setlinejoin - setdash - setlinewidth +{ + 1 setlinecap + 1 setlinejoin + setdash + setlinewidth 0 0 moveto lineto - stroke -} bind def + stroke +} bind def /draw_dashed_slur % dash thickness controls -{ - 1 setlinecap - 1 setlinejoin - setdash - setlinewidth - 8 -2 roll - moveto - curveto - stroke -} bind def +{ + 1 setlinecap + 1 setlinejoin + setdash + setlinewidth + 8 -2 roll + moveto + curveto + stroke +} bind def % a b c d subvec == a-c b-d @@ -268,7 +343,7 @@ /draw_zigzag_line { newpath 6 dict begin - + 4 2 roll % zzuw zzh th x1 y1 x0 y0 2 copy moveto @@ -301,60 +376,60 @@ end } 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_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 +{ +%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 % arch_angle arch_width arch_height bracket_height arch_thick bracket_thick -{ +{ % urg /bracket_thick exch def @@ -364,17 +439,18 @@ /arch_width exch def /arch_angle exch def - bracket_height 2 div bracket_thick add /half_height 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 + 1 setlinecap + 1 setlinejoin + half_bracket + 20 copy + 1 -1 scale + draw_half_bracket + stroke + 1 -1 scale + draw_half_bracket + stroke +} bind def +%end music-drawing-routines.ps