- int divide_over = 1;
- Item *loose = dynamic_cast<Item*> (posns->loose_cols_[i]);
- Paper_column* col = dynamic_cast<Paper_column*> (loose);
-
- if (col->system_)
- continue;
-
- Item * left = 0;
- Item * right = 0;
- do
- {
- SCM between = loose->get_grob_property ("between-cols");
- if (!gh_pair_p (between))
- break;
-
-
- Item * l=dynamic_cast<Item*> (unsmob_grob (ly_car (between)));
- Item * r=dynamic_cast<Item*> (unsmob_grob (ly_cdr (between)));
-
- if (!(l && r))
- break ;
-
- if (!left && l)
- {
- left = l->get_column ();
- if (!left->get_system ())
- left = left->find_prebroken_piece (RIGHT);
- }
-
- divide_over ++;
- loose = right = r->get_column ();
- }
- while (1);
-
- if (!right->get_system ())
- right = right->find_prebroken_piece (LEFT);
-
- /*
- We divide the remaining space of the column over the left and
- right side. At the moment, we
-
- */
- Grob * common = right->common_refpoint (left, X_AXIS);
-
- Real rx = right->extent(common, X_AXIS)[LEFT];
- Real lx = left->extent(common, X_AXIS)[RIGHT];
- Real total_dx = rx - lx;
- Interval cval =col->extent (col, X_AXIS);
-
- /*
-
- We put it in the middle. This is not an ideal solution -- the
- break alignment code inserts a fixed space before the clef
- (about 1 SS), while the space following the clef is
- flexible. In tight situations, the clef will almost be on top
- of the following note.
-
- */
- Real dx = rx-lx - cval.length ();
- if (total_dx < 2* cval.length ())
- {
- /*
- todo: this is discontinuous. I'm too tired to
- invent a sliding mechanism. Duh.