1 %!PS-Adobe-1.0: music-drawing-routines.ps
3 % Functions for direct and embedded PostScript
7 1 copy mul exch 1 copy mul add sqrt
10 % FIXME. translate to middle of box.
11 % Nice rectangle with rounded corners
12 % FIXME: linewidth hardcoded. check: too round?
13 /draw_box % breapth width depth height
16 currentdict /testing known {
17 %% real thin lines for testing
27 l 2 div sub /h exch def
28 l 2 div sub /d exch def
31 %% Where does this correction come from?
32 %% Why don't we need this in x direction?
33 h l 2 div sub /h exch def
34 d l 2 div sub /d exch def
36 l 2 div sub /w exch def
37 l 2 div sub /b exch def
45 currentdict /testing known {
46 %% outline only, for testing:
49 closepath gsave stroke grestore fill
53 % Nice beam with rounded corners
54 % FIXME: linewidth hardcoded. check: too round?
55 /draw_beam % slope width thick
58 currentdict /testing known {
59 %% real thin lines for testing
73 l 2 div t 2 div neg moveto
79 currentdict /testing known {
80 %% outline only, for testing:
83 closepath gsave stroke grestore fill
87 /draw_repeat_slash % width slope thick
95 beamthick beamthick slope div euclidean_length
99 width slope width mul rlineto
101 % width neg width angle sin mul neg rlineto
105 /draw_hairpin % width start_h end_h thick
122 /draw_tuplet % height gap dx dy thick dir
131 /tuplet_gapx exch def
133 tuplet_dy tuplet_dx div tuplet_gapx mul /tuplet_gapy exch def
136 0 tuplet_h neg dir mul moveto
138 tuplet_dx tuplet_gapx sub 2 div
139 tuplet_dy tuplet_gapy sub 2 div lineto
140 tuplet_dx tuplet_gapx add 2 div
141 tuplet_dy tuplet_gapy add 2 div moveto
142 tuplet_dx tuplet_dy lineto
143 tuplet_dx tuplet_dy tuplet_h dir neg mul add lineto
147 /draw_ez_ball % ch letter_col ball_col font
150 findfont 0.7 scalefont setfont
154 0.5 0 0.5 0 360 arc closepath fill stroke
159 0.5 0 0.4 0 360 arc closepath
164 % 0.25 is empiric centering. Change to taste
170 % Simple, but does it work everywhere?
171 % Han-Wen reports that one printer (brand?) at cs.uu.nl chokes on this,
172 % reverted for now -- jcn
174 % The filled circles are drawn by setting the linewidth
175 % to 2*radius and drawing a point.
176 /simple_draw_ez_ball % ch letter_col ball_col font
179 findfont 0.85 scalefont setfont
180 /origin { 0.45 0 } def
192 % 0.25 is empiric centering. Change to taste
199 /draw_volta % h w thick vert_start vert_end
214 volta_w volta_h lineto
221 % this is for drawing slurs.
222 /draw_bezier_sandwich % thickness controls
235 /draw_dashed_line % dash thickness dx dy
246 /draw_dashed_slur % dash thickness controls
263 /traject_alpha exch def
264 traject_ds traject_alpha sin mul add
266 traject_ds traject_alpha cos mul add
277 bracket_thick arch_height add half_height arch_thick sub arch_width add
278 arch_angle arch_height -0.15 mul bracket_traject
280 bracket_thick 0.5 mul half_height
281 0 arch_height 0.5 mul bracket_traject
285 bracket_thick half_height arch_thick sub
286 0 arch_height 0.4 mul bracket_traject
288 bracket_thick arch_height add half_height arch_thick sub arch_width add
289 arch_angle arch_height -0.25 mul bracket_traject
291 bracket_thick arch_height add half_height arch_thick sub arch_width add
293 bracket_thick half_height arch_thick sub
312 /draw_bracket % arch_angle arch_width arch_height bracket_height arch_thick bracket_thick
316 /bracket_thick exch def
318 /bracket_height exch def
319 /arch_height exch def
323 bracket_height 2 div bracket_thick add /half_height exch def
324 bracket_thick 0.5 mul setlinewidth