]> git.donarmstrong.com Git - lilypond.git/blobdiff - ps/music-drawing-routines.ps
*** empty log message ***
[lilypond.git] / ps / music-drawing-routines.ps
index 154fa206c0effa5275f6ca9deab6324ea1cc1d61..25b3f2db7b1503916e6390be800114325952b249 100644 (file)
-%!PS-Adobe-1.0: lily.ps 
+%!PS-Adobe-1.0: music-drawing-routines.ps
 %
 % Functions for direct and embedded PostScript
 
-% round cappings 
-1 setlinecap
+
+/set_tex_dimen {
+       cvr def     
+} bind def
+
+
 
 /euclidean_length  
 { 
        1 copy mul exch 1 copy mul add sqrt 
 } bind def 
 
-/draw_beam % width slope thick 
-{ 
-        2 div /beam_thick exch def 
-        /beam_slope exch def 
-        /beam_wd exch def 
-        beam_slope beam_wd mul /beam_ht exch def 
-        0 beam_thick neg moveto  
-        beam_wd beam_ht rlineto  
-        0 beam_thick 2 mul rlineto 
-        0 beam_thick lineto 
-        closepath fill 
-} bind def 
+% FIXME.  translate to middle of box.
+% Nice rectangle with rounded corners
+/draw_box % breapth width depth height
+{
+%      currentdict /testing known {
+               %% real thin lines for testing
+               /blot 0.005 def
+%      }{
+%              /blot blot-diameter def
+%      } ifelse
 
-/draw_repeat_slash % width slope thick
+       0 setlinecap
+       blot setlinewidth
+       1 setlinejoin
+
+       blot 2 div sub /h exch def
+       blot 2 div sub /d exch def
+       blot 2 div sub /w exch def
+       blot 2 div sub /b exch def
+
+       b neg d neg moveto
+       b w add 0 rlineto
+       0 d h add rlineto
+       b w add neg 0 rlineto
+       0 d h add neg rlineto
+
+       currentdict /testing known {
+               %% outline only, for testing:
+               stroke
+       }{
+               closepath gsave stroke grestore fill
+       } ifelse
+} bind def
+
+
+/draw_symmetric_x_triangle % h w th
 {
-  /beamthick exch def
-  /slope exch def
-  /width exch def
-  beamthick beamthick slope div euclidean_length
-    /xwid exch def 
-  0 0 moveto
-  xwid 0  rlineto
-  width slope width mul rlineto
-  xwid neg 0 rlineto
-%  width neg width angle sin mul neg rlineto
-  closepath fill
+    setlinewidth
+    0 0 moveto
+    dup 0 lineto
+    2 div 
+    exch lineto
+    0 0 lineto
+    stroke
 } bind def
 
-/draw_hairpin % width start_h end_h thick
+/draw_round_box % breapth width depth height blot
 {
-  setlinewidth
-  /end_h exch def 
-  /start_h exch def
-  /wid exch def
-  0 start_h moveto
-  wid end_h lineto
-  stroke
-  0 start_h neg moveto
-  wid end_h neg lineto
-  stroke
+       /blot exch def
+
+       0 setlinecap
+       blot setlinewidth
+       1 setlinejoin
+
+       blot 2 div sub /h exch def
+       blot 2 div sub /d exch def
+       blot 2 div sub /w exch def
+       blot 2 div sub /b exch def
+
+       b neg d neg moveto
+       b w add 0 rlineto
+       0 d h add rlineto
+       b w add neg 0 rlineto
+       0 d h add neg rlineto
+
+       currentdict /testing known {
+               %% outline only, for testing:
+               stroke
+       }{
+               closepath gsave stroke grestore fill
+       } ifelse
 } bind def
 
-/draw_tuplet % height gap dx dy thick dir 
-{ 
-       /dir exch def 
-       setlinewidth 
-       1 setlinecap 
-       1 setlinejoin 
-       /tuplet_dy exch def 
-       /tuplet_dx exch def 
-       /tuplet_gapx exch def 
-       /tuplet_h exch def 
-       tuplet_dy tuplet_dx div tuplet_gapx mul /tuplet_gapy exch def 
-
-
-       0 0 moveto 
-       0 tuplet_h dir mul lineto  
-       tuplet_dx tuplet_gapx sub 2 div  
-               tuplet_dy tuplet_gapy sub 2 div tuplet_h dir mul add lineto 
-       tuplet_dx tuplet_gapx add 2 div  
-               tuplet_dy tuplet_gapy add 2 div tuplet_h dir mul add moveto 
-       tuplet_dx tuplet_dy tuplet_h dir mul add lineto 
-       tuplet_dx tuplet_dy lineto 
-       stroke 
+% Nice beam with rounded corners
+/draw_beam % slope width thick  blot
+{
+       /blot exch def 
+       blot setlinewidth
+
+       0 setlinecap
+       1 setlinejoin
+
+       blot sub /t exch def
+       blot sub /w exch def
+       w mul /h exch def
+
+       blot 2 div t 2 div neg moveto
+       w h rlineto
+       0 t rlineto
+       w neg h neg rlineto
+       0 t neg rlineto
+
+       currentdict /testing known {
+               %% outline only, for testing:
+               stroke
+       }{
+               closepath gsave stroke grestore fill
+       } ifelse
 } bind def 
 
-/difficult_draw_ez_ball % ch letter_col ball_col font
+/draw_polygon % x(n) y(n) x(n-1) y(n-1) ... x(1) y(1) n blot
+{
+       /blot exch def
+
+       0 setlinecap
+       blot setlinewidth
+       1 setlinejoin
+
+       /points exch def
+       2 copy
+       moveto
+       1 1 points {pop lineto} for
+       currentdict /testing known {
+               %% outline only, for testing:
+               stroke
+       }{
+               closepath gsave stroke grestore fill
+       } ifelse
+} bind def
+
+/draw_repeat_slash % width slope thick
+{
+       1 setlinecap
+       1 setlinejoin
+
+       /beamthick exch def
+       /slope exch def
+       /width exch def
+       beamthick beamthick slope div euclidean_length
+         /xwid exch def 
+       0 0 moveto
+       xwid 0  rlineto
+       width slope width mul rlineto
+       xwid neg 0 rlineto
+      %  width neg width angle sin mul neg rlineto
+       closepath fill
+} bind def
+
+
+/draw_ez_ball % ch letter_col ball_col font
 {
        % font
        findfont 0.7 scalefont setfont 
 } bind def
 
 % Simple, but does it work everywhere?
+% Han-Wen reports that one printer (brand?) at cs.uu.nl chokes on this,
+% reverted for now -- jcn
+%
 % The filled circles are drawn by setting the linewidth
-% to 2*radius and drawing a point.  Is that (defined to be)
-% a nice filled circle?
-/draw_ez_ball % ch letter_col ball_col font
+% to 2*radius and drawing a point.
+/simple_draw_ez_ball % ch letter_col ball_col font
 {
        % font
        findfont 0.85 scalefont setfont
        show
 } bind def
 
-/draw_volta % h w thick vert_start vert_end 
-{ 
-       /vert_end exch def 
-       /vert_start exch def 
-       setlinewidth 
-       /volta_w exch def 
-       /volta_h exch def 
-       1 setlinecap 
-       1 setlinejoin 
-       vert_start 0 eq { 
-               0 0 moveto 
-               0 volta_h lineto 
-       } if 
-       0 volta_h moveto 
-       volta_w volta_h lineto 
-       vert_end 0 eq { 
-               volta_w 0 lineto 
-       } if 
-       stroke 
-} bind def 
-
 % this is for drawing slurs. 
 /draw_bezier_sandwich  % thickness controls 
-{ 
+{
+    % round ending and round beginning
+    1 setlinejoin 1 setlinecap
        setlinewidth 
        moveto 
        curveto 
        lineto 
-       curveto 
+       curveto
+       closepath
        gsave 
        fill 
        grestore 
        stroke 
 } bind def 
 
+/draw_dot % x1 y2 R
+{
+%      0 360 arc fill stroke
+       0 360 arc closepath fill stroke
+} bind def
+
+/draw_white_dot % x1 y2 R
+{
+%      0 360 arc fill stroke
+       0 360 arc closepath % fill stroke 
+gsave
+ 1 setgray fill 
+grestore 
+%      0 360 arc closepath % fill stroke 
+  0.05 setlinewidth 0 setgray stroke
+} bind def
+
 /draw_dashed_line % dash thickness dx dy
 { 
        1 setlinecap 
 } bind def 
 
 
+% a b c d subvec  ==  a-c b-d
+/subvec {
+  3 2 roll exch sub
+  3 1 roll
+  sub exch
+} bind def
+
+
+% centre? zzwidth zzheight thickness x0 y0 x1 y1
+/draw_zigzag_line {
+  newpath
+  6 dict begin
+  4 2 roll % zzuw zzh th x1 y1 x0 y0
+  2 copy
+  moveto
+  subvec % zzuw zzh th dx dy
+
+  2 copy euclidean_length /l exch def
+  l div /uy exch def
+  l div /ux exch def
+  setlinewidth
+  /zzh exch def
+  l exch div round /n exch def
+  n 0 gt { %if
+      /zzw l n 2 mul div def
+      {
+         uy zzh mul 2 div ux zzh mul -2 div rmoveto
+      } if
+      1 1 n {
+         ux zzw mul uy zzh mul sub
+         uy zzw mul ux zzh mul add
+         rlineto
+         ux zzw mul uy zzh mul add
+         uy zzw mul ux zzh mul sub
+         rlineto
+      } bind for
+  }{ %else
+      pop
+      ux l mul uy l mul rlineto
+  } ifelse
+  stroke
+ end
+} bind def
 
 /bracket_traject 
 { 
        stroke 
 } bind def 
 
+%end music-drawing-routines.ps