2 spanner.hh -- part of GNU LilyPond
4 (c) 1996--2005 Han-Wen Nienhuys
13 /** A symbol which is attached between two columns. A spanner is a
14 symbol which spans across several columns, so its final appearance
15 can only be calculated after the breaking problem is solved.
24 Spanner should know about the items which it should consider:
25 e.g. slurs should be steep enough to "enclose" all those items. This
26 is absolutely necessary for beams, since they have to adjust the
27 length of stems of notes they encompass.
29 class Spanner
: public Grob
31 Drul_array
<Item
*> spanned_drul_
;
35 DECLARE_SCHEME_CALLBACK (set_spacing_rods
, (SCM
));
37 Link_array
<Spanner
> broken_intos_
;
39 int get_break_index () const;
40 // todo: move to somewhere else.
41 Real
get_broken_left_end_align () const;
42 void substitute_one_mutable_property (SCM sym
, SCM val
);
43 bool fast_fubstitute_grob_list (SCM sym
, SCM grob_list
);
44 // TODO: make virtual and do this for Items as well.
45 Interval_t
<int> spanned_rank_iv ();
46 void set_bound (Direction d
, Grob
*);
47 Item
*get_bound (Direction d
) const;
49 Spanner (SCM
, Object_key
const *);
50 Spanner (Spanner
const &, int copy_count
);
51 bool is_broken () const;
53 Real
spanner_length () const;
55 static int compare (Spanner
*const &, Spanner
*const &);
56 virtual Grob
*find_broken_piece (System
*) const;
57 virtual SCM
do_derived_mark () const;
58 static bool has_interface (Grob
*);
59 virtual System
*get_system () const;
62 void set_my_columns ();
63 virtual Grob
*clone (int count
) const;
64 virtual void do_break_processing ();
67 void add_bound_item (Spanner
*, Grob
*);
69 bool spanner_less (Spanner
*s1
, Spanner
*s2
);
70 int broken_spanner_index (Spanner
*sp
);