X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ps%2Fmusic-drawing-routines.ps;h=03df7c03cb7735e5f8f4746983e19384cb85ea19;hb=b872748c6aa8bb721ced458691b38ac2fac5dfc8;hp=ccaf6b3dcc55195fcfe5fc0172f3300801108653;hpb=8a104f4a3f020c9fcd6ebbb1c9c4cf88f1020371;p=lilypond.git diff --git a/ps/music-drawing-routines.ps b/ps/music-drawing-routines.ps index ccaf6b3dcc..03df7c03cb 100644 --- a/ps/music-drawing-routines.ps +++ b/ps/music-drawing-routines.ps @@ -1,4 +1,4 @@ -%!PS-Adobe-1.0: music-drawing-routines.ps +%!PS-Adobe-2.0 % % Functions for direct and embedded PostScript @@ -35,6 +35,24 @@ } bind def +% llx lly urx ury page +/mark_page_link +{ + /page exch def + /ury exch def + /urx exch def + /lly exch def + /llx exch def + [ + /Rect [ llx lly urx ury ] + /Border [ 0 0 0 ] + /Page page + /Subtype /Link + /ANN + pdfmark +} +bind def + % from adobe tech note 5002. /BeginEPSF { %def /b4_Inc_state save def % Save state for cleanup @@ -45,12 +63,7 @@ bind def 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 + false setoverprint } bind def /EndEPSF { %def @@ -59,11 +72,18 @@ bind def b4_Inc_state restore } bind def -/stroke_and_fill { +/stroke_and_fill? { + { gsave - stroke + false setstrokeadjust + stroke grestore fill + } + { + stroke + } + ifelse } bind def /vector_add { % x1 y1 x2 y2 vector_add x1+x2 y1+y2 @@ -77,16 +97,104 @@ bind def /draw_round_box % width height x y blot { - setlinewidth % w h x y - 0 setlinecap - 1 setlinejoin - - rmoveto % w h - currentpoint % w h x1 y1 - 4 2 roll % x1 y1 w h - 4 copy - rectfill - rectstroke + 0 max setlinewidth + matrix currentmatrix 5 1 roll + currentpoint translate newpath translate + 2 copy 0 min exch 0 min exch translate + abs exch abs exch + currentlinewidth 0 eq + { % straight corners + 2 copy 2 mul gt + { % horizontal + 0 1 index 2 div moveto + setlinewidth + 0 rlineto + 0 setlinecap + stroke + } + { + 2 copy exch 2 mul gt + { % vertical + 1 index 2 div 0 moveto + exch setlinewidth + 0 exch rlineto + 0 setlinecap + stroke + } + { + 0 0 4 2 roll rectfill + } + ifelse + } + ifelse + } + { % rounded corners + 2 copy 0 eq exch 0 eq or + { % line shape + 0 0 moveto + rlineto + 1 setlinecap + stroke + 0 setlinecap + } + { % full shape + currentstrokeadjust { + currentlinewidth 2 div + 0 0 2 index 180 270 arc + 2 index 0 2 index 270 360 arc + 3 copy 0 90 arc + 0 2 index 3 -1 roll 90 180 arc + closepath + 2 copy 2 mul gt + { % horizontal + 2 copy add currentlinewidth add 10 add % large enough + 0 1 index neg moveto + 2 index 1 index neg lineto + 2 index 1 index lineto + 0 exch lineto closepath + gsave clip newpath + 0 1 index 2 div moveto + currentlinewidth add setlinewidth + 0 rlineto + 2 setlinecap + stroke + grestore + } + { + 2 copy exch 2 mul gt + { % vertical + 2 copy add currentlinewidth add 10 add % large enough + dup neg 0 moveto + dup 0 lineto + dup 2 index lineto + neg 1 index lineto closepath + gsave clip newpath + 1 index 2 div 0 moveto + exch currentlinewidth add setlinewidth + 0 exch rlineto + 2 setlinecap + stroke + grestore + } + { + pop pop + fill + } + ifelse + } + ifelse + newpath + } + { + 1 setlinejoin + 0 0 4 2 roll 4 copy rectstroke rectfill + } + ifelse + } + ifelse + } + ifelse + setmatrix } bind def /draw_polygon % fill? x(n) y(n) x(n-1) y(n-1) ... x(0) y(0) n blot @@ -104,52 +212,7 @@ bind def rmoveto % x(0) y(0) { polygon_x polygon_y vector_add lineto } repeat % n times closepath - { %fill? - stroke_and_fill - }{ - stroke - } ifelse -} bind def - -/draw_repeat_slash % x-width width height draw_repeat_slash -{ - 2 index % duplicate x-width - 1 setlinecap - 1 setlinejoin - - 0 rlineto % x-width 0 - rlineto % width height - neg 0 rlineto % -x-width 0 - closepath fill -} bind def - -% this is for drawing slurs and barre-indicators. -/draw_bezier_sandwich % x5 y5 x6 y6 x7 y7 - % x4 y4 - % x1 y1 x2 y2 x3 y3 - % x0 y0 - % linewidth draw_bezier_sandwich -{ - gsave - currentpoint translate - % round ending and round beginning - 1 setlinejoin 1 setlinecap - setlinewidth - moveto - curveto - lineto - curveto - closepath - stroke_and_fill - grestore -} bind def - -/draw_dot % radius x y draw_dot -{ - rmoveto - currentpoint - 3 2 roll - 0 360 arc closepath stroke_and_fill + stroke_and_fill? } bind def /draw_circle % filled? radius thickness draw_circle @@ -159,23 +222,7 @@ bind def 3 2 roll % f? x0 y0 r dup 0 rmoveto 0 360 arc closepath - { stroke_and_fill } - { stroke } - ifelse -} bind def - -/draw_oval % filled? x-radius y-radius thickness draw_ellipse -{ - setlinewidth % f? x-r y-r - /yrad exch def - /xrad exch def - xrad 0 rmoveto - 0 yrad -2 xrad mul dup yrad exch 0 rcurveto - 0 yrad neg dup 2 xrad mul dup 3 1 roll 0 rcurveto - closepath - { stroke_and_fill} - { stroke } - ifelse + stroke_and_fill? } bind def /draw_ellipse % filled? x-radius y-radius thickness draw_ellipse @@ -187,9 +234,7 @@ bind def 1 0 rmoveto 1 0 360 arc closepath savematrix setmatrix - { stroke_and_fill} - { stroke } - ifelse + stroke_and_fill? } bind def /draw_partial_ellipse % filled connect x-radius y-radius startangle endangle thickness draw_partial_ellipse @@ -228,7 +273,7 @@ bind def connect { startangle cos startangle sin moveto endangle cos endangle sin lineto } if - savematrix setmatrix filled { stroke_and_fill } { stroke } ifelse + savematrix setmatrix filled stroke_and_fill? grestore } bind def @@ -236,7 +281,6 @@ bind def { setlinewidth % dx dy x1 y1 1 setlinecap - 1 setlinejoin rmoveto % dx dy rlineto stroke @@ -245,7 +289,6 @@ bind def /draw_dashed_line % dx dy thickness dashpattern offset draw_dashed_line { 1 setlinecap - 1 setlinejoin setdash % dx dy thickness setlinewidth %dx dy rlineto @@ -253,21 +296,6 @@ bind def [] 0 setdash % reset dash pattern } bind def -/draw_dashed_slur % controls thickness dash -{ -gsave - currentpoint translate - 1 setlinecap - 1 setlinejoin - setdash - setlinewidth - 8 2 roll - moveto - curveto - stroke -grestore -} bind def - /print_glyphs % w dx dy glyph print_glyphs { {