vector<Extra_collision_info> get_extra_encompass_infos () const;
Real move_away_from_staffline (Real y, Grob *on_staff) const;
- Grob *breakable_bound_item (Direction) const;
+ Interval breakable_bound_extent (Direction) const;
};
void set_slur_control_points (Grob *me);
#include <queue>
+#include "axis-group-interface.hh"
#include "accidental-interface.hh"
#include "beam.hh"
#include "clef.hh"
return best;
}
-Grob *
-Slur_score_state::breakable_bound_item (Direction d) const
+Interval
+Slur_score_state::breakable_bound_extent (Direction d) const
{
Grob *col = slur_->get_bound (d)->get_column ();
+ Interval ret;
+ ret.set_empty ();
extract_grob_set (slur_, "encompass-objects", extra_encompasses);
{
Item *item = dynamic_cast<Item *> (extra_encompasses[i]);
if (item && col == item->get_column ())
- return item;
+ ret.unite (robust_relative_extent (item, common_[X_AXIS], X_AXIS));
}
- return 0;
+ return ret;
}
/*
Real x = 0;
Real y = 0;
- if (Grob *g = breakable_bound_item (d))
- {
- x = robust_relative_extent (g, common_[X_AXIS], X_AXIS)[RIGHT];
- }
- else if (d == RIGHT)
- x = robust_relative_extent (extremes_[d].bound_, common_[X_AXIS], X_AXIS)[d];
- else
- x = slur_->get_broken_left_end_align ();
+ Interval ext = breakable_bound_extent (d);
+ if (ext.is_empty ())
+ ext = Axis_group_interface::
+ generic_bound_extent (extremes_[d].bound_,
+ common_[X_AXIS], X_AXIS);
+ x = ext[-d];
Grob *col = (d == LEFT) ? columns_[0] : columns_.back ();
return broken_intos_.size ();
}
-/*
- If this is a broken spanner, return the amount the left end is to be
- shifted horizontally so that the spanner starts after the initial
- clef and key on the staves. This is necessary for ties, slurs,
- crescendo and decrescendo signs, for example.
-*/
-Real
-Spanner::get_broken_left_end_align () const
-{
- Paper_column *sc = dynamic_cast<Paper_column *> (spanned_drul_[LEFT]->get_column ());
-
- // Relevant only if left span point is first column in line
- if (sc != NULL
- && sc->break_status_dir () == RIGHT)
- {
- /*
- We used to do a full search for the Break_align_item.
- But that doesn't make a difference, since the Paper_column
- is likely to contain only a Break_align_item.
- */
- return sc->extent (sc, X_AXIS)[RIGHT];
- }
-
- return 0.0;
-}
-
void
Spanner::derived_mark () const
{