-%!PS-Adobe-1.0: music-drawing-routines.ps
+%!PS-Adobe-2.0
%
% Functions for direct and embedded PostScript
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
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
/draw_round_box % width height x y blot
{
- dup
- 0.0 gt {
- setlinewidth % w h x y
+ 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
-
- 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
+ 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
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
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
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
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
{
setlinewidth % dx dy x1 y1
1 setlinecap
- 1 setlinejoin
rmoveto % dx dy
rlineto
stroke
/draw_dashed_line % dx dy thickness dashpattern offset draw_dashed_line
{
1 setlinecap
- 1 setlinejoin
setdash % dx dy thickness
setlinewidth %dx dy
rlineto
[] 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
{
{