X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fspanner.hh;h=339280466640b8b7953bac84660047402faedd68;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=828391d70bdf9f53e45b6c7f713e9312105ad387;hpb=339ea28cd7e4f8a1c1ca7c1d4dfe803a3f4c03e6;p=lilypond.git diff --git a/lily/include/spanner.hh b/lily/include/spanner.hh index 828391d70b..94e98760c0 100644 --- a/lily/include/spanner.hh +++ b/lily/include/spanner.hh @@ -1,81 +1,78 @@ /* spanner.hh -- part of GNU LilyPond - (c) 1996--1999 Han-Wen Nienhuys + (c) 1996--2008 Han-Wen Nienhuys */ #ifndef SPANNER_HH #define SPANNER_HH -#include "lily-proto.hh" -#include "score-element.hh" -#include "drul-array.hh" +#include "grob.hh" #include "rod.hh" -struct Breaking_information -{ - Line_of_score *line_l_; - Spanner * broken_spanner_l_; - Drul_array bounds_; - Breaking_information () - { - line_l_ =0; - broken_spanner_l_ =0; - bounds_[LEFT] = bounds_[RIGHT] =0; - } -}; - -class Axis_group_spanner; /** 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. + symbol which spans across several columns, so its final appearance + can only be calculated after the breaking problem is solved. - Examples + Examples - \begin{itemize} - \item (de)crescendo - \item slur - \item beam - \item bracket - \end{itemize} - + * (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. + 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); - */ -class Spanner : public virtual Score_element { public: - Drul_array spanned_drul_; - Link_array broken_into_l_arr_; - void set_bounds (Direction d, Item*); + DECLARE_SCHEME_CALLBACK (set_spacing_rods, (SCM)); + DECLARE_SCHEME_CALLBACK (bounds_width, (SCM)); + + vector broken_intos_; + vsize get_break_index () const; + Spanner *broken_neighbor (Direction d) const; - Spanner (); - Spanner (Spanner const &); - bool broken_b () const; + // todo: move to somewhere else. + Real get_broken_left_end_align () const; + void substitute_one_mutable_property (SCM sym, SCM val); - virtual Array get_rods () const; - virtual Array get_springs () const; - virtual Spanner* find_broken_piece (Line_of_score*) const; -protected: - void set_my_columns (); - VIRTUAL_COPY_CONS(Score_element); + Interval_t spanned_time () const; + virtual Interval_t spanned_rank_interval () const; + void set_bound (Direction d, Grob *); + Item *get_bound (Direction d) const; - /** - this is virtual; for instance, Line_of_score overrides it. - */ - virtual void break_into_pieces (); + Spanner (SCM); + Spanner (Spanner const &); + bool is_broken () const; + void do_break (); + Real spanner_length () const; - friend Axis_group_spanner; // UGH + 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; + DECLARE_GROB_INTERFACE(); + virtual System *get_system () const; - virtual void do_space_processing (); - void handle_broken_dependents (); +protected: + void set_my_columns (); + virtual Grob *clone () const; virtual void do_break_processing (); - virtual Interval do_width () const; - virtual void do_print () const; - virtual Line_of_score*line_l () const; + bool fast_substitute_grob_array (SCM sym, Grob_array *); }; + +void add_bound_item (Spanner *, Grob *); + +bool spanner_less (Spanner *s1, Spanner *s2); +int broken_spanner_index (Spanner const *sp); #endif