X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fspanner.hh;h=255b21eaa82a245e10d81b48bceaa0227a3551ae;hb=31653bf1d61a33ef8bc8c871d60c6b3452d04d28;hp=3bb547b528e1898401a8049128fa1b05e684cc6d;hpb=3f374e66968308461daa390a7aeed0b013bfe33d;p=lilypond.git diff --git a/lily/include/spanner.hh b/lily/include/spanner.hh index 3bb547b528..255b21eaa8 100644 --- a/lily/include/spanner.hh +++ b/lily/include/spanner.hh @@ -1,54 +1,67 @@ /* - spanner.hh -- part of LilyPond + spanner.hh -- part of GNU LilyPond - (c) 1996,97 Han-Wen Nienhuys + (c) 1996--1998 Han-Wen Nienhuys */ #ifndef SPANNER_HH #define SPANNER_HH -#include "proto.hh" -#include "staff-elem.hh" +#include "lily-proto.hh" +#include "score-element.hh" +#include "drul-array.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. +/** 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 - - (de)crescendo - - slur - - beam - - bracket + \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. + 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. - */ -struct Spanner:Staff_elem { - PCol *left_col_l_, *right_col_l_; - - - /* *************** */ - - Spanner(); - virtual Interval width()const; - void do_print()const; - - Spanner *broken_at(PCol *c1, PCol *c2) const; - virtual Spanner* spanner() { return this; } + */ +class Spanner : public virtual Score_element { +public: + Drul_array spanned_drul_; + void set_bounds (Direction d, Item*); + + DECLARE_MY_RUNTIME_TYPEINFO; + Spanner (); + Spanner (Spanner const &); + bool broken_b () const; + virtual Array get_rods () const; + Spanner* find_broken_piece (Line_of_score*) const; protected: + void set_my_columns (); + SCORE_ELEMENT_CLONE (Spanner); - /** - clone a piece of this spanner. - PRE - c1 >= start, c2 <= stop + /** + this is virtual; for instance, Line_of_score overrides it. */ - virtual Spanner *do_break_at( PCol *c1, PCol *c2) const=0; - NAME_MEMBERS(Spanner); + virtual void break_into_pieces (); + + Link_array broken_into_l_arr_; + Spanner * unbroken_original_l_; + + virtual void do_unlink (); + virtual void do_junk_links (); + virtual void do_brew_molecule (); + virtual void do_space_processing (); + virtual void do_break_processing (); + virtual Interval do_width () const; + virtual void do_print () const; + virtual Line_of_score*line_l () const; }; #endif