X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpaper-column.cc;h=78b09c3875ba254781959298b420e874565d5813;hb=42bd142680a127b608851b5fa1b2145bb42dcd7a;hp=9993b029ed94b3e782c365733cb1732dba1ab240;hpb=b37e3f652677ae0298423db9fa0e552e5fce0c92;p=lilypond.git diff --git a/lily/paper-column.cc b/lily/paper-column.cc index 9993b029ed..78b09c3875 100644 --- a/lily/paper-column.cc +++ b/lily/paper-column.cc @@ -45,6 +45,12 @@ Paper_column::get_system () const return system_; } +void +Paper_column::set_system (System *s) +{ + system_ = s; +} + Paper_column * Paper_column::get_column () const { @@ -65,6 +71,24 @@ Paper_column::Paper_column (Paper_column const &src, int count) rank_ = src.rank_; } +int +Paper_column::compare (Grob * const &a, + Grob * const &b) +{ + return sign (dynamic_cast (a)->rank_ + - dynamic_cast (b)->rank_); +} + +bool +Paper_column::less_than (Grob *const &a, + Grob *const &b) +{ + Paper_column *pa = dynamic_cast (a); + Paper_column *pb = dynamic_cast (b); + + return pa->rank_ < pb->rank_; +} + Moment Paper_column::when_mom (Grob *me) { @@ -95,7 +119,7 @@ Paper_column::is_used (Grob *me) if (bbm.size ()) return true; - if (Item::is_breakable (me)) + if (Paper_column::is_breakable (me)) return true; if (to_boolean (me->get_property ("used"))) @@ -103,6 +127,12 @@ Paper_column::is_used (Grob *me) return false; } +bool +Paper_column::is_breakable (Grob *me) +{ + return scm_is_symbol (me->get_property ("line-break-permission")); +} + /* Print a vertical line and the rank number, to aid debugging. */ @@ -113,10 +143,10 @@ Paper_column::print (SCM p) { Grob *me = unsmob_grob (p); - std::string r = to_string (Paper_column::get_rank (me)); + string r = to_string (Paper_column::get_rank (me)); Moment *mom = unsmob_moment (me->get_property ("when")); - std::string when = mom ? mom->to_string () : "?/?"; + string when = mom ? mom->to_string () : "?/?"; SCM properties = Font_interface::text_font_alist_chain (me); @@ -157,16 +187,15 @@ Paper_column::before_line_breaking (SCM grob) if (!ga) return SCM_UNSPECIFIED; - Link_array &array (ga->array_reference ()); + vector &array (ga->array_reference ()); - for (int i = array.size (); i--;) + for (vsize i = array.size (); i--;) { Grob *g = array[i]; if (!g || !g->is_live ()) - { // UGH . potentially quadratic. - array.del (i); - } + /* UGH . potentially quadratic. */ + array.erase (array.begin () + i); } return SCM_UNSPECIFIED; @@ -174,8 +203,6 @@ Paper_column::before_line_breaking (SCM grob) ADD_INTERFACE (Paper_column, - - "paper-column-interface", "@code{Paper_column} objects form the top-most X-parents for items." " The are two types of columns: musical columns, where are attached to, and " " non-musical columns, where bar-lines, clefs etc. are attached to. " @@ -193,10 +220,18 @@ ADD_INTERFACE (Paper_column, /* properties */ "between-cols " "bounded-by-me " + "grace-spacing " "line-break-system-details " - "page-penalty " + "line-break-penalty " + "line-break-permission " + "page-break-penalty " + "page-break-permission " + "page-turn-penalty " + "page-turn-permission " + "rhythmic-location " "shortest-playing-duration " "shortest-starter-duration " + "spacing " "used " "when ");