]> git.donarmstrong.com Git - lilypond.git/blobdiff - ly/music-functions-init.ly
Issue 3942: Scale slurs and ties when using \magnifyMusic.
[lilypond.git] / ly / music-functions-init.ly
index 9e5d3c223b8c32db59a70585bd2bdf7f8478c278..f3a2daa59e896adb2c5ebb9321f856d8d595fc99 100644 (file)
@@ -633,26 +633,104 @@ languageRestore =
 
 
 magnifyMusic =
-#(define-music-function (parser location mag mus) (number? ly:music?)
-   (_i "Magnify the notation of @var{mus} without changing the
-staff-size, using @var{mag} as a size factor.  Stems, beams, and
-horizontal spacing are adjusted automatically.")
+#(define-music-function (parser location mag music) (positive? ly:music?)
+   (_i "Magnify the notation of @var{music} without changing the
+staff-size, using @var{mag} as a size factor.  Stems, beams,
+slurs, ties, and horizontal spacing are adjusted automatically.")
+
+   ;; these props are NOT allowed to shrink below default size
+   (define unshrinkable-props
+     '(
+       ;; stems
+       Stem.thickness
+       ;; slurs
+       Slur.line-thickness
+       Slur.thickness
+       PhrasingSlur.line-thickness
+       PhrasingSlur.thickness
+       ;; ties
+       Tie.line-thickness
+       Tie.thickness
+       LaissezVibrerTie.line-thickness
+       LaissezVibrerTie.thickness
+       RepeatTie.line-thickness
+       RepeatTie.thickness
+       ))
+
+   ;; these props ARE allowed to shrink below default size
+   (define shrinkable-props
+     '(
+       ;; override at the 'Score level
+       SpacingSpanner.spacing-increment
+
+       ;; Beam.beam-thickness is dealt with separately below
+
+       ;; lengths and heights
+       Beam.length-fraction
+       Stem.length-fraction
+       Stem.beamlet-default-length
+       Slur.height-limit
+       Slur.minimum-length
+       PhrasingSlur.height-limit
+       PhrasingSlur.minimum-length
+
+       ;; every Slur.details prop that's
+       ;; not a factor, penalty, ratio, or slope
+       Slur.details.region-size
+       Slur.details.free-head-distance
+       Slur.details.free-slur-distance
+       Slur.details.gap-to-staffline-inside
+       Slur.details.gap-to-staffline-outside
+       Slur.details.extra-encompass-free-distance
+       Slur.details.extra-encompass-collision-distance
+       Slur.details.close-to-edge-length
+       Slur.details.encompass-object-range-overshoot
+       Slur.details.slur-tie-extrema-min-distance
+
+       ;; every PhrasingSlur.details prop that's
+       ;; not a factor, penalty, ratio, or slope
+       PhrasingSlur.details.region-size
+       PhrasingSlur.details.free-head-distance
+       PhrasingSlur.details.free-slur-distance
+       PhrasingSlur.details.gap-to-staffline-inside
+       PhrasingSlur.details.gap-to-staffline-outside
+       PhrasingSlur.details.extra-encompass-free-distance
+       PhrasingSlur.details.extra-encompass-collision-distance
+       PhrasingSlur.details.close-to-edge-length
+       PhrasingSlur.details.encompass-object-range-overshoot
+       PhrasingSlur.details.slur-tie-extrema-min-distance
+
+       ;; every Tie.details prop that's
+       ;; not a factor, penalty, ratio, or slope
+       Tie.details.center-staff-line-clearance
+       Tie.details.tip-staff-line-clearance
+       Tie.details.note-head-gap
+       Tie.details.stem-gap
+       Tie.details.height-limit
+       Tie.details.tie-tie-collision-distance
+       Tie.details.intra-space-threshold
+       Tie.details.outer-tie-vertical-gap
+       Tie.details.multi-tie-region-size
+       Tie.details.single-tie-region-size
+       Tie.details.between-length-limit
+       ))
    #{
-     \set fontSize = #(magnification->font-size mag)
-     % gives beam-thickness=0.48 when mag=1 (like default),
-     % gives beam-thickness=0.35 when mag=0.63 (like CueVoice)
-     \temporary \override Beam.beam-thickness = #(+ 119/925 (* mag 13/37))
-     \temporary \override Beam.length-fraction = #mag
-     \temporary \override Stem.length-fraction = #mag
-     \temporary \override Stem.thickness = #(* 1.3 (max 1 mag))
-     \temporary \override Score.SpacingSpanner.spacing-increment = #(* 1.2 mag)
-     #mus
-     \set fontSize = 0
-     \revert Beam.beam-thickness
-     \revert Beam.length-fraction
-     \revert Stem.length-fraction
-     \revert Stem.thickness
-     \revert Score.SpacingSpanner.spacing-increment
+     \context Voice {
+       \newSpacingSection
+       #(scale-fontSize mag)
+       #(scale-props unshrinkable-props mag #f)
+       #(scale-props shrinkable-props   mag #t)
+       #(scale-beam-thickness mag)
+
+       #music
+
+       \newSpacingSection
+       %% reverse engineer the former fontSize value instead of using \unset
+       #(revert-fontSize mag)
+       #(revert-props (append unshrinkable-props
+                              shrinkable-props
+                              (list 'Beam.beam-thickness)))
+     }
    #})
 
 makeClusters =