]> git.donarmstrong.com Git - lilypond.git/commitdiff
Let the distance of strings and frets in fret-diagrams be settable
authorThomas Morley <thomasmorley65@gmail.com>
Sat, 31 Dec 2016 12:33:24 +0000 (12:33 +0000)
committerThomas Morley <thomasmorley65@gmail.com>
Sun, 8 Jan 2017 23:42:04 +0000 (23:42 +0000)
Issue 5025

- Two new sub-properties of fret-diagram-details are introduced:
  fret-distance and string-distance
- regtest fret-diagrams-size.ly is extended
- entry in changes.tely

Documentation/changes.tely
input/regression/fret-diagrams-size.ly
scm/define-grob-properties.scm
scm/fret-diagrams.scm

index 158e4cf4ae7924455e24363a89764e70530974cb..37e17cae1a69027df980cfc7ba7ade833b0a0c8b 100644 (file)
@@ -61,6 +61,32 @@ which scares away people.
 
 @end ignore
 
+@item
+In fret-diagrams the distance between frets and the distance between strings is
+now independently adjustable.  Available are @code{fret-distance} and
+@code{string-distance} as subproperties of @code{fret-diagram-details}.
+@lilypond[verbatim,quote]
+fretMrkp = \markup { \fret-diagram-terse #"x;x;o;2;3;2;" }
+
+\markuplist
+\override #'(padding . 2)
+\table #'(0 -1) {
+  "default"
+
+  \fretMrkp
+
+  "fret-distance"
+
+  \override #'(fret-diagram-details . ((fret-distance . 2)))
+  \fretMrkp
+
+  "string-distance"
+
+  \override #'(fret-diagram-details . ((string-distance . 2)))
+  \fretMrkp
+}
+@end lilypond
+
 @item
 Accidental rules can now be defined across @code{ChoirStaff} contexts.
 Two new rules @code{choral} and @code{choral-cautionary} are available
index 1dce8a9f4592213004f4609c5bb79538949488a3..573d8dff088da286f95dd2168de8d2cc979034b0 100644 (file)
@@ -3,6 +3,9 @@
 \header {
   texidoc="
 Fret diagrams can be scaled using the @code{size} property.
+Also, scaling the distance between the frets and/@/or strings is possible with
+the properties @code{fret-distance} and/@/or @code{string-distance} of
+@code{fret-diagram-details}.
 The position and size of first fret label, mute/@/open signs, fingers,
 relative to the diagram grid, shall be the same in all cases.
 
@@ -10,15 +13,38 @@ relative to the diagram grid, shall be the same in all cases.
 }
 
 myFretDiagram =
-\markup \fret-diagram-verbose #'((place-fret 6 6 "P")
-                                 (place-fret 5 8 2)
-                                 (place-fret 4 8 2)
-                                 (place-fret 3 7 1)
-                                 (place-fret 2 8 3)
-                                 (mute 1))
+\markup
+  \override #'(fret-diagram-details . ((finger-code . below-string)))
+  \fret-diagram-verbose #'((place-fret 6 6 "P")
+                           (place-fret 5 8 2)
+                           (place-fret 4 8 2)
+                           (place-fret 3 7 1)
+                           (place-fret 2 8 3)
+                           (mute 1))
 
-\markup \override #'(fret-diagram-details . ((finger-code . below-string))) {
-  \myFretDiagram
-  \override #'(size . 1.5) \myFretDiagram
-  \override #'(size . 3) \myFretDiagram
-}
+\markup
+  {
+    \myFretDiagram
+    \override #'(size . 1.5) \myFretDiagram
+    \override #'(size . 3) \myFretDiagram
+  }
+
+\markup
+  {
+    \override #'(fret-diagram-details . ((fret-distance . 0.5)))
+    \myFretDiagram
+    \override #'(fret-diagram-details . ((fret-distance . 1.5)))
+    \myFretDiagram
+    \override #'(fret-diagram-details . ((fret-distance . 2.5)))
+    \myFretDiagram
+  }
+
+\markup
+  {
+    \override #'(fret-diagram-details . ((string-distance . 0.5)))
+    \myFretDiagram
+    \override #'(fret-diagram-details . ((string-distance . 1.5)))
+    \myFretDiagram
+    \override #'(fret-diagram-details . ((string-distance . 2.5)))
+    \myFretDiagram
+  }
index 06358986b077bad2934e73eeac7fac2c4850c4af..238febedbfaa95e007a59e9dc1a015819a2c019f 100644 (file)
@@ -372,6 +372,9 @@ Default @code{none} for markup fret diagrams, @code{below-string} for
 @item
 @code{fret-count} -- The number of frets.  Default@tie{}4.
 @item
+@code{fret-distance} -- Multiplier to adjust the distance between frets.
+Default@tie{}1.0.
+@item
 @code{fret-label-custom-format} -- The format string to be used label
 the lowest fret number, when @code{number-type} equals to
 @code{custom}.  Default@tie{}\"~a\".
@@ -412,6 +415,9 @@ Default @code{normal}.
 @item
 @code{string-count} -- The number of strings.  Default@tie{}6.
 @item
+@code{string-distance} -- Multiplier to adjust the distance between strings.
+Default@tie{}1.0.
+@item
 @code{string-label-font-mag} -- The magnification of the font used to
 label fingerings at the string, rather than in the dot.  Default value
 0.6 for @code{normal} orientation, 0.5 for @code{landscape} and
index 45db612b9658b054a4ecf9a845d87f3bf1be9f7a..3738d2cabfaf5ccb8912794881157457c9ff05e2 100644 (file)
@@ -302,6 +302,10 @@ with magnification @var{mag} of the string @var{text}."
          ;;TODO -- get string-count directly from length of stringTunings;
          ;;         from FretBoard engraver, but not from markup call
          (details (merge-details 'fret-diagram-details props '()))
+         (fret-distance
+          (assoc-get 'fret-distance details 1.0))
+         (string-distance
+          (assoc-get 'string-distance details 1.0))
          (string-count
           (assoc-get 'string-count details 6)) ;; needed for everything
          (my-fret-count
@@ -445,11 +449,13 @@ Line thickness is given by @var{th}, fret & string spacing by
              (start-coordinates
               (stencil-coordinates
                (- fret-half-thickness)
-               (- (* size string-coordinate) half-string)))
+               (- (* size string-distance string-coordinate) half-string)))
              (end-coordinates
               (stencil-coordinates
-               (+ fret-half-thickness (* size (1+ (fret-count fret-range))))
-               (+ half-string (* size string-coordinate)))))
+               (+ fret-half-thickness
+                  (* size fret-distance (1+ (fret-count fret-range))))
+               (+ half-string
+                  (* size string-distance string-coordinate)))))
         (ly:round-filled-box
          (string-x-extent start-coordinates end-coordinates)
          (string-y-extent start-coordinates end-coordinates)
@@ -481,12 +487,12 @@ fret-diagram overall parameters."
              (fret-half-thickness (* 0.5 size th))
              (start-coordinates
               (stencil-coordinates
-               (* size fret)
+               (* fret-distance size fret)
                (- fret-half-thickness low-string-half-thickness)))
              (end-coordinates
               (stencil-coordinates
-               (* size fret)
-               (* size (1- string-count)))))
+               (* fret-distance size fret)
+               (* size string-distance (1- string-count)))))
         (make-line-stencil
          (* size th)
          (car start-coordinates) (cdr start-coordinates)
@@ -538,12 +544,12 @@ fret-diagram overall parameters."
       "Create a straight barre stencil."
       (let ((start-point
              (stencil-coordinates
-              (* size fret-coordinate)
-              (* size start-string-coordinate)))
+              (* size fret-distance fret-coordinate)
+              (* size string-distance start-string-coordinate)))
             (end-point
              (stencil-coordinates
-              (* size fret-coordinate)
-              (* size end-string-coordinate))))
+              (* size fret-distance fret-coordinate)
+              (* size string-distance end-string-coordinate))))
         (make-line-stencil
          half-thickness
          (car start-point)
@@ -561,9 +567,9 @@ fret-diagram overall parameters."
              (bezier-height 0.5)
              (bezier-list
               (make-bezier-sandwich-list
-               (* size start-string-coordinate)
-               (* size end-string-coordinate)
-               (* size fret-coordinate)
+               (* size string-distance start-string-coordinate)
+               (* size string-distance end-string-coordinate)
+               (* size fret-distance fret-coordinate)
                (* size bezier-height)
                (* size bezier-thick))))
         (make-bezier-sandwich-stencil
@@ -592,8 +598,10 @@ fret-diagram overall parameters."
               (restlist (cdr dot-list))
               (string (car mypair))
               (fret (cadr mypair))
-              (fret-coordinate (* size (+ (1- fret) dot-position)))
-              (string-coordinate (* size (- string-count string)))
+              (fret-coordinate
+               (* size fret-distance (+ (1- fret) dot-position)))
+              (string-coordinate
+               (* size string-distance (- string-count string)))
               (dot-coordinates
                (stencil-coordinates fret-coordinate string-coordinate))
               (extent (cons (- scale-dot-radius) scale-dot-radius))
@@ -721,8 +729,19 @@ fret-diagram overall parameters."
                          (stencil-fretboard-offset
                           label-stencil 'fret orientation))
                         (label-fret-coordinate
-                         (+ (* size
-                               (+ 1 my-fret-count finger-label-padding))
+                         ;; (1) Move the below-string-finger-codes to the bottom
+                         ;;     edge of the string, i.e.
+                         ;;       (* (1+  my-fret-count) fret-distance)
+                         ;; (2) add `finger-label-padding' (a hardcoded
+                         ;;     correction-value to get a bit default padding).
+                         ;;     TODO: make it a property?
+                         ;; (3) scale this with `size'
+                         ;; (4) add `label-fret-offset', to get the final
+                         ;;     padding
+                         (+
+                            (* size
+                               (+ (* (1+  my-fret-count) fret-distance)
+                                  finger-label-padding))
                             label-fret-offset))
                         (label-string-coordinate string-coordinate)
                         (label-translation
@@ -750,7 +769,8 @@ fret-diagram overall parameters."
              (top-fret-thick
               (* sth (assoc-get 'top-fret-thickness details 3.0)))
              (start-string-coordinate (- half-lowest-string-thickness))
-             (end-string-coordinate (+ (* size (1- string-count)) half-thick))
+             (end-string-coordinate
+                 (+ (* size string-distance (1- string-count)) half-thick))
              (start-fret-coordinate half-thick)
              (end-fret-coordinate (- half-thick top-fret-thick))
              (lower-left
@@ -779,7 +799,8 @@ fret-diagram overall parameters."
              (glyph-string (if (eq? (car mypair) 'mute)
                                (assoc-get 'mute-string details "X")
                                (assoc-get 'open-string details "O")))
-             (glyph-string-coordinate (* (- string-count (cadr mypair)) size))
+             (glyph-string-coordinate
+              (* (- string-count (cadr mypair)) string-distance size))
              (glyph-stencil
               (centered-stencil
                (sans-serif-stencil
@@ -804,14 +825,14 @@ at @var{fret}."
              (half-thick (* capo-thick 0.5))
              (last-string-position 0)
              (first-string-position (* size (- string-count 1)))
-             (fret-position ( * size (1- (+ dot-position fret))))
+             (fret-position (* size (1- (+ dot-position fret))))
              (start-point
               (stencil-coordinates
-               fret-position
-               first-string-position))
+               (* fret-distance fret-position)
+               (* string-distance first-string-position)))
              (end-point
               (stencil-coordinates
-               fret-position
+               (* fret-distance fret-position)
                last-string-position)))
         (make-line-stencil
          capo-thick
@@ -850,10 +871,11 @@ at @var{fret}."
         (ly:stencil-translate
          label-stencil
          (stencil-coordinates
-          (* size (+ 1.0 label-vertical-offset))
+          (* size fret-distance (1+ label-vertical-offset))
           (if (eq? label-dir LEFT)
               (- label-outside-diagram)
-              (+ (* size (1- string-count)) label-outside-diagram))))))
+              (+ (* size string-distance (1- string-count))
+                 label-outside-diagram))))))
 
     ;; Here is the body of make-fret-diagram