- 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 ();
- }
-
- divide_over ++;
-
- loose = right = r->get_column ();
- }
- while (1);
-
-
-#if 0
- Real rx = right->relative_coordinate (right->get_parent (X_AXIS), X_AXIS);
- Real lx = left->relative_coordinate (left->get_parent (X_AXIS), X_AXIS);
-
- /*
- divide space equally over loose columns.
- */
- int j = 1;
- loose = col;
- while (1)
- {
- SCM between = loose->get_grob_property ("between-cols");
- if (!gh_pair_p (between))
- break;
-
- Paper_column *thiscol = dynamic_cast<Paper_column*> (loose);
-
- thiscol->system_ = which;
- thiscol->translate_axis (lx + j*(rx - lx)/divide_over, X_AXIS);
-
- j ++;
- loose = dynamic_cast<Item*> (unsmob_grob (ly_cdr (between)));
- }
-#else
- /*
- 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.