]> git.donarmstrong.com Git - lilypond.git/blobdiff - ps/music-drawing-routines.ps
Do not generate negative dash pattern entries for small dash-periods.
[lilypond.git] / ps / music-drawing-routines.ps
index cb9c6020b39f7b5a6f4f01e93c6481e7041618a4..e263d3d29e0a5908591f199a3eaa3e515afe0dd1 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
@@ -118,18 +92,26 @@ bind def
        fill
 } bind def
 
-/draw_round_box % x y width height blot
+/vector_add { % x1 y1 x2 y2 vector_add x1+x2 y1+y2
+       exch
+       4 1 roll
+       add
+       3 1 roll
+       add
+       exch
+} bind def
+
+/draw_round_box % width height x y blot
 {
-       setlinewidth
+       setlinewidth % w h x y
        0 setlinecap
        1 setlinejoin
 
-       currentdict /testing known {
-               %% outline only, for testing:
-       }{
-               4 copy
-               rectfill
-       } ifelse
+       rmoveto % w h
+       currentpoint % w h x1 y1
+       4 2 roll % x1 y1 w h
+       4 copy
+       rectfill
        rectstroke
 } bind def
 
@@ -141,8 +123,12 @@ bind def
        1 setlinejoin
 
        3 1 roll
-       moveto % x(0) y(0)
-       { lineto } repeat % n times
+       /polygon_x
+       currentpoint
+       /polygon_y exch def
+       def
+       rmoveto % x(0) y(0)
+       { polygon_x polygon_y vector_add lineto } repeat % n times
        closepath 
        { %fill?
                stroke_and_fill
@@ -151,13 +137,12 @@ bind def
        } ifelse
 } bind def
 
-/draw_repeat_slash % x-width width height
+/draw_repeat_slash % x-width width height draw_repeat_slash
 {
        2 index % duplicate x-width
        1 setlinecap
        1 setlinejoin
        
-       0 0 moveto
          0  rlineto % x-width 0
             rlineto % width height
        neg 0 rlineto % -x-width 0
@@ -167,6 +152,8 @@ 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
@@ -176,19 +163,23 @@ bind def
        curveto
        closepath
        stroke_and_fill
+       grestore
 } bind def
 
-/draw_dot % x1 y2 R
+/draw_dot % radius x y draw_dot
 {
-%      0 360 arc fill stroke
+       rmoveto
+       currentpoint
+       3 2 roll
        0 360 arc closepath stroke_and_fill
 } bind def
 
-/draw_circle % F R T
+/draw_circle % filled? radius thickness draw_circle
 {
-       setlinewidth
-       dup 0 moveto
-       0 exch 0 exch
+       setlinewidth    % f? r
+       currentpoint    % f? r x0 y0
+       3 2 roll        % f? x0 y0 r
+       dup 0 rmoveto
        0 360 arc closepath
                { stroke_and_fill } 
                { stroke }
@@ -196,60 +187,49 @@ bind def
 } bind def
 
 
-% JUNKME. use color & circle. 
-/draw_white_dot % x1 y2 R
+/draw_line % dx dy x1 y1 thickness draw_line
 {
-%      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
-
-
-% JUNKME: Use color.  
-/draw_white_text  % text scale font
-{
-  exch selectfont
-  1 setgray
-  0 0 moveto
-  %-0.05 -0.05 moveto
-  % text
-  show
+       setlinewidth % dx dy x1 y1
+       1 setlinecap
+       1 setlinejoin
+       rmoveto % dx dy
+       rlineto
+       stroke
 } bind def
 
-
-/draw_dashed_line % dash thickness dx dy
+/draw_dashed_line % dx dy thickness dashpattern offset draw_dashed_line
 {
        1 setlinecap
        1 setlinejoin
-       setdash
-       setlinewidth
-       0 0 moveto
-       lineto
+       setdash % dx dy thickness
+       setlinewidth %dx dy
+       rlineto
        stroke
+       [] 0 setdash % reset dash pattern
 } bind def
 
-/draw_dashed_slur % dash thickness controls
+/draw_dashed_slur % controls thickness dash
 {
+gsave
+       currentpoint translate
        1 setlinecap
        1 setlinejoin
        setdash
        setlinewidth
-       8 -2 roll
+       8 2 roll
        moveto
        curveto
        stroke
+grestore
 } bind def
 
-/print_glyphs {
+/print_glyphs % dx dy glyph print_glyphs
+{
        {
-               currentpoint
-               3 2 roll
-               glyphshow
-               moveto
+               currentpoint %dx dy glyph x0 y0
+               3 2 roll %dx dy x0 y0 glyph
+               glyphshow % dx dy x0 y0
+               moveto % dx dy
                rmoveto
        }repeat
 }bind def