From 51494aa2962de45ba21eed9e79aadfc28e737f2b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Benk=C5=91=20P=C3=A1l?= Date: Tue, 1 Feb 2011 21:40:56 +0100 Subject: [PATCH] remove bar-size and replace by bar-extent --- Documentation/de/notation/percussion.itely | 12 +- Documentation/es/notation/percussion.itely | 12 +- Documentation/fr/notation/chords.itely | 4 +- Documentation/notation/percussion.itely | 12 +- .../adding-bar-lines-to-chordnames-context.ly | 4 +- Documentation/snippets/adding-drum-parts.ly | 4 +- Documentation/snippets/ancient-fonts.ly | 4 +- input/regression/bar-extent.ly | 88 +++++++++++ input/regression/drums.ly | 4 +- input/regression/grid-lines.ly | 4 +- input/regression/lyrics-bar.ly | 4 +- lily/bar-line.cc | 143 +++++++++--------- lily/include/bar-line.hh | 9 +- lily/include/span-bar.hh | 1 - lily/span-bar.cc | 25 +-- ly/engraver-init.ly | 6 +- python/convertrules.py | 12 ++ scm/define-grob-properties.scm | 1 - scm/define-grobs.scm | 2 - 19 files changed, 215 insertions(+), 136 deletions(-) create mode 100644 input/regression/bar-extent.ly diff --git a/Documentation/de/notation/percussion.itely b/Documentation/de/notation/percussion.itely index b734453ce5..ea51521d58 100644 --- a/Documentation/de/notation/percussion.itely +++ b/Documentation/de/notation/percussion.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes. @end ignore -@c \version "2.13.36" +@c \version "2.13.48" @c Translators: Till Paala @@ -423,7 +423,7 @@ woodstaff = { \override Staff.StaffSymbol #'line-positions = #'(-2 3) % This is necessary; if not entered, the barline would be too short! - \override Staff.BarLine #'bar-size = #3 + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) } \new DrumStaff { @@ -441,7 +441,7 @@ woodstaff = { @end lilypond In diesem Spezialfalls muss die Länge der Taktlinie mit -@code{\override Staff.BarLine #'bar-size #number} angepasst werden. +@code{\override Staff.BarLine #'bar-extent #'(von . zu)} angepasst werden. Andernfalls wäre sie zu kurz. Die Position der beiden Linien muss auch definiert werden. @@ -452,7 +452,7 @@ Tamburin, notiert mit @code{tamb}: tambustaff = { \override Staff.StaffSymbol #'line-positions = #'( 0 ) - \override Staff.BarLine #'bar-size = #3 + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) \set DrumStaff.instrumentName = #"Tambourine" } @@ -478,7 +478,7 @@ Noten für Tam-Tam (notiert mit @code{tt}): tamtamstaff = { \override Staff.StaffSymbol #'line-positions = #'( 0 ) - \override Staff.BarLine #'bar-size = #3 + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) \set DrumStaff.instrumentName = #"Tamtam" } @@ -502,7 +502,7 @@ Zwei Glocken, notiert mit @code{cb} (Kuhglocke) und @code{rb} bellstaff = { \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3) \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \override Staff.BarLine #'bar-size = #3 + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) \set DrumStaff.instrumentName = #"Different Bells" } diff --git a/Documentation/es/notation/percussion.itely b/Documentation/es/notation/percussion.itely index 4d025119c1..ec440cce96 100644 --- a/Documentation/es/notation/percussion.itely +++ b/Documentation/es/notation/percussion.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.13.36" +@c \version "2.13.48" @node Percusión @section Percusión @@ -432,7 +432,7 @@ woodstaff = { \override Staff.StaffSymbol #'line-positions = #'(-2 3) % This is necessary; if not entered, the barline would be too short! - \override Staff.BarLine #'bar-size = #3 + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) } \new DrumStaff { @@ -450,7 +450,7 @@ woodstaff = { @end lilypond Observe que en este caso especial se debe alterar la longitud de la -línea divisoria con @code{\override Staff.BarLine #'bar-size #number}. +línea divisoria con @code{\override Staff.BarLine #'bar-extent #'(de . a)}. En caso contrario resulta demasiado corta. También debe definir las posiciones de las dos líneas del pentagrama. Para más información sobre estos delicados asuntos, consulte @ref{El símbolo del pentagrama}. @@ -462,7 +462,7 @@ Una pandereta, escrita mediante @q{tamb} (@emph{tambourine}): tambustaff = { \override Staff.StaffSymbol #'line-positions = #'( 0 ) - \override Staff.BarLine #'bar-size = #3 + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) \set DrumStaff.instrumentName = #"Tambourine" } @@ -489,7 +489,7 @@ Música para gong, introducida con @q{tt} (tam-tam): tamtamstaff = { \override Staff.StaffSymbol #'line-positions = #'( 0 ) - \override Staff.BarLine #'bar-size = #3 + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) \set DrumStaff.instrumentName = #"Tamtam" } @@ -513,7 +513,7 @@ Dos campanas, introducidas con @q{cb} (@emph{cowbell}, cencerro) y bellstaff = { \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3) \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \override Staff.BarLine #'bar-size = #3 + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) \set DrumStaff.instrumentName = #"Different Bells" } diff --git a/Documentation/fr/notation/chords.itely b/Documentation/fr/notation/chords.itely index 5827142105..7ecc9e5720 100644 --- a/Documentation/fr/notation/chords.itely +++ b/Documentation/fr/notation/chords.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.13.36" +@c \version "2.13.48" @c Translators: Valentin Villenave @c Translation checkers: Jean-Charles Malahieude, John Mandereau @@ -280,7 +280,7 @@ s'affichent correctement. @lilypond[ragged-right,verbatim] \new ChordNames \with { - \override BarLine #'bar-size = #4 + \override BarLine #'bar-extent = #'(-2 . 2) \consists Bar_engraver \consists "Volta_engraver" } diff --git a/Documentation/notation/percussion.itely b/Documentation/notation/percussion.itely index 9b4a80974f..6e61eebffe 100644 --- a/Documentation/notation/percussion.itely +++ b/Documentation/notation/percussion.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.13.36" +@c \version "2.13.48" @node Percussion @section Percussion @@ -415,7 +415,7 @@ woodstaff = { \override Staff.StaffSymbol #'line-positions = #'(-2 3) % This is necessary; if not entered, the barline would be too short! - \override Staff.BarLine #'bar-size = #3 + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) } \new DrumStaff { @@ -433,7 +433,7 @@ woodstaff = { @end lilypond Note that in this special case the length of the barline must -altered with @code{\override Staff.BarLine #'bar-size #number}. +altered with @code{\override Staff.BarLine #'bar-extent #'(from . to)}. Otherwise it would be too short. And you have also to define the positions of the two stafflines. For more information about these delicate things have a look at @ref{Staff symbol}. @@ -445,7 +445,7 @@ A tambourine, entered with @q{tamb}: tambustaff = { \override Staff.StaffSymbol #'line-positions = #'( 0 ) - \override Staff.BarLine #'bar-size = #3 + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) \set DrumStaff.instrumentName = #"Tambourine" } @@ -471,7 +471,7 @@ Music for Tam-Tam (entered with @q{tt}): tamtamstaff = { \override Staff.StaffSymbol #'line-positions = #'( 0 ) - \override Staff.BarLine #'bar-size = #3 + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) \set DrumStaff.instrumentName = #"Tamtam" } @@ -494,7 +494,7 @@ Two different bells, entered with @q{cb} (cowbell) and @q{rb} (ridebell) bellstaff = { \override DrumStaff.StaffSymbol #'line-positions = #'(-2 3) \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) - \override Staff.BarLine #'bar-size = #3 + \override Staff.BarLine #'bar-extent = #'(-1.5 . 1.5) \set DrumStaff.instrumentName = #"Different Bells" } diff --git a/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly b/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly index c282b10a4a..de4753e9a9 100644 --- a/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly +++ b/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly @@ -1,7 +1,7 @@ %% Do not edit this file; it is automatically %% generated from LSR http://lsr.dsi.unimi.it %% This file is in the public domain. -\version "2.12.2" +\version "2.13.48" \header { lsrtags = "chords" @@ -33,7 +33,7 @@ To add bar line indications in the @code{ChordNames} context, add the } % begin verbatim \new ChordNames \with { - \override BarLine #'bar-size = #4 + \override BarLine #'bar-extent = #'(-2 . 2) \consists "Bar_engraver" } \chordmode { diff --git a/Documentation/snippets/adding-drum-parts.ly b/Documentation/snippets/adding-drum-parts.ly index cc6a0b5081..67a2fca554 100644 --- a/Documentation/snippets/adding-drum-parts.ly +++ b/Documentation/snippets/adding-drum-parts.ly @@ -1,7 +1,7 @@ %% Do not edit this file; it is automatically %% generated from LSR http://lsr.dsi.unimi.it %% This file is in the public domain. -\version "2.12.2" +\version "2.13.48" \header { lsrtags = "rhythms, percussion" @@ -56,7 +56,7 @@ timb = \drummode { timh4 ssh timl8 ssh r timh r4 ssh8 timl r4 cb8 cb } \new DrumStaff \with { drumStyleTable = #timbales-style \override StaffSymbol #'line-count = #2 - \override BarLine #'bar-size = #2 + \override BarLine #'bar-extent = #'(-1 . 1) } << \set Staff.instrumentName = #"timbales" \timb diff --git a/Documentation/snippets/ancient-fonts.ly b/Documentation/snippets/ancient-fonts.ly index 0b7353d8e3..f49af685de 100644 --- a/Documentation/snippets/ancient-fonts.ly +++ b/Documentation/snippets/ancient-fonts.ly @@ -1,7 +1,7 @@ %% Do not edit this file; it is automatically %% generated from LSR http://lsr.dsi.unimi.it %% This file is in the public domain. -\version "2.12.2" +\version "2.13.48" \header { lsrtags = "ancient-notation" @@ -68,7 +68,7 @@ upperStaff = \new VaticanaStaff = "upperStaff" << \override NoteHead #'style = #'vaticana.vupes g f \override NoteHead #'style = #'vaticana.linea.punctum - \once \override Staff.BarLine #'bar-size = #2.0 \bar "|" + \once \override Staff.BarLine #'bar-extent = #'(-1 . 1) \bar "|" % \break % 3 (8*1) es d diff --git a/input/regression/bar-extent.ly b/input/regression/bar-extent.ly new file mode 100644 index 0000000000..825716f69a --- /dev/null +++ b/input/regression/bar-extent.ly @@ -0,0 +1,88 @@ +\header { + texidoc = "Bar line extent can be customised and the customised value + must be respected when staff symbol is changed temporarily (e.g. to + simulate ledger lines of renaissance prints and manuscripts); + moreover, span bars should not enter the staves." +} + + +\version "2.13.48" + +ledgerUp = +{ + s2 + \stopStaff + \override Staff.StaffSymbol #'line-positions = #'(-4 -2 0 2 4 6) + \startStaff + s2 + \noBreak + s2 + \stopStaff + \revert Staff.StaffSymbol #'line-positions + \startStaff + s2 +} + +ledgerDown = +{ + s2 + \stopStaff + \override Staff.StaffSymbol #'line-positions = #'(-6 -4 -2 0 2 4) + \startStaff + s1 + \stopStaff + \revert Staff.StaffSymbol #'line-positions + \startStaff + s2 +} + +\new StaffGroup +<< + \new Staff \with + { + \override BarLine #'bar-extent = #'(-1 . 1.5) + } + { + \ledgerUp \ledgerDown + s1*4 + s1*4 + \ledgerUp \ledgerDown + \ledgerUp \ledgerDown + \ledgerUp \ledgerDown + \ledgerUp \ledgerDown + s1*4 + s1*4 + } + + \new Staff \with + { + \override BarLine #'bar-extent = #'(0 . 0) + } + { + s1*4 + s1*4 + \ledgerUp \ledgerDown + \ledgerUp \ledgerDown + \ledgerDown \ledgerUp + s1*4 + s1*4 + \ledgerUp \ledgerDown + \ledgerUp \ledgerDown + } + + \new Staff \with + { + \override BarLine #'bar-extent = #'(-2 . 0) + } + { + s1*4 + \ledgerUp \ledgerDown + s1*4 + s1*4 + s1*4 + \ledgerUp \ledgerDown + \ledgerDown \ledgerUp + \ledgerUp \ledgerDown + \ledgerDown \ledgerUp + } +>> diff --git a/input/regression/drums.ly b/input/regression/drums.ly index ddc05e4d5a..1c8ddd690c 100644 --- a/input/regression/drums.ly +++ b/input/regression/drums.ly @@ -7,7 +7,7 @@ } -\version "2.12.0" +\version "2.13.48" drh = \drummode { cymc4.^"crash" hhc16^"h.h." hh \repeat "unfold" 5 {hhc8 hho hhc8 hh16 hh} hhc4 r4 r2 } drl = \drummode {\repeat "unfold" 3 {bd4 sn8 bd bd4 << bd ss >> } bd8 tommh tommh bd toml toml bd tomfh16 tomfh } @@ -19,7 +19,7 @@ timb = \drummode { \repeat "unfold" 2 {timh4 ssh timl8 ssh r timh r4 ssh8 timl r \new DrumStaff \with { drumStyleTable = #timbales-style \override StaffSymbol #'line-count = #2 - \override BarLine #'bar-size = #2 + \override BarLine #'bar-extent = #'(-1 . 1) } << \set Staff.instrumentName = "timbales" \timb diff --git a/input/regression/grid-lines.ly b/input/regression/grid-lines.ly index a25c77eb38..b46139abf5 100644 --- a/input/regression/grid-lines.ly +++ b/input/regression/grid-lines.ly @@ -5,7 +5,7 @@ staves synchronized with the notes." } -\version "2.12.0" +\version "2.13.48" skips = { @@ -41,7 +41,7 @@ skips = \consists "Grid_point_engraver" \override VerticalAxisGroup #'minimum-Y-extent = #'(-4 . 4) gridInterval = #(ly:make-moment 1 8) - \override BarLine #'bar-size = #0.05 + \override BarLine #'bar-extent = #'(-0.025 . 0.025) } \context { \StaffGroup diff --git a/input/regression/lyrics-bar.ly b/input/regression/lyrics-bar.ly index f8b7d83575..a5067687e9 100644 --- a/input/regression/lyrics-bar.ly +++ b/input/regression/lyrics-bar.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.13.48" \header{ texidoc=" @@ -22,7 +22,7 @@ lyrics do not collide with barlines. \context Lyrics \with { \consists "Bar_engraver" \consists "Separating_line_group_engraver" - \override BarLine #'bar-size = #4 + \override BarLine #'bar-extent = #'(-2 . 2) } \lyricmode { looooooooooooooooooooooooooooooooooong1 syllable } diff --git a/lily/bar-line.cc b/lily/bar-line.cc index d2c92be2a4..a2d6588726 100644 --- a/lily/bar-line.cc +++ b/lily/bar-line.cc @@ -31,16 +31,12 @@ MAKE_SCHEME_CALLBACK (Bar_line, calc_bar_extent, 1) SCM Bar_line::calc_bar_extent (SCM smob) { + Interval result; Grob *me = unsmob_grob (smob); + if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me)) + result = staff->extent (staff, Y_AXIS); - SCM size = me->get_property ("bar-size"); - - if (!scm_is_number (size) - || !Staff_symbol_referencer::get_staff_symbol (me)) - return ly_interval2scm (Interval ()); - - Real h = scm_to_double (size); - return ly_interval2scm (Interval (-h / 2, h / 2)); + return ly_interval2scm (result); } Interval @@ -65,22 +61,24 @@ Bar_line::print (SCM smob) Grob *me = unsmob_grob (smob); SCM s = me->get_property ("glyph-name"); - SCM barsize = me->get_property ("bar-size"); + SCM extent = me->get_property ("bar-extent"); - if (scm_is_string (s) && scm_is_number (barsize)) + if (scm_is_string (s) && is_number_pair (extent)) { string str = ly_scm2string (s); - Real sz = robust_scm2double (barsize, 0); - if (sz <= 0) - return SCM_EOL; + Interval ex = ly_scm2interval (extent); + if (ex.length () > 0) + { + Stencil result = compound_barline (me, str, ex, false); - return compound_barline (me, str, sz, false).smobbed_copy (); + return result.smobbed_copy (); + } } return SCM_EOL; } Stencil -Bar_line::compound_barline (Grob *me, string str, Real h, +Bar_line::compound_barline (Grob *me, string str, Interval const &extent, bool rounded) { Real kern = robust_scm2double (me->get_property ("kern"), 1); @@ -96,8 +94,8 @@ Bar_line::compound_barline (Grob *me, string str, Real h, hair *= staffline; fatline *= staffline; - Stencil thin = simple_barline (me, hair, h, rounded); - Stencil thick = simple_barline (me, fatline, h, rounded); + Stencil thin = simple_barline (me, hair, extent, rounded); + Stencil thick = simple_barline (me, fatline, extent, rounded); Stencil dot = Font_interface::get_default_font (me)->find_by_name ("dots.dot"); int lines = Staff_symbol_referencer::line_count (me); @@ -110,14 +108,8 @@ Bar_line::compound_barline (Grob *me, string str, Real h, colon.add_stencil (dot); colon.translate_axis (-dist / 2, Y_AXIS); + Real const h = extent.length (); Stencil m; - Grob *staff = Staff_symbol_referencer::get_staff_symbol (me); - Real center = 0; - if (staff) - { - Interval staff_extent = staff->extent (staff, Y_AXIS); - center = staff_extent.center (); - } if (str == "||:") str = "|:"; @@ -127,20 +119,13 @@ Bar_line::compound_barline (Grob *me, string str, Real h, if (str == "") { - Stencil empty = Lookup::blank (Box (Interval (0, 0), Interval (-h / 2, h / 2))); - empty.translate_axis (center, Y_AXIS); + Stencil empty = Lookup::blank (Box (Interval (0, 0), extent)); return empty; } else if (str == "|") - { - thin.translate_axis (center, Y_AXIS); - return thin; - } + return thin; else if (str == ".") - { - thick.translate_axis (center, Y_AXIS); - return thick; - } + return thick; else if (str == "|." || (h == 0 && str == ":|")) { m.add_at_edge (X_AXIS, LEFT, thick, 0); @@ -254,30 +239,47 @@ Bar_line::compound_barline (Grob *me, string str, Real h, } else if (str == ":") { - int c = (Staff_symbol_referencer::line_count (me)); - - for (int i = 0; i < c - 1; i++) + if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me)) { - Real y = (- (c - 1.0) / 2 + 0.5 + i) * staff_space; - Stencil d (dot); - - d.translate_axis (y, Y_AXIS); - m.add_stencil (d); + Interval staff_extent = staff->extent (staff, Y_AXIS); + + /* + assume staff lines are disposed equally at unit space; + put a dot into each space within extent (may extend staff_extent). + + staff_extent is an interval of two integers or two half-integers; + in the former case dots are to be placed at half-integers, + in the latter at integers. + + these integers are not exact due to staff line thickness. + */ + int const pos = int (rint (staff_extent.at (UP) * 2)); + Real const correction = pos & 1 ? 0.0 : 0.5; + + for (int i = int (rint (extent.at (DOWN) + (0.5 - correction))), + e = int (rint (extent.at (UP) + (0.5 - correction))); + i < e; + ++i) + { + Stencil d (dot); + + d.translate_axis (i + correction, Y_AXIS); + m.add_stencil (d); + } } } else if (str == "dashed") - m = dashed_bar_line (me, h, hair); + m = dashed_bar_line (me, extent, hair); else if (str == "'") - m = tick_bar_line (me, h, rounded); + m = tick_bar_line (me, extent.at (UP), rounded); - m.translate_axis (center, Y_AXIS); return m; } Stencil Bar_line::simple_barline (Grob *me, Real w, - Real h, + Interval const &extent, bool rounded) { Real blot @@ -285,8 +287,7 @@ Bar_line::simple_barline (Grob *me, ? me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter")) : 0.0; - return Lookup::round_filled_box (Box (Interval (0, w), - Interval (-h / 2, h / 2)), blot); + return Lookup::round_filled_box (Box (Interval (0, w), extent), blot); } Stencil @@ -301,24 +302,11 @@ Bar_line::tick_bar_line (Grob *me, Real h, bool rounded) : 0.0; return Lookup::round_filled_box (Box (Interval (0, line_thick), - Interval (h / 2 - th, h / 2 + th)), blot); -} - -MAKE_SCHEME_CALLBACK (Bar_line, calc_bar_size, 1); -SCM -Bar_line::calc_bar_size (SCM smob) -{ - Grob *me = unsmob_grob (smob); - if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me)) - { - Interval staff_y = staff->extent (staff, Y_AXIS); - return scm_from_double (staff_y.is_empty () ? 0.0 : staff_y.length ()); - } - return scm_from_int (0); + Interval (h - th, h + th)), blot); } Stencil -Bar_line::dashed_bar_line (Grob *me, Real h, Real thick) +Bar_line::dashed_bar_line (Grob *me, Interval const &extent, Real thick) { Real dash_size = 1.0 - robust_scm2double (me->get_property ("gap"), 0.3); @@ -328,23 +316,30 @@ Bar_line::dashed_bar_line (Grob *me, Real h, Real thick) connections. */ Real ss = Staff_symbol_referencer::staff_space (me); - int count = Staff_symbol_referencer::line_count (me); - Real line_thick = Staff_symbol_referencer::line_thickness (me); + Real const h = extent.length (); + int dashes = int (rint (h / ss)); - if (fabs (line_thick + (count -1) * ss - h) < 0.1) // ugh. + /* + there are two concerns: + 1. one dash plus one space should be one staff space + 2. the line should begin and end with half a dash + + both can be satisfied, if the extent is (roughly) an integer + multiple of staff space. + */ + if (fabs (h / ss - dashes) < 0.1) { Real blot = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter")); - Real half_space = ss / 2; + Real const half_dash = dash_size / 2; Stencil bar; - for (int i = (count - 1); i >= -(count - 1); i -= 2) + for (int i = 0; i <= dashes; ++i) { - Real top_y = min ((i + dash_size) * half_space, - (count - 1) * half_space + line_thick / 2); - Real bot_y = max ((i - dash_size) * half_space, - -(count - 1) * half_space - line_thick / 2); + Real top_y = extent.at (DOWN) + + (i == dashes ? h : (i + half_dash) * ss); + Real bot_y = extent.at (DOWN) + (i ? (i - half_dash) * ss : 0.0); bar.add_stencil (Lookup::round_filled_box (Box (Interval (0, thick), Interval (bot_y, top_y)), @@ -358,7 +353,6 @@ Bar_line::dashed_bar_line (Grob *me, Real h, Real thick) We have to scale the dashing so it starts and ends with half a dash exactly. */ - int dashes = int (rint (h / ss)); Real total_dash_size = h / dashes; Real factor = (dash_size - thick) / ss; @@ -376,7 +370,7 @@ Bar_line::dashed_bar_line (Grob *me, Real h, Real thick) box.add_point (Offset (0, h)); Stencil s (box, at); - s.translate (Offset (thick / 2, -h / 2)); + s.translate (Offset (thick / 2, extent.at (DOWN))); return s; } return Stencil (); @@ -462,6 +456,5 @@ ADD_INTERFACE (Bar_line, "thick-thickness " "glyph " "glyph-name " - "bar-size " "bar-extent " ); diff --git a/lily/include/bar-line.hh b/lily/include/bar-line.hh index 1a895724f3..442fe27770 100644 --- a/lily/include/bar-line.hh +++ b/lily/include/bar-line.hh @@ -28,15 +28,16 @@ class Bar_line public: DECLARE_GROB_INTERFACE(); - static Stencil dashed_bar_line (Grob *me, Real h, Real thick); + static Stencil dashed_bar_line (Grob *me, Interval const &extent, Real thick); static Stencil tick_bar_line (Grob *me, Real h, bool rounded); - static Stencil compound_barline (Grob *, string, Real height, bool rounded); - static Stencil simple_barline (Grob *, Real wid, Real height, bool rounded); + static Stencil compound_barline (Grob *, string, Interval const &extent, + bool rounded); + static Stencil simple_barline (Grob *, Real wid, Interval const &extent, + bool rounded); static Interval bar_y_extent (Grob *, Grob *); static bool non_empty_barline (Grob *me); DECLARE_SCHEME_CALLBACK (calc_bar_extent, (SCM)); - DECLARE_SCHEME_CALLBACK (calc_bar_size, (SCM)); DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (calc_anchor, (SCM)); }; diff --git a/lily/include/span-bar.hh b/lily/include/span-bar.hh index d869d878ea..7ebedb4d46 100644 --- a/lily/include/span-bar.hh +++ b/lily/include/span-bar.hh @@ -37,7 +37,6 @@ public: static void add_bar (Grob *, Grob *); static void evaluate_glyph (Grob *); DECLARE_SCHEME_CALLBACK (width, (SCM smob)); - DECLARE_SCHEME_CALLBACK (calc_bar_size, (SCM)); DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (calc_glyph_name, (SCM)); DECLARE_SCHEME_CALLBACK (before_line_breaking, (SCM)); diff --git a/lily/span-bar.cc b/lily/span-bar.cc index 638823651f..00e22fb085 100644 --- a/lily/span-bar.cc +++ b/lily/span-bar.cc @@ -28,6 +28,8 @@ #include "bar-line.hh" #include "grob.hh" #include "pointer-group-interface.hh" +#include "staff-symbol-referencer.hh" + void Span_bar::add_bar (Grob *me, Grob *b) @@ -74,6 +76,8 @@ Span_bar::print (SCM smobbed_me) { Grob *bar = elements[i]; Interval ext = Bar_line::bar_y_extent (bar, refp); + if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (bar)) + ext.unite (staff->extent (refp, Y_AXIS)); if (ext.is_empty ()) continue; @@ -105,9 +109,8 @@ Span_bar::print (SCM smobbed_me) { Stencil interbar = Bar_line::compound_barline (model_bar, glyph_string, - l.length (), + l, false); - interbar.translate_axis (l.center (), Y_AXIS); span_bar.add_stencil (interbar); } } @@ -134,7 +137,8 @@ Span_bar::width (SCM smob) /* urg. */ - Stencil m = Bar_line::compound_barline (me, gl, 40 PT, false); + Stencil m = + Bar_line::compound_barline (me, gl, Interval (-20 PT, 20 PT), false); return ly_interval2scm (m.extent (X_AXIS)); } @@ -221,21 +225,6 @@ Span_bar::get_spanned_interval (Grob *me) return ly_scm2interval (Axis_group_interface::generic_group_extent (me, Y_AXIS)); } -MAKE_SCHEME_CALLBACK (Span_bar, calc_bar_size, 1); -SCM -Span_bar::calc_bar_size (SCM smob) -{ - Grob *me = unsmob_grob (smob); - Interval iv (get_spanned_interval (me)); - if (iv.is_empty ()) - { - /* This happens if the bars are hara-kiried from under us. */ - me->suicide (); - return scm_from_double (-1); - } - return scm_from_double (iv.length ()); -} - ADD_INTERFACE (Span_bar, "A bar line that is spanned between other barlines. This" " interface is used for bar lines that connect different" diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 7de70d3732..7f7297e414 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -16,7 +16,7 @@ %%%% You should have received a copy of the GNU General Public License %%%% along with LilyPond. If not, see . -\version "2.13.42" +\version "2.13.48" \context { \name "Global" @@ -163,7 +163,7 @@ contained staves are not connected vertically." \name RhythmicStaff \alias "Staff" - \override BarLine #'bar-size = #4 + \override BarLine #'bar-extent = #'(-2 . 2) \override VoltaBracket #'staff-padding = #3 \override StaffSymbol #'line-count = #1 @@ -446,7 +446,7 @@ printing of a single line of lyrics." %% make sure that barlines aren't collapsed, when %% Bar_engraver is there. - \override BarLine #'bar-size = #0.1 + \override BarLine #'bar-extent = #'(-0.05 . 0.05) } diff --git a/python/convertrules.py b/python/convertrules.py index c3cbc21338..b1e21616e8 100644 --- a/python/convertrules.py +++ b/python/convertrules.py @@ -3181,6 +3181,18 @@ def conv(str): return str +@rule ((2, 13, 48), + _ ("Replace bar-size with bar-extent.")) + +def conv(str): + def size_as_extent (matchobj): + half = "%g" % (float (matchobj.group (1)) / 2) + return "bar-extent = #'(-" + half + " . " + half + ")" + + str = re.sub (r"bar-size\s*=\s*#([0-9\.]+)", size_as_extent, str) + + return str + # Guidelines to write rules (please keep this at the end of this file) # # - keep at most one rule per version; if several conversions should be done, diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index 41f5386b45..9f36ecb89b 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -75,7 +75,6 @@ grobs, this should contain only one number.") ;; ;; b ;; - (bar-size ,ly:dimension? "The size of a bar line.") (base-shortest-duration ,ly:moment? "Spacing is based on the shortest notes in a piece. Normally, pieces are spaced as if notes at least as short as this are present.") diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index bb5724f095..14e7212a0b 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -190,7 +190,6 @@ . ( (allow-span-bar . #t) (bar-extent . ,ly:bar-line::calc-bar-extent) - (bar-size . ,ly:bar-line::calc-bar-size) (break-align-anchor . ,ly:bar-line::calc-anchor) (break-align-symbol . staff-bar) (break-visibility . ,bar-line::calc-break-visibility) @@ -1721,7 +1720,6 @@ . ( (allow-span-bar . #t) (bar-extent . ,ly:axis-group-interface::height) - (bar-size . ,ly:span-bar::calc-bar-size) (before-line-breaking . ,ly:span-bar::before-line-breaking) (break-align-symbol . staff-bar) (cross-staff . #t) -- 2.39.2