X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpaper-column.cc;h=a518e02c8f384d9ee36f8cab5f13ab2a70961984;hb=f07f18bef861d6afa48b941b7579079d5d40df80;hp=6b8d7a43647af9da6ce14d81f0783dbb57a8e556;hpb=e2ee132e3b4c99b62fd5ba2fc5cdf89bae5638da;p=lilypond.git diff --git a/lily/paper-column.cc b/lily/paper-column.cc index 6b8d7a4364..a518e02c8f 100644 --- a/lily/paper-column.cc +++ b/lily/paper-column.cc @@ -3,23 +3,26 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2004 Han-Wen Nienhuys + (c) 1997--2005 Han-Wen Nienhuys */ -#include "moment.hh" #include "paper-column.hh" + +#include "moment.hh" #include "paper-score.hh" #include "warn.hh" #include "axis-group-interface.hh" #include "spaceable-grob.hh" -#include "stencil.hh" -#include "text-item.hh" +#include "text-interface.hh" #include "lookup.hh" #include "font-interface.hh" -#include "paper-def.hh" - - +#include "output-def.hh" +Grob * +Paper_column::clone (int count) const +{ + return new Paper_column (*this, count); +} ADD_INTERFACE (Paper_column, "paper-column-interface", "@code{Paper_column} objects form the top-most X-parents for items. " @@ -33,10 +36,9 @@ ADD_INTERFACE (Paper_column, "paper-column-interface", " Since many columns go unused, you should only use the rank field to\n" " get ordering information. Two adjacent columns may have\n" " non-adjacent numbers.\n" - "\n" - , + "\n", "between-cols when bounded-by-me " - "shortest-playing-duration shortest-starter-duration"); + "page-penalty shortest-playing-duration shortest-starter-duration"); void Paper_column::do_break_processing () @@ -45,42 +47,45 @@ Paper_column::do_break_processing () Item::do_break_processing (); } - int -Paper_column::get_rank (Grob*me) +Paper_column::get_rank (Grob *me) { - return dynamic_cast (me)->rank_; + return dynamic_cast (me)->rank_; } -System* +System * Paper_column::get_system () const { return system_; } -Paper_column* +Paper_column * Paper_column::get_column () const { - return (Paper_column*) (this); + return (Paper_column *) (this); } -Paper_column::Paper_column (SCM l) - : Item (l) // guh.? +Paper_column::Paper_column (SCM l, Object_key const *key) + : Item (l, key) // guh.? { - system_=0; + system_ = 0; rank_ = -1; } +Paper_column::Paper_column (Paper_column const &src, int count) + : Item (src, count) +{ + system_ = 0; + rank_ = src.rank_; +} + Moment -Paper_column::when_mom (Grob*me) +Paper_column::when_mom (Grob *me) { SCM m = me->get_property ("when"); - Moment s (0); - if (unsmob_moment (m)) - { - return *unsmob_moment (m); - } - return s; + if (Moment *when = unsmob_moment (m)) + return *when; + return Moment (0); } bool @@ -94,41 +99,47 @@ Paper_column::is_musical (Grob *me) } return s != Moment (0); } - bool -Paper_column::is_used (Grob*me) +Paper_column::is_used (Grob *me) { - return is_pair (me->get_property ("elements")) || Item::is_breakable (me) - || is_pair (me->get_property ("bounded-by-me")) - ; + return scm_is_pair (me->get_property ("elements")) || Item::is_breakable (me) + || scm_is_pair (me->get_property ("bounded-by-me")); } /* - Print a vertical line and the rank number, to aid debugging. - */ + Print a vertical line and the rank number, to aid debugging. +*/ -MAKE_SCHEME_CALLBACK (Paper_column,print,1); +MAKE_SCHEME_CALLBACK (Paper_column, print, 1); SCM Paper_column::print (SCM p) { Grob *me = unsmob_grob (p); String r = to_string (Paper_column::get_rank (me)); + + Moment *mom = unsmob_moment (me->get_property ("when")); + String when = mom ? mom->to_string () : "?/?"; + SCM properties = Font_interface::text_font_alist_chain (me); - SCM scm_mol = Text_item::interpret_markup (me->get_paper ()->self_scm (), - properties, - scm_makfrom0str (r.to_str0 ())); + SCM scm_mol = Text_interface::interpret_markup (me->get_layout ()->self_scm (), + properties, + scm_makfrom0str (r.to_str0 ())); + SCM when_mol = Text_interface::interpret_markup (me->get_layout ()->self_scm (), + properties, + scm_makfrom0str (when.to_str0 ())); Stencil t = *unsmob_stencil (scm_mol); + t.add_at_edge (Y_AXIS, DOWN, *unsmob_stencil (when_mol), 0.1, 0.1); t.align_to (X_AXIS, CENTER); t.align_to (Y_AXIS, DOWN); - + Stencil l = Lookup::filled_box (Box (Interval (-0.01, 0.01), Interval (-2, -1))); t.add_stencil (l); - return t.smobbed_copy (); + return t.smobbed_copy (); } /* @@ -136,9 +147,9 @@ Paper_column::print (SCM p) columns are kept "alive". Unfortunately, when spanners are suicided, this falls apart again. (sigh.) - THIS IS BROKEN KLUDGE. WE SHOULD INVENT SOMETHING BETTER. - */ -MAKE_SCHEME_CALLBACK (Paper_column,before_line_breaking,1); + THIS IS BROKEN KLUDGE. WE SHOULD INVENT SOMETHING BETTER. +*/ +MAKE_SCHEME_CALLBACK (Paper_column, before_line_breaking, 1); SCM Paper_column::before_line_breaking (SCM grob) { @@ -147,13 +158,13 @@ Paper_column::before_line_breaking (SCM grob) SCM c = me->get_property ("bounded-by-me"); SCM *ptrptr = &c; - while (is_pair (*ptrptr)) + while (scm_is_pair (*ptrptr)) { - Grob * g = unsmob_grob (ly_car (*ptrptr)); + Grob *g = unsmob_grob (scm_car (*ptrptr)); - if (!g || !g->live ()) + if (!g || !g->is_live ()) { - *ptrptr = ly_cdr (*ptrptr); + *ptrptr = scm_cdr (*ptrptr); } else {