- if (!staff_extent.contains (pos - sign (pos)))
- {
- Interval head_size = h->extent (common[X_AXIS], X_AXIS);
- Interval ledger_size = head_size;
- ledger_size.widen (ledger_size.length () * length_fraction);
-
- Interval max_size = reqs[h->get_column ()->get_rank ()]
- [Direction (sign (pos))].ledger_extent_;
-
- ledger_size.intersect (max_size);
- Real left_shorten = 0.0;
- if (Grob *g = unsmob_grob (h->get_object ("accidental-grob")))
- {
- Interval accidental_size = g->extent (common[X_AXIS], X_AXIS);
- Real d
- = linear_combination (Drul_array<Real> (accidental_size[RIGHT],
- head_size[LEFT]),
- 0.0);
-
- left_shorten = max (-ledger_size[LEFT] + d, 0.0);
-
- /*
- TODO: shorten 2 ledger lines for the case natural +
- downstem.
- */
- }
-
- ledgers.add_stencil (brew_ledger_lines (staff, pos, staff_extent,
- halfspace,
- ledgerlinethickness,
- ledger_size,
- left_shorten));
- }
+ if (!staff_extent.contains (pos - sign (pos)) && !staff_extent.is_empty ())
+ {
+ Interval head_size = h->extent (common[X_AXIS], X_AXIS);
+ Interval ledger_size = head_size;
+ ledger_size.widen (ledger_size.length () * length_fraction);
+
+ Interval max_size = reqs[h->get_column ()->get_rank ()]
+ [Direction (sign (pos))].ledger_extent_;
+
+ ledger_size.intersect (max_size);
+ Real left_shorten = 0.0;
+ if (Grob *g = unsmob_grob (h->get_object ("accidental-grob")))
+ {
+ Interval accidental_size = g->extent (common[X_AXIS], X_AXIS);
+ Real d
+ = linear_combination (Drul_array<Real> (accidental_size[RIGHT],
+ head_size[LEFT]),
+ 0.0);
+
+ left_shorten = max (-ledger_size[LEFT] + d, 0.0);
+
+ /*
+ TODO: shorten 2 ledger lines for the case natural +
+ downstem.
+ */
+ }
+
+ ledgers.add_stencil (brew_ledger_lines (staff, pos, staff_extent,
+ halfspace,
+ ledgerlinethickness,
+ ledger_size,
+ left_shorten));
+ }