X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fspanner.hh;h=91153b79b8e43b5ed959fc379003ad869f638add;hb=3920b02188c3c6b0190626a936c586fe687a4a2d;hp=1152be157b5320dddd94591407f6917342d4c3f3;hpb=1a66290a98e7de8d6d41485b5b71a9f7e1fe35c7;p=lilypond.git diff --git a/lily/include/spanner.hh b/lily/include/spanner.hh index 1152be157b..91153b79b8 100644 --- a/lily/include/spanner.hh +++ b/lily/include/spanner.hh @@ -1,59 +1,75 @@ /* spanner.hh -- part of GNU LilyPond - (c) 1996,97 Han-Wen Nienhuys + (c) 1996--2006 Han-Wen Nienhuys */ #ifndef SPANNER_HH #define SPANNER_HH -#include "lily-proto.hh" -#include "score-elem.hh" +#include "grob.hh" +#include "rod.hh" /** A symbol which is attached between two columns. A spanner is a - symbol which spans across several columns, so its final appearance - can only be calculated after the breaking problem is solved. - - Examples - - \begin{itemize} - \item (de)crescendo - \item slur - \item beam - \item bracket - \end{itemize} - - - Spanner should know about the items which it should consider: - e.g. slurs should be steep enough to "enclose" all those items. This - is absolutely necessary for beams, since they have to adjust the - length of stems of notes they encompass. - - */ -class Spanner:public virtual Score_elem { + symbol which spans across several columns, so its final appearance + can only be calculated after the breaking problem is solved. + + Examples + + * (de)crescendo + * slur + * beam + * bracket + + Spanner should know about the items which it should consider: + e.g. slurs should be steep enough to "enclose" all those items. This + is absolutely necessary for beams, since they have to adjust the + length of stems of notes they encompass. +*/ +class Spanner : public Grob +{ + Drul_array spanned_drul_; + vsize break_index_; + + DECLARE_CLASSNAME(Spanner); + public: - PCol *left_col_l_, *right_col_l_; - - /* *************** */ - DECLARE_MY_RUNTIME_TYPEINFO; - virtual Spanner* spanner() { return this; } - Spanner(); - bool broken_b() const; - Spanner* find_broken_piece (Line_of_score*)const; + DECLARE_SCHEME_CALLBACK (set_spacing_rods, (SCM)); + + vector broken_intos_; + + vsize get_break_index () const; + + // todo: move to somewhere else. + Real get_broken_left_end_align () const; + void substitute_one_mutable_property (SCM sym, SCM val); + bool fast_substitute_grob_array (SCM sym, Grob_array *); + + virtual Interval_t spanned_rank_iv (); + void set_bound (Direction d, Grob *); + Item *get_bound (Direction d) const; + + Spanner (SCM, Object_key const *); + Spanner (Spanner const &, int copy_count); + bool is_broken () const; + void do_break (); + Real spanner_length () const; + + static int compare (Spanner *const &, Spanner *const &); + static bool less (Spanner *const &, Spanner *const &); + virtual Grob *find_broken_piece (System *) const; + virtual void derived_mark () const; + static bool has_interface (Grob *); + virtual System *get_system () const; + protected: - void set_my_columns(); - SCORE_ELEM_CLONE(Spanner); - - /** - this is virtual; for instance, Line_of_score overrides it. - */ - virtual void break_into_pieces (bool); - - Link_array broken_into_l_arr_; - - virtual void do_break_processing(); - virtual Interval do_width()const; - virtual void do_print()const; - virtual Line_of_score*line_l()const; + void set_my_columns (); + virtual Grob *clone (int count) const; + virtual void do_break_processing (); }; + +void add_bound_item (Spanner *, Grob *); + +bool spanner_less (Spanner *s1, Spanner *s2); +int broken_spanner_index (Spanner *sp); #endif