]> git.donarmstrong.com Git - lilypond.git/blobdiff - ps/music-drawing-routines.ps
Make music-drawing-routines.ps require PostScript 2.0
[lilypond.git] / ps / music-drawing-routines.ps
index 713d997f37b739e7f71bdbe888c57ea860bee483..d04d52aeef5f82188b4ead75375711eb185b7396 100644 (file)
@@ -1,4 +1,4 @@
-%!PS-Adobe-1.0: music-drawing-routines.ps
+%!PS-Adobe-2.0
 %
 % Functions for direct and embedded PostScript
 
 }
 bind def
 
-% from adobe tech note 5002. 
+% llx lly urx ury page
+/mark_page_link
+{
+    /page exch def
+    /ury exch def
+    /urx exch def
+    /lly exch def
+    /llx exch def
+    [
+        /Rect [ llx lly urx ury ]
+        /Border [ 0 0 0 ]
+        /Page page
+        /Subtype /Link
+    /ANN
+    pdfmark
+}
+bind def
+
+% from adobe tech note 5002.
 /BeginEPSF { %def
     /b4_Inc_state save def % Save state for cleanup
     /dict_count countdictstack def % Count objects on dict stack
@@ -45,23 +63,13 @@ bind def
     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 setstrokeadjust false setoverprint
 } bind def
 
 /EndEPSF { %def
   count op_count sub {pop} repeat % Clean up stacks
   countdictstack dict_count sub {end} repeat
   b4_Inc_state restore
-} bind def 
-
-/set_tex_dimen
-{
-       cvr def
 } bind def
 
 /stroke_and_fill {
@@ -82,16 +90,30 @@ bind def
 
 /draw_round_box % width height x y blot
 {
-       setlinewidth % w h x y
-       0 setlinecap
-       1 setlinejoin
-
-       rmoveto % w h
-       currentpoint % w h x1 y1
-       4 2 roll % x1 y1 w h
-       4 copy
-       rectfill
-       rectstroke
+        dup
+       0.0 gt {
+               setlinewidth % w h x y
+               rmoveto % w h
+               2 copy 0 ne exch 0 ne and
+               {
+                   0 setlinecap
+                   1 setlinejoin
+                   currentpoint % w h x1 y1
+                   4 2 roll % x1 y1 w h
+                   4 copy
+                   rectfill
+                   rectstroke
+               } {
+                   1 setlinecap
+                   rlineto stroke
+               } ifelse
+       } {
+               pop % w h x y
+               rmoveto % w h
+               currentpoint % w h x1 y1
+               4 2 roll % x1 y1 w h
+               rectfill
+       } ifelse
 } bind def
 
 /draw_polygon % fill? x(n) y(n) x(n-1) y(n-1) ... x(0) y(0) n blot
@@ -108,7 +130,7 @@ bind def
        def
        rmoveto % x(0) y(0)
        { polygon_x polygon_y vector_add lineto } repeat % n times
-       closepath 
+       closepath
        { %fill?
                stroke_and_fill
        }{
@@ -116,43 +138,6 @@ bind def
        } 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.
-/draw_bezier_sandwich  % thickness controls
-{
-       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
-} bind def
-
 /draw_circle % filled? radius thickness draw_circle
 {
        setlinewidth    % f? r
@@ -160,11 +145,64 @@ bind def
        3 2 roll        % f? x0 y0 r
        dup 0 rmoveto
        0 360 arc closepath
-               { stroke_and_fill } 
+               { stroke_and_fill }
                { stroke }
        ifelse
 } bind def
 
+/draw_ellipse % filled? x-radius y-radius thickness draw_ellipse
+{
+  setlinewidth % f? x-r y-r
+  /savematrix matrix currentmatrix def
+  scale % f?
+  currentpoint
+  1 0 rmoveto
+  1 0 360  arc closepath
+  savematrix setmatrix
+             { stroke_and_fill}
+             { stroke }
+  ifelse
+} bind def
+
+/draw_partial_ellipse % filled connect x-radius y-radius startangle endangle thickness draw_partial_ellipse
+% Note that filled is not boolean to permit for different graylevels (ie for trill keys)
+{
+  gsave
+  currentpoint translate
+  /thickness exch def
+  /endangle exch def
+  /startangle exch def
+  /y_radius exch def
+  /x_radius exch def
+  /endrad x_radius y_radius mul
+    x_radius x_radius mul
+    endangle cos endangle cos mul mul
+    y_radius y_radius mul
+    endangle sin endangle sin mul mul add sqrt div def
+  /endangle endangle sin endrad mul y_radius div
+    endangle cos endrad mul x_radius div atan def
+  /startrad x_radius y_radius mul
+    x_radius x_radius mul
+      startangle cos startangle cos mul mul
+    y_radius y_radius mul
+      startangle sin startangle sin mul mul add sqrt div def
+  /startangle startangle sin startrad mul y_radius div
+    startangle cos startrad mul x_radius div atan def
+  /connect exch def
+  /filled exch def
+  /savematrix matrix currentmatrix def
+  thickness setlinewidth
+  x_radius y_radius scale
+  startangle cos startangle sin moveto
+  0 0 1 startangle
+    startangle endangle eq { endangle 360 add } { endangle } ifelse
+    arc
+  connect {
+    startangle cos startangle sin moveto endangle cos endangle sin lineto }
+    if
+  savematrix setmatrix filled { stroke_and_fill } { stroke } ifelse
+  grestore
+} bind def
 
 /draw_line % dx dy x1 y1 thickness draw_line
 {
@@ -187,29 +225,16 @@ bind def
        [] 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 % dx dy glyph print_glyphs
+/print_glyphs % w dx dy glyph print_glyphs
 {
        {
-               currentpoint %dx dy glyph x0 y0
-               3 2 roll %dx dy x0 y0 glyph
-               glyphshow % dx dy x0 y0
-               moveto % dx dy
-               rmoveto
+               currentpoint %w dx dy glyph x0 y0
+               5 2 roll %w x0 y0 dx dy glyph
+               3 1 roll %w x0 y0 glyph dx dy
+               rmoveto %w x0 y0 glyph
+               glyphshow %w x0 y0
+               moveto %w
+               0 rmoveto
        }repeat
 }bind def
 %end music-drawing-routines.ps