diff options
-rw-r--r-- | input/regression/accidental-ledger.ly | 39 | ||||
-rw-r--r-- | lily/ambitus.cc | 4 | ||||
-rw-r--r-- | lily/custos.cc | 2 | ||||
-rw-r--r-- | lily/include/note-head.hh | 2 | ||||
-rw-r--r-- | lily/mensural-ligature.cc | 2 | ||||
-rw-r--r-- | lily/note-head.cc | 51 | ||||
-rw-r--r-- | lily/vaticana-ligature.cc | 4 | ||||
-rw-r--r-- | scm/define-grobs.scm | 2 | ||||
-rw-r--r-- | scm/paper.scm | 2 | ||||
-rw-r--r-- | scripts/convert-ly.py | 7 |
10 files changed, 81 insertions, 34 deletions
diff --git a/input/regression/accidental-ledger.ly b/input/regression/accidental-ledger.ly index c1a0ce912d..d7270c032b 100644 --- a/input/regression/accidental-ledger.ly +++ b/input/regression/accidental-ledger.ly @@ -1,12 +1,39 @@ \version "2.1.7" \header { - texidoc = "Ledger lines are shortened when there are accidentals." -} -\score { \notes -{ - c'!4 cis'! cis' <cis'! gis'> + texidoc = "Ledger lines are shortened when there are accidentals. +This happens only for the single ledger line close to the note head, +and only if the accidental is horizontally close to the head. " + } - \paper { raggedright = ##t} + + +\score { + \notes + \relative c { + disis + dis + d + des + deses + eses + es + e + eis + eisis + eses''' + es + e + eis + eisis + feses + fes + f + fis + fisis + <cis,, gis'> + + } + } diff --git a/lily/ambitus.cc b/lily/ambitus.cc index 48eaa61711..b92a5f79e4 100644 --- a/lily/ambitus.cc +++ b/lily/ambitus.cc @@ -217,11 +217,11 @@ Ambitus::brew_molecule (SCM smob) Molecule ledger_lines; int interspaces = Staff_symbol_referencer::line_count (me) - 1; ledger_lines = - Note_head::brew_ledger_lines (me, p_min, interspaces, l_extents, true); + Note_head::brew_ledger_lines (me, p_min, interspaces, l_extents, 0,true); ledger_lines.translate_axis (0.5 * p_min, Y_AXIS); molecule.add_molecule (ledger_lines); ledger_lines = - Note_head::brew_ledger_lines (me, p_max, interspaces, l_extents, true); + Note_head::brew_ledger_lines (me, p_max, interspaces, l_extents, 0, true); ledger_lines.translate_axis (0.5 * p_max, Y_AXIS); molecule.add_molecule (ledger_lines); diff --git a/lily/custos.cc b/lily/custos.cc index 121357c476..7f0bb07f87 100644 --- a/lily/custos.cc +++ b/lily/custos.cc @@ -101,7 +101,7 @@ Custos::brew_molecule (SCM smob) { Molecule ledger_lines = Note_head::brew_ledger_lines (me, pos, interspaces, - molecule.extent (X_AXIS), true); + molecule.extent (X_AXIS), 0, true); molecule.add_molecule (ledger_lines); } return molecule.smobbed_copy (); diff --git a/lily/include/note-head.hh b/lily/include/note-head.hh index 118022c700..15bdcbd4d8 100644 --- a/lily/include/note-head.hh +++ b/lily/include/note-head.hh @@ -23,7 +23,7 @@ public: DECLARE_SCHEME_CALLBACK (brew_molecule, (SCM )); static Interval head_extent (Grob*, Axis); static Molecule brew_ledger_lines (Grob *me, int pos, int interspaces, - Interval x_extent, bool); + Interval x_extent, Real, bool); DECLARE_SCHEME_CALLBACK (brew_ez_molecule, (SCM)); DECLARE_SCHEME_CALLBACK (extent, (SCM,SCM)); static bool has_interface (Grob*); diff --git a/lily/mensural-ligature.cc b/lily/mensural-ligature.cc index e8df8353a7..10fa80d31c 100644 --- a/lily/mensural-ligature.cc +++ b/lily/mensural-ligature.cc @@ -117,7 +117,7 @@ add_ledger_lines (Grob *me, Molecule *out, int pos, Real offs, hd[RIGHT] + right_ledger_protusion); Molecule ledger_lines = Note_head::brew_ledger_lines (me, pos, interspaces, - l_extents, + l_extents,0, ledger_take_space); ledger_lines.translate_axis (offs, Y_AXIS); out->add_molecule (ledger_lines); diff --git a/lily/note-head.cc b/lily/note-head.cc index 5942c1dc6d..5c8688ef19 100644 --- a/lily/note-head.cc +++ b/lily/note-head.cc @@ -66,6 +66,7 @@ Note_head::brew_ledger_lines (Grob *me, int pos, int interspaces, Interval x_extent, + Real left_shorten, bool take_space) { Real inter_f = Staff_symbol_referencer::staff_space (me)/2; @@ -84,22 +85,30 @@ Note_head::brew_ledger_lines (Grob *me, Interval y_extent = Interval (-0.5*(ledgerlinethickness), +0.5*(ledgerlinethickness)); - Box ledger_line (x_extent, y_extent); - Molecule proto_ledger_line = - Lookup::round_filled_box (ledger_line, blotdiameter); + Lookup::round_filled_box (Box (x_extent, y_extent), blotdiameter); - if (!take_space) - proto_ledger_line.set_empty (true); + x_extent[LEFT] += left_shorten; + Molecule proto_first_line = + Lookup::round_filled_box (Box (x_extent, y_extent), blotdiameter); + if (!take_space) + { + proto_ledger_line.set_empty (true); + proto_first_line.set_empty (true); + } Direction dir = (Direction)sign (pos); Real offs = (Staff_symbol_referencer::on_staffline (me, pos)) ? 0.0 : -dir * inter_f; + for (int i = 0; i < line_count; i++) { - Molecule ledger_line (proto_ledger_line); + Molecule ledger_line ((i == 0) + ? proto_first_line + : proto_ledger_line + ); ledger_line.translate_axis (-dir * inter_f * i * 2 + offs, Y_AXIS); molecule.add_molecule (ledger_line); } @@ -134,10 +143,10 @@ internal_brew_molecule (Grob *me, bool with_ledgers) if (with_ledgers && interspaces >= 0 && abs (pos) - interspaces > 1) { - Interval hd = out.extent (X_AXIS); - Real left_ledger_protusion = hd.length ()/4; - Real right_ledger_protusion = left_ledger_protusion; + Interval ledger_size = out.extent (X_AXIS); + ledger_size.widen ( ledger_size.length ()/4); + Real left_shorten =0.0; if (Grob * g = unsmob_grob(me->get_grob_property ("accidental-grob"))) { /* @@ -149,16 +158,21 @@ internal_brew_molecule (Grob *me, bool with_ledgers) Grob *common = g->common_refpoint (me, X_AXIS); Real d = - me->extent (common, X_AXIS)[LEFT] - -g->extent (common, X_AXIS)[RIGHT]; - - left_ledger_protusion = left_ledger_protusion <? (d/2); + (me->extent (common, X_AXIS)[LEFT] + +g->extent (common, X_AXIS)[RIGHT]) /2; + + left_shorten = (-ledger_size[LEFT] + d) >? 0 ; + + /* + TODO: shorten 2 ledger lines for the case natural + + downstem. + */ } - Interval l_extents = Interval (hd[LEFT] - left_ledger_protusion, - hd[RIGHT] + right_ledger_protusion); out.add_molecule (Note_head::brew_ledger_lines (me, pos, interspaces, - l_extents, false)); + ledger_size, + left_shorten, + false)); } return out; } @@ -250,9 +264,8 @@ Note_head::brew_ez_molecule (SCM smob) if (abs (pos) - interspaces > 1) { Interval hd = m.extent (X_AXIS); - Real hw = hd.length ()/4; - Interval extent = Interval (hd[LEFT] - hw, hd[RIGHT] + hw); - m.add_molecule (brew_ledger_lines (me, pos, interspaces, extent, false)); + hd.widen ( hd.length ()/4); + m.add_molecule (brew_ledger_lines (me, pos, interspaces, hd, 0, false)); } return m.smobbed_copy (); diff --git a/lily/vaticana-ligature.cc b/lily/vaticana-ligature.cc index 2368aa36fc..516de50b3f 100644 --- a/lily/vaticana-ligature.cc +++ b/lily/vaticana-ligature.cc @@ -205,7 +205,7 @@ vaticana_add_ledger_lines (Grob *me, Molecule *out, int pos, Real offs, hd[RIGHT] + right_ledger_protusion); Molecule ledger_lines = Note_head::brew_ledger_lines (me, pos, interspaces, - l_extents, + l_extents, 0, ledger_take_space); ledger_lines.translate_axis (offs, Y_AXIS); out->add_molecule (ledger_lines); @@ -260,7 +260,7 @@ vaticana_brew_primitive (Grob *me, bool ledger_take_space) * flexa_width.) */ Real staff_space = Staff_symbol_referencer::staff_space (me); - Real flexa_width = robust_scm2double ( me->get_grob_property ("flexa-width"), 2); + Real flexa_width = robust_scm2double ( me->get_grob_property ("flexa-width"), 2) *staff_space; out = Lookup::blank (Box (Interval (0, 0.5*flexa_width), Interval (0,0))); } diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index f9d50fdf77..2e8121993d 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -28,7 +28,7 @@ ;; this is quite small, but it is very ugly to have ;; accs closer to the previous note than to the next one. - (right-padding . 0.15) + (right-padding . 0.2) (meta . ((interfaces . (item-interface accidental-placement-interface)))) )) diff --git a/scm/paper.scm b/scm/paper.scm index 56110a32bf..2b5e18024f 100644 --- a/scm/paper.scm +++ b/scm/paper.scm @@ -25,7 +25,7 @@ (module-define! m 'interscoreline (* 4 mm)) )) -(define-public (set-staff-size sz) +(define-public (set-global-staff-size sz) "Set the default staff size, where SZ is thought to be in PT." (let* ((old-mod (current-module)) diff --git a/scripts/convert-ly.py b/scripts/convert-ly.py index b896051802..f961537f41 100644 --- a/scripts/convert-ly.py +++ b/scripts/convert-ly.py @@ -1694,6 +1694,13 @@ def conv (str): conversions.append (((2,1,12), conv, """OttavaSpanner -> OttavaBracket""")) +def conv (str): + str =re.sub (r"\(set-staff-size ", r"(set-global-staff-size", str) + return str + +conversions.append (((2,1,13), conv, """set-staff-size -> set-global-staff-size""")) + + ################################ # END OF CONVERSIONS ################################ |