- Drul_array<Molecule> endings;
- endings[LEFT] = lookup_l()->afm_find ("noteheads-ledgerending");
- Molecule *e = &endings[LEFT];
- endings[RIGHT] = *e;
-
- Real thick = e->dim_[Y_AXIS].length();
- Real len = e->dim_[X_AXIS].length () - thick;
+ Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
+ Real inter_f = Staff_symbol_referencer::staff_space (me)/2;
+ int line_count = (abs (pos) < interspaces)
+ ? 0
+ : (abs (pos) - interspaces) / 2;
+ Molecule molecule = Molecule();
+
+
+ if (line_count)
+ {
+ Real ledgerlinethickness =
+ Staff_symbol::get_ledger_line_thickness (staff);
+ Real blotdiameter = ledgerlinethickness;
+ Interval y_extent =
+ Interval (-0.5*(ledgerlinethickness),
+ +0.5*(ledgerlinethickness));
+ Molecule proto_ledger_line =
+ Lookup::round_filled_box (Box (x_extent, y_extent), blotdiameter);
+
+ 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 ((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);
+ }
+ }