From 175a579bf90f938533d3bc18648fad01ba287804 Mon Sep 17 00:00:00 2001 From: Neil Puttock Date: Mon, 7 Dec 2009 23:28:08 +0000 Subject: [PATCH] Fix #789. * filter out VoltaLineSpanner axis groups from acknowledger in Instrument_name_engraver. This prevents instrument names from being misaligned when the Volta_engraver is moved to the Staff context and the spanner is broken (where its left bound would be the same NonMusicalPaperColumn as the InstrumentName's.) * add regression test --- input/regression/instrument-name-volta.ly | 40 +++++++++++++++++++++++ lily/instrument-name-engraver.cc | 3 +- scm/define-grob-interfaces.scm | 5 +++ scm/define-grobs.scm | 12 ++++--- 4 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 input/regression/instrument-name-volta.ly diff --git a/input/regression/instrument-name-volta.ly b/input/regression/instrument-name-volta.ly new file mode 100644 index 0000000000..529f787e56 --- /dev/null +++ b/input/regression/instrument-name-volta.ly @@ -0,0 +1,40 @@ +\version "2.13.9" + +\header { + texidoc = "Moving the @code{Volta_engraver} to the @code{Staff} +context does not affect @code{InstrumentName} alignment." +} + +testMusik = \relative c'' { + \repeat volta 2 { + c1 \break + } \alternative { + { c1 \break } + { c1 \break } + } +} + +\score { + \new Staff \relative c' { + \set Staff.shortInstrumentName = #"Instr." + \repeat volta 2 { + c1 \break + } + \alternative { + { c1 \break } + { c1 \break } + } + } +} +\layout { + ragged-right = ##t + short-indent = 5\mm + \context { + \Score + \remove "Volta_engraver" + } + \context { + \Staff + \consists "Volta_engraver" + } +} diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index f39677ffff..7bdfc428e8 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -121,6 +121,7 @@ Instrument_name_engraver::acknowledge_axis_group (Grob_info info) && !info.grob ()->internal_has_interface (ly_symbol2scm ("dynamic-interface")) && !info.grob ()->internal_has_interface (ly_symbol2scm ("piano-pedal-interface")) + && !info.grob ()->internal_has_interface (ly_symbol2scm ("volta-interface")) && (!Align_interface::has_interface (info.grob ()))) { axis_groups_.push_back (info.grob ()); @@ -164,8 +165,8 @@ ADD_TRANSLATOR (Instrument_name_engraver, /* read */ "currentCommandColumn " - "shortInstrumentName " "instrumentName " + "shortInstrumentName " "shortVocalName " "vocalName ", diff --git a/scm/define-grob-interfaces.scm b/scm/define-grob-interfaces.scm index 50f9d6794c..d0abebed7b 100644 --- a/scm/define-grob-interfaces.scm +++ b/scm/define-grob-interfaces.scm @@ -214,3 +214,8 @@ with @code{breakable=##t}." "Objects that should be kept at constant vertical distances. Typically: @rinternals{VerticalAxisGroup} objects of @rinternals{Staff} contexts." '()) + +(ly:add-interface + 'volta-interface + "A volta repeat." + '()) diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 6ed7eec234..802774e3f2 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -2243,7 +2243,7 @@ (font-encoding . fetaNumber) (font-size . -4) (stencil . ,ly:volta-bracket-interface::print) - (thickness . 1.6) ;; line-thickness + (thickness . 1.6) ;; line-thickness (word-space . 0.6) (meta . ((class . Spanner) (interfaces . (font-interface @@ -2251,14 +2251,15 @@ line-interface side-position-interface text-interface - volta-bracket-interface)))))) + volta-bracket-interface + volta-interface)))))) (VoltaBracketSpanner . ( (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff) (axes . (,Y)) (direction . ,UP) - (no-alignment . ,#t) + (no-alignment . #t) (outside-staff-priority . 600) (padding . 1) (side-axis . ,Y) @@ -2267,7 +2268,8 @@ (Y-offset . ,ly:side-position-interface::y-aligned-side) (meta . ((class . Spanner) (interfaces . (axis-group-interface - side-position-interface)))))) + side-position-interface + volta-interface)))))) )) @@ -2337,7 +2339,7 @@ ly:text-interface::print ly:script-interface::print)) -;; ly:grob::stencil-extent is safe iff the print callback is safe too +;; ly:grob::stencil-extent is safe if the print callback is safe too (define (pure-stencil-height grob start stop) (let ((sten (ly:grob-property-data grob 'stencil))) (if (or -- 2.39.5