1 %!PS-Adobe-1.0: music-drawing-routines.ps
3 % Functions for direct and embedded PostScript
6 %% TODO: use dicts or prefixes to prevent namespace pollution.
9 {pop} {userdict /pdfmark /cleartomark load put} ifelse
11 % from adobe tech note 5002.
13 /b4_Inc_state save def % Save state for cleanup
14 /dict_count countdictstack def % Count objects on dict stack
15 /op_count count 1 sub def % Count objects on operand stack
16 userdict begin % Push userdict on dict stack
17 /showpage { } def % Redefine showpage, { } = null proc
18 0 setgray 0 setlinecap % Prepare graphics state
19 1 setlinewidth 0 setlinejoin
20 10 setmiterlimit [ ] 0 setdash newpath
21 /languagelevel where % If level not equal to 1 then
22 {pop languagelevel % set strokeadjust and
23 1 ne % overprint to their defaults.
24 {false setstrokeadjust false setoverprint
31 count op_count sub {pop} repeat % Clean up stacks
32 countdictstack dict_count sub {end} repeat
45 /Rect [ llx lly urx ury ]
68 1 copy mul exch 1 copy mul add sqrt
71 % FIXME. translate to middle of box.
72 % Nice rectangle with rounded corners
73 /draw_box % breapth width depth height
75 % currentdict /testing known {
76 %% real thin lines for testing
79 % /blot blot-diameter def
86 blot 2 div sub /h exch def
87 blot 2 div sub /d exch def
88 blot 2 div sub /w exch def
89 blot 2 div sub /b exch def
97 currentdict /testing known {
98 %% outline only, for testing:
101 closepath gsave stroke grestore fill
106 /draw_round_box % breapth width depth height blot
114 blot 2 div sub /h exch def
115 blot 2 div sub /d exch def
116 blot 2 div sub /w exch def
117 blot 2 div sub /b exch def
122 b w add neg 0 rlineto
123 0 d h add neg rlineto
125 currentdict /testing known {
126 %% outline only, for testing:
129 closepath gsave stroke grestore fill
133 % Nice beam with rounded corners
134 /draw_beam % slope width thick blot
146 blot 2 div t 2 div neg moveto
152 currentdict /testing known {
153 %% outline only, for testing:
156 closepath gsave stroke grestore fill
160 /draw_polygon % x(n) y(n) x(n-1) y(n-1) ... x(1) y(1) n blot fill
172 1 1 points { pop lineto } for
175 gsave stroke grestore fill
181 /draw_repeat_slash % width slope thick
189 beamthick beamthick slope div euclidean_length
193 width slope width mul rlineto
195 % width neg width angle sin mul neg rlineto
199 % this is for drawing slurs.
200 /draw_bezier_sandwich % thickness controls
202 % round ending and round beginning
203 1 setlinejoin 1 setlinecap
218 % 0 360 arc fill stroke
219 0 360 arc closepath fill stroke
229 gsave stroke grestore
235 /draw_dashed_line % dash thickness dx dy
246 /draw_dashed_slur % dash thickness controls
259 %end music-drawing-routines.ps