- for (SCM s = props[d]; scm_is_pair (s); s = scm_cdr (s))
- {
- Item *it = dynamic_cast<Item *> (unsmob_grob (scm_car (s)));
-
- if (d == RIGHT && it->break_status_dir () != col_dir)
- {
- it = it -> find_prebroken_piece (col_dir);
-
- }
- /*
- some kind of mismatch, eg. a note column, that is behind a
- linebreak.
- */
- if (!it)
- continue;
-
- Item *it_col = it->get_column ();
- if (d == RIGHT && right_col != it_col)
- continue;
-
- if (Separation_item::has_interface (it))
- {
- extents[d].unite (Separation_item::width (it));
- continue;
- }
-
- if (d == LEFT)
- {
- SCM r = it->get_property ("rest");
- Grob *g = unsmob_grob (r);
- if (!g)
- g = Note_column::first_head (it);
-
- /*
- Ugh. If Stem is switched off, we don't know what the
- first note head will be.
- */
- if (g)
- left_head_wid = g->extent (it_col, X_AXIS);
- }
-
- extents[d].unite (it->extent (it_col, X_AXIS));
- if (d == RIGHT)
- {
- Grob *accs = Note_column::accidentals (it);
- if (!accs)
- accs = Note_column::accidentals (it->get_parent (X_AXIS));
-
- if (accs)
- {
- Interval v
- = Accidental_placement::get_relevant_accidental_extent (accs, it_col, me);
-
- extents[d].unite (v);
- }
- }
- }
-
- if (extents[d].is_empty ())
- extents[d] = Interval (0, 0);
- }
- while (flip (&d) != LEFT);
-
- /*
- We look at the width of the note head, since smaller heads get less space
- eg. a quarter rest gets almost 0.5 ss less horizontal space than a note.