]> git.donarmstrong.com Git - lilypond.git/blobdiff - ps/music-drawing-routines.ps
new file. Invoke different
[lilypond.git] / ps / music-drawing-routines.ps
index 8a64dcf6eb0936c05bb69a951e4c4f4aecbc64ea..36d16ce38301e7a939639fa90a6ffa4cf8e2fd02 100644 (file)
@@ -2,29 +2,56 @@
 %
 % Functions for direct and embedded PostScript
 
-/blot-diameter { lilypondpaperblotdiameter } bind def
+
+/pdfmark where
+{pop} {userdict /pdfmark /cleartomark load put} ifelse
+
+
+% llx lly urx ury command
+/mark_file_line
+{
+    /command exch def
+    /ury exch def
+    /urx exch def
+    /lly exch def
+    /llx exch def
+    [
+       /Rect [ llx lly urx ury ]
+       /Border [ 0 0 0 0 ]
+%      /Action /Launch
+%      /File command
+       /Action <<
+           /Subtype /URI
+           /URI command
+       >>
+    
+        /Subtype /Link
+    /ANN
+    pdfmark
+}
+bind def
 
 /set_tex_dimen {
-       cvr def     
+       cvr def
 } bind def
 
-/euclidean_length  
-{ 
-       1 copy mul exch 1 copy mul add sqrt 
-} bind def 
+
+
+/euclidean_length
+{
+       1 copy mul exch 1 copy mul add sqrt
+} bind def
 
 % FIXME.  translate to middle of box.
 % Nice rectangle with rounded corners
-% FIXME: linewidth hardcoded.  check: too round?
 /draw_box % breapth width depth height
 {
-       %% FIXME: hardcoded
-       currentdict /testing known {
+%      currentdict /testing known {
                %% real thin lines for testing
                /blot 0.005 def
-       }{
-               /blot blot-diameter def
-       } ifelse
+%      }{
+%              /blot blot-diameter def
+%      } ifelse
 
        0 setlinecap
        blot setlinewidth
 
        blot 2 div sub /h exch def
        blot 2 div sub /d exch def
-
-       %% UGH huh?
-       %% Where does this correction come from?
-       %% Why don't we need this in x direction?
-       h blot 2 div sub /h exch def
-       d blot 2 div sub /d exch def
-
        blot 2 div sub /w exch def
        blot 2 div sub /b exch def
 
        } ifelse
 } bind def
 
-% Nice beam with rounded corners
-% FIXME: linewidth hardcoded.  check: too round?
-/draw_beam % slope width thick 
+
+/draw_round_box % breapth width depth height blot
 {
-       %% FIXME: hardcoded
+       /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 {
-               %% real thin lines for testing
-               /blot 0.005 def
+               %% outline only, for testing:
+               stroke
        }{
-               /blot blot-diameter def
+               closepath gsave stroke grestore fill
        } ifelse
+} bind def
+
+% Nice beam with rounded corners
+/draw_beam % slope width thick  blot
+{
+       /blot exch def
        blot setlinewidth
 
        0 setlinecap
        1 setlinejoin
 
-       blot 2 mul sub /t exch def
-       blot 2 mul sub /w exch def
+       blot sub /t exch def
+       blot sub /w exch def
        w mul /h exch def
 
-       blot t 2 div neg moveto
+       blot 2 div t 2 div neg moveto
        w h rlineto
        0 t rlineto
        w neg h neg rlineto
        }{
                closepath gsave stroke grestore fill
        } ifelse
-} bind def 
+} bind def
+
+/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
 {
        /slope exch def
        /width exch def
        beamthick beamthick slope div euclidean_length
-         /xwid exch def 
+         /xwid exch def
        0 0 moveto
        xwid 0  rlineto
        width slope width mul rlineto
        closepath fill
 } bind def
 
-/draw_hairpin % width start_h end_h thick
-{
-       1 setlinecap
-       1 setlinejoin
 
-       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
+/draw_white_text  % text scale font
+{
+  %font
+  findfont
+  %scale
+  exch scalefont setfont
+  1 setgray
+  0 0 moveto
+  %-0.05 -0.05 moveto
+  % text
+  show
 } bind def
 
-/draw_tuplet % height gap dx dy thick dir 
-{ 
-       1 setlinecap 
-       1 setlinejoin 
-
-       /dir exch def 
-       setlinewidth 
-       /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 tuplet_h neg dir mul moveto 
-       0 0 lineto  
-       tuplet_dx tuplet_gapx sub 2 div  
-               tuplet_dy tuplet_gapy sub 2 div  lineto 
-       tuplet_dx tuplet_gapx add 2 div  
-               tuplet_dy tuplet_gapy add 2 div  moveto 
-       tuplet_dx tuplet_dy lineto 
-       tuplet_dx tuplet_dy tuplet_h dir neg mul add lineto 
-       stroke 
-} bind def 
-
 /draw_ez_ball % ch letter_col ball_col font
 {
        % font
-       findfont 0.7 scalefont setfont 
+       findfont 0.7 scalefont setfont
        0.1 setlinewidth
        0 0 moveto
        0 setgray
                1 setgray
                0.5 0 0.4 0 360 arc closepath
                fill stroke
-       } if 
+       } if
        % letter_col
        setgray
        % 0.25 is empiric centering. Change to taste
        show
 } bind def
 
-/draw_volta % h w thick vert_start vert_end 
-{ 
-       1 setlinecap 
-       1 setlinejoin 
-
-       /vert_end exch def 
-       /vert_start exch def 
-       setlinewidth 
-       /volta_w exch def 
-       /volta_h exch def 
-       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 
-{ 
-       setlinewidth 
-       moveto 
-       curveto 
-       lineto 
-       curveto 
-       gsave 
-       fill 
-       grestore 
-       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
+       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 
-       1 setlinejoin 
-       setdash 
-       setlinewidth 
+{
+       1 setlinecap
+       1 setlinejoin
+       setdash
+       setlinewidth
        0 0 moveto
        lineto
-       stroke 
-} bind def 
+       stroke
+} bind def
 
 /draw_dashed_slur % dash thickness controls
-{ 
-       1 setlinecap 
-       1 setlinejoin 
-       setdash 
-       setlinewidth 
-       8 -2 roll 
-       moveto 
-       curveto 
-       stroke 
-} bind def 
+{
+       1 setlinecap
+       1 setlinejoin
+       setdash
+       setlinewidth
+       8 -2 roll
+       moveto
+       curveto
+       stroke
+} 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 
-{ 
-       /traject_ds exch def 
-       /traject_alpha exch def 
-       traject_ds traject_alpha sin mul add 
-       exch 
-       traject_ds traject_alpha cos mul add 
-       exch 
-} bind def 
+/bracket_traject
+{
+       /traject_ds exch def
+       /traject_alpha exch def
+       traject_ds traject_alpha sin mul add
+       exch
+       traject_ds traject_alpha cos mul add
+       exch
+} bind def
 
 
 
 /half_bracket
-{ 
-%6 
-       0 0 
-%5a 
-       bracket_thick arch_height add half_height arch_thick sub arch_width add 
-       arch_angle arch_height -0.15 mul bracket_traject 
-%5b 
-       bracket_thick 0.5 mul half_height 
-       0 arch_height 0.5 mul bracket_traject 
-%5c 
-       0 half_height 
-%4a 
-       bracket_thick half_height arch_thick sub 
-       0 arch_height 0.4 mul bracket_traject 
-%4b 
-       bracket_thick arch_height add half_height arch_thick sub arch_width add 
-       arch_angle arch_height -0.25 mul bracket_traject 
-%4c 
-       bracket_thick arch_height add half_height arch_thick sub arch_width add 
-%3 
-       bracket_thick half_height arch_thick sub 
-%2 
-       bracket_thick 0 
-%1 
-       0 0 
-} bind def 
-
-/draw_half_bracket { 
-       moveto 
-       lineto 
-       lineto 
-       curveto 
-       curveto 
-       lineto 
-       gsave 
-       fill 
-       grestore 
-} bind def 
+{
+%6
+       0 0
+%5a
+       bracket_thick arch_height add half_height arch_thick sub arch_width add
+       arch_angle arch_height -0.15 mul bracket_traject
+%5b
+       bracket_thick 0.5 mul half_height
+       0 arch_height 0.5 mul bracket_traject
+%5c
+       0 half_height
+%4a
+       bracket_thick half_height arch_thick sub
+       0 arch_height 0.4 mul bracket_traject
+%4b
+       bracket_thick arch_height add half_height arch_thick sub arch_width add
+       arch_angle arch_height -0.25 mul bracket_traject
+%4c
+       bracket_thick arch_height add half_height arch_thick sub arch_width add
+%3
+       bracket_thick half_height arch_thick sub
+%2
+       bracket_thick 0
+%1
+       0 0
+} bind def
+
+/draw_half_bracket {
+       moveto
+       lineto
+       lineto
+       curveto
+       curveto
+       lineto
+       gsave
+       fill
+       grestore
+} bind def
 
 /draw_bracket % arch_angle arch_width arch_height bracket_height arch_thick bracket_thick
-{ 
+{
        % urg
 
        /bracket_thick exch def
        /arch_width exch def
        /arch_angle exch def
 
-       bracket_height 2 div bracket_thick add /half_height exch def 
+       bracket_height 2 div bracket_thick add /half_height exch def
        bracket_thick 0.5 mul setlinewidth
-       1 setlinecap 
-       1 setlinejoin 
-       half_bracket 
-       20 copy 
-       1 -1 scale 
-       draw_half_bracket 
-       stroke 
-       1 -1 scale 
-       draw_half_bracket 
-       stroke 
-} bind def 
+       1 setlinecap
+       1 setlinejoin
+       half_bracket
+       20 copy
+       1 -1 scale
+       draw_half_bracket
+       stroke
+       1 -1 scale
+       draw_half_bracket
+       stroke
+} bind def
 
+%end music-drawing-routines.ps