X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ps%2Fmusic-drawing-routines.ps;h=06c13648738254d3b5f60438eed59655a1c92a94;hb=d0c96d3f0b1dca7df98ef5586059965dd46ab16f;hp=1ceab9a64bc6efa8aa4326b541ef42974b71191b;hpb=232eaf8f934cc2b7e96ca9d87e6f24a7655dbc67;p=lilypond.git diff --git a/ps/music-drawing-routines.ps b/ps/music-drawing-routines.ps index 1ceab9a64b..06c1364873 100644 --- a/ps/music-drawing-routines.ps +++ b/ps/music-drawing-routines.ps @@ -7,40 +7,14 @@ % TODO: use dicts or prefixes to prevent namespace pollution. -% Emulation code from Postscript Language Reference. - -/*SF -{ - exch findfont exch - dup type /arraytype eq - {makefont} - {scalefont} - ifelse - setfont -} bind def - -/languagelevel where - {pop languagelevel} - {1} -ifelse - -2 lt - { /selectfont /*SF load def } -if - -% end emulation code - /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse % llx lly urx ury URI /mark_URI -% It's possible to eliminate the coordinate variables by doing [ /Rect [ 7 3 -% roll. That is, however, kind of ugly. It would be nice if this procedure -% were only included when PDF marks are enabled. { - /command exch def + /uri exch def /ury exch def /urx exch def /lly exch def @@ -53,7 +27,7 @@ if /Action << /Subtype /URI - /URI command + /URI uri >> /Subtype /Link /ANN @@ -61,7 +35,25 @@ if } bind def -% from adobe tech note 5002. +% 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 /dict_count countdictstack def % Count objects on dict stack @@ -83,34 +75,8 @@ bind def count op_count sub {pop} repeat % Clean up stacks countdictstack dict_count sub {end} repeat b4_Inc_state restore -} bind def - - -% reencode-font -/reencode-font -{ - /name exch def - /encoding exch def - dup length - dict begin { - 1 index /FID ne {def} {pop - pop} ifelse - } - forall - /Encoding encoding - def currentdict - end - name exch definefont } bind def - - -/set_tex_dimen -{ - cvr def -} bind def - - /stroke_and_fill { gsave stroke @@ -128,29 +94,27 @@ bind def } bind def /draw_round_box % width height x y blot -currentdict /testing known -{{ - setlinewidth - 0 setlinecap - 1 setlinejoin - - rmoveto - currentpoint - 4 2 roll - rectstroke -}} -{{ - setlinewidth - 0 setlinecap - 1 setlinejoin - - rmoveto - currentpoint - 4 2 roll - 4 copy - rectfill - rectstroke -}} ifelse bind def +{ + dup + 0.0 gt { + 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 + } { + pop % w h x y + rmoveto % w h + currentpoint % w h x1 y1 + 4 2 roll % x1 y1 w h + rectfill + } ifelse +} bind def /draw_polygon % fill? x(n) y(n) x(n-1) y(n-1) ... x(0) y(0) n blot { @@ -166,7 +130,7 @@ currentdict /testing known def rmoveto % x(0) y(0) { polygon_x polygon_y vector_add lineto } repeat % n times - closepath + closepath { %fill? stroke_and_fill }{ @@ -174,7 +138,7 @@ currentdict /testing known } ifelse } bind def -/draw_repeat_slash % x-width width height +/draw_repeat_slash % x-width width height draw_repeat_slash { 2 index % duplicate x-width 1 setlinecap @@ -186,13 +150,17 @@ currentdict /testing known closepath fill } bind def -% this is for drawing slurs. -/draw_bezier_sandwich % thickness controls +% 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 + % round ending and round beginning + 1 setlinejoin 1 setlinecap setlinewidth moveto curveto @@ -203,7 +171,7 @@ currentdict /testing known grestore } bind def -/draw_dot % radius x y +/draw_dot % radius x y draw_dot { rmoveto currentpoint @@ -211,36 +179,105 @@ currentdict /testing known 0 360 arc closepath stroke_and_fill } bind def -/draw_circle % F R T +/draw_circle % filled? radius thickness draw_circle { - setlinewidth + setlinewidth % f? r + currentpoint % f? r x0 y0 + 3 2 roll % f? x0 y0 r dup 0 rmoveto - currentpoint 3 2 roll 0 360 arc closepath - { stroke_and_fill } + { 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 +} bind def -/draw_line % dx dy x1 y1 thickness +/draw_ellipse % filled? x-radius y-radius thickness draw_ellipse { - setlinewidth + setlinewidth % f? x-r y-r + /savematrix matrix currentmatrix def + scale % f? + currentpoint + 1 0 rmoveto + 1 0 360 arc closepath + savematrix setmatrix + { stroke_and_fill} + { stroke } + ifelse +} bind def + +/draw_partial_ellipse % filled connect x-radius y-radius startangle endangle thickness draw_partial_ellipse +% Note that filled is not boolean to permit for different graylevels (ie for trill keys) +{ + gsave + currentpoint translate + /thickness exch def + /endangle exch def + /startangle exch def + /y_radius exch def + /x_radius exch def + /endrad x_radius y_radius mul + x_radius x_radius mul + endangle cos endangle cos mul mul + y_radius y_radius mul + endangle sin endangle sin mul mul add sqrt div def + /endangle endangle sin endrad mul y_radius div + endangle cos endrad mul x_radius div atan def + /startrad x_radius y_radius mul + x_radius x_radius mul + startangle cos startangle cos mul mul + y_radius y_radius mul + startangle sin startangle sin mul mul add sqrt div def + /startangle startangle sin startrad mul y_radius div + startangle cos startrad mul x_radius div atan def + /connect exch def + /filled exch def + /savematrix matrix currentmatrix def + thickness setlinewidth + x_radius y_radius scale + startangle cos startangle sin moveto + 0 0 1 startangle + startangle endangle eq { endangle 360 add } { endangle } ifelse + arc + connect { + startangle cos startangle sin moveto endangle cos endangle sin lineto } + if + savematrix setmatrix filled { stroke_and_fill } { stroke } ifelse + grestore +} bind def + +/draw_line % dx dy x1 y1 thickness draw_line +{ + setlinewidth % dx dy x1 y1 1 setlinecap 1 setlinejoin - rmoveto + rmoveto % dx dy rlineto stroke } bind def -/draw_dashed_line % dx dy thickness dashpattern +/draw_dashed_line % dx dy thickness dashpattern offset draw_dashed_line { 1 setlinecap 1 setlinejoin - setdash - setlinewidth + setdash % dx dy thickness + setlinewidth %dx dy rlineto stroke + [] 0 setdash % reset dash pattern } bind def /draw_dashed_slur % controls thickness dash @@ -251,19 +288,23 @@ gsave 1 setlinejoin setdash setlinewidth + 8 2 roll moveto curveto stroke grestore } bind def -/print_glyphs { +/print_glyphs % w dx dy glyph print_glyphs +{ { - currentpoint - 3 2 roll - glyphshow - moveto - rmoveto + currentpoint %w dx dy glyph x0 y0 + 5 2 roll %w x0 y0 dx dy glyph + 3 1 roll %w x0 y0 glyph dx dy + rmoveto %w x0 y0 glyph + glyphshow %w x0 y0 + moveto %w + 0 rmoveto }repeat }bind def %end music-drawing-routines.ps