]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/output-ps.scm
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / scm / output-ps.scm
index dc20266a014d54749bfe9ca9a096944ad1150cf4..2e8c78e2d5f9ba4b161c040c8de8085ed31d7cf5 100644 (file)
 
   ;; JUNK this -- see lily.scm: ly:all-output-backend-commands
   #:export (unknown
-           blank
+           bezier-sandwich
+           char
            circle
-           dot
+           comment
+           dashed-line
            dashed-slur
-           char
-           setcolor
-           resetcolor
+           dot
+           draw-line
+           embedded-ps
            named-glyph
-           dashed-line
-           zigzag-line
-           comment
-           repeat-slash
+           no-origin
            placebox
-           bezier-sandwich
-           embedded-ps
+           polygon
+           repeat-slash
+           resetcolor
+           resetrotatino
            round-filled-box
+           setcolor
+               setrotation
            text
-           polygon
-           draw-line
-           no-origin))
+           zigzag-line))
 
 
 (use-modules (guile)
 ;; what the heck is this interface ?
 (define (dashed-slur thick on off l)
   (format #f "~a ~a [ ~a ~a ] 0 draw_dashed_slur"
-         (string-join (map number-pair->string4 l) " ")
+         (let ((control-points (append (cddr l) (list (car l) (cadr l)))))
+           (string-join (map number-pair->string4 control-points) " "))
          (str4 thick)
          (str4 on)
          (str4 off)))
 
 (define (dot x y radius)
   (format #f " ~a draw_dot"
-   (numbers->string4 (list x y radius))))
+   (numbers->string4 (list radius x y))))
 
 (define (draw-line thick x1 y1 x2 y2)
-  (format #f "1 setlinecap 1 setlinejoin ~a setlinewidth ~a ~a moveto ~a ~a lineto stroke"
-   (str4 thick)
-   (str4 x1)
-   (str4 y1)
-   (str4 x2)
-   (str4 y2)))
+  (format #f "~a ~a ~a ~a ~a draw_line"
+         (str4 (- x2 x1))
+         (str4 (- y2 y1))
+         (str4 x1)
+         (str4 y1)
+         (str4 thick)))
 
 (define (embedded-ps string)
   string)
   
   (format #f
          (if cid?
-"gsave
-/~a /CIDFont findresource ~a output-scale div scalefont setfont
+"/~a /CIDFont findresource ~a output-scale div scalefont setfont
 ~a
-~a print_glyphs
-grestore"
+~a print_glyphs"
 
-"gsave\n/~a ~a output-scale div selectfont
+"/~a ~a output-scale div selectfont
 ~a
-~a print_glyphs
-grestore")
+~a print_glyphs")
          postscript-font-name
          size
          (string-join (map (lambda (x) (apply glyph-spec x))
@@ -224,11 +223,8 @@ grestore")
 
 (define (placebox x y s) 
   (format #f
-"gsave ~a ~a translate
-0 0 moveto
-~a
-grestore\n"
-
+"~a ~a moveto
+~a\n"
   (str4 x)
   (str4 y)
   s))
@@ -244,7 +240,7 @@ grestore\n"
   (define (euclidean-length x y)
     (sqrt (+ (* x x) (* y y))))
 
-  (let ((x-width (euclidean-length slope (/ beam-thickness slope)))
+  (let ((x-width (euclidean-length beam-thickness (/ beam-thickness slope)))
        (height (* width slope)))
     (format #f "~a draw_repeat_slash"
            (numbers->string4 (list x-width width height)))))
@@ -252,6 +248,13 @@ grestore\n"
 ;; restore color from stack
 (define (resetcolor) "setrgbcolor\n")
 
+;; reset rotation
+(define (resetrotation ang x y)
+  (format "~a translate ~a rotate ~a translate\n"
+    (numbers->string4 (list x y))
+    (number->string (* -1 ang))
+    (numbers->string4 (list (* -1 x) (* -1 y)))))
+
 (define (round-filled-box left right bottom top blotdiam)
   (let* ((halfblot (/ blotdiam 2))
         (x (- halfblot left))
@@ -260,13 +263,20 @@ grestore\n"
         (height (- top (+ halfblot y))))
     (format #f "~a draw_round_box"
            (numbers->string4
-             (list x y width height blotdiam)))))
+             (list width height x y blotdiam)))))
 
 ;; save current color on stack and set new color
 (define (setcolor r g b)
   (format #f "currentrgbcolor ~a setrgbcolor\n"
          (numbers->string4 (list r g b))))
 
+;; rotation around given point
+(define (setrotation ang x y)
+  (format "~a translate ~a rotate ~a translate\n"
+    (numbers->string4 (list x y))
+    (number->string ang)
+    (numbers->string4 (list (* -1 x) (* -1 y)))))
+
 (define (text font s)
   ;; (ly:warning (_ "TEXT backend-command encountered in Pango backend"))
   ;; (ly:warning (_ "Arguments: ~a ~a"" font str))