]> git.donarmstrong.com Git - lilypond.git/blobdiff - ps/music-drawing-routines.ps
Build: end directories in their bare names and avoid some double slashes in logs.
[lilypond.git] / ps / music-drawing-routines.ps
index c3ebbaa60a95b3f26247ee6a67aeefd6e55e91d3..ccaf6b3dcc55195fcfe5fc0172f3300801108653 100644 (file)
@@ -7,40 +7,14 @@
 
 % TODO: use dicts or prefixes to prevent namespace pollution.
 
-% Emulation code from Postscript Language Reference.
-
-/*SF
-{
-       exch findfont exch
-       dup type /arraytype eq
-               {makefont}
-               {scalefont}
-       ifelse
-       setfont
-} bind def
-
-/languagelevel where
-       {pop languagelevel}
-       {1}
-ifelse
-
-2 lt
-       { /selectfont /*SF load def }
-if
-
-% end emulation code
-
 /pdfmark where
 {pop} {userdict /pdfmark /cleartomark load put} ifelse
 
 
 % llx lly urx ury URI
 /mark_URI
-% It's possible to eliminate the coordinate variables by doing [ /Rect [ 7 3
-% roll.  That is, however, kind of ugly.  It would be nice if this procedure
-% were only included when PDF marks are enabled.
 {
-    /command exch def
+    /uri exch def
     /ury exch def
     /urx exch def
     /lly exch def
@@ -53,7 +27,7 @@ if
         /Action
            <<
                /Subtype /URI
-               /URI command
+               /URI uri
            >>
         /Subtype /Link
     /ANN
@@ -61,7 +35,7 @@ if
 }
 bind def
 
-% from adobe tech note 5002. 
+% 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
@@ -83,34 +57,8 @@ bind def
   count op_count sub {pop} repeat % Clean up stacks
   countdictstack dict_count sub {end} repeat
   b4_Inc_state restore
-} bind def 
-
-
-%<font> <encoding> <name> reencode-font
-/reencode-font
-{
-    /name exch def
-    /encoding exch def
-    dup length
-    dict begin {
-       1 index /FID ne {def} {pop
-       pop} ifelse
-    }
-    forall
-    /Encoding encoding
-    def currentdict
-    end
-    name exch definefont
-} bind def
-
-
-
-/set_tex_dimen
-{
-       cvr def
 } bind def
 
-
 /stroke_and_fill {
        gsave
                stroke
@@ -155,7 +103,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
        }{
@@ -175,13 +123,17 @@ bind def
        closepath fill
 } bind def
 
-% this is for drawing slurs.
-/draw_bezier_sandwich  % thickness controls
+% this is for drawing slurs and barre-indicators.
+/draw_bezier_sandwich  % x5 y5 x6 y6 x7 y7
+                       % x4 y4
+                       % x1 y1 x2 y2 x3 y3
+                       % x0 y0
+                       % linewidth draw_bezier_sandwich
 {
        gsave
        currentpoint translate
-    % round ending and round beginning
-    1 setlinejoin 1 setlinecap
+        % round ending and round beginning
+        1 setlinejoin 1 setlinecap
        setlinewidth
        moveto
        curveto
@@ -207,11 +159,78 @@ 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_oval % filled? x-radius y-radius thickness draw_ellipse
+{
+  setlinewidth % f? x-r y-r
+  /yrad exch def
+  /xrad exch def
+  xrad 0 rmoveto
+  0 yrad -2 xrad mul dup yrad exch 0 rcurveto
+  0 yrad neg dup 2 xrad mul dup 3 1 roll 0 rcurveto
+  closepath
+      { 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
 {
@@ -223,7 +242,7 @@ bind def
        stroke
 } bind def
 
-/draw_dashed_line % dx dy thickness dashpattern draw_dashed_line
+/draw_dashed_line % dx dy thickness dashpattern offset draw_dashed_line
 {
        1 setlinecap
        1 setlinejoin
@@ -242,20 +261,23 @@ gsave
        1 setlinejoin
        setdash
        setlinewidth
+       8 2 roll
        moveto
        curveto
        stroke
 grestore
 } bind def
 
-/print_glyphs % dx dy glyph print_glyphs
+/print_glyphs % 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