+void
+Separation_item::set_skyline_distance (Drul_array<Item *> items,
+ Real padding)
+{
+ Drul_array<Skyline*> lines;
+ Direction d = LEFT;
+
+ do
+ {
+ SCM prop = items[d]->get_property ("skylines");
+ lines[d] = Skyline::unsmob (index_get_cell (prop, -d));
+ }
+ while (flip (&d) != LEFT);
+
+ Real dist = padding + lines[LEFT]->distance (*lines[RIGHT]);
+ if (dist > 0)
+ {
+ Rod rod;
+
+ rod.item_drul_ = items;
+
+ rod.distance_ = dist;
+ rod.add_to_cols ();
+ }
+}
+
+bool
+Separation_item::set_distance (Drul_array<Item *> items,
+ Real padding)
+{
+ if (!Item::is_non_musical (items[LEFT])
+ && !Item::is_non_musical (items[RIGHT]))
+ {
+ set_skyline_distance (items, padding);
+ return true;
+ }
+
+ Interval li (Separation_item::width (items[LEFT]));
+ Interval ri (Separation_item::conditional_width (items[RIGHT], items[LEFT]));
+ if (!li.is_empty () && !ri.is_empty ())
+ {
+ Rod rod;
+
+ rod.item_drul_ = items;
+
+ rod.distance_ = li[RIGHT] - ri[LEFT] + padding;
+
+ if (rod.distance_ > 0)
+ rod.add_to_cols ();
+ return true;
+ }
+ return false;
+}
+