X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fsystem.cc;h=6f363970ff75af4d78a6baecc347970830d9bb12;hb=5f746ae1ae44ebb1c8f0274f3dabea5c052a6a21;hp=6e19d0a6f4f83c8a6613cdcb76f2cd7e7ceab0b1;hpb=c3ff1c6cd20e15e9036ee7120012e05b1d62a46d;p=lilypond.git diff --git a/lily/system.cc b/lily/system.cc index 6e19d0a6f4..6f363970ff 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1996--2007 Han-Wen Nienhuys + (c) 1996--2009 Han-Wen Nienhuys */ #include "system.hh" @@ -13,18 +13,16 @@ #include "axis-group-interface.hh" #include "grob-array.hh" #include "international.hh" +#include "lookup.hh" #include "main.hh" #include "output-def.hh" #include "paper-column.hh" #include "paper-score.hh" #include "paper-system.hh" #include "pointer-group-interface.hh" -#include "spacing-interface.hh" +#include "skyline-pair.hh" #include "staff-symbol-referencer.hh" #include "warn.hh" -#include "lookup.hh" - -extern bool debug_skylines; System::System (System const &src) : Spanner (src) @@ -177,7 +175,7 @@ System::do_break_substitution_and_fixup_refpoints () } if (be_verbose_global) - message (_f ("Element count %d.", count + element_count ())); + message (_f ("Element count %d", count + element_count ()) + "\n"); } SCM @@ -227,11 +225,17 @@ System::break_into_pieces (vector const &breaking) system->set_bound (LEFT, c[0]); system->set_bound (RIGHT, c.back ()); + SCM system_labels = SCM_EOL; for (vsize j = 0; j < c.size (); j++) { c[j]->translate_axis (breaking[i].config_[j], X_AXIS); dynamic_cast (c[j])->system_ = system; + /* collect the column labels */ + SCM col_labels = c[j]->get_property ("labels"); + if (scm_is_pair (col_labels)) + system_labels = scm_append (scm_list_2 (col_labels, system_labels)); } + system->set_property ("labels", system_labels); set_loose_columns (system, &breaking[i]); broken_intos_.push_back (system); @@ -340,7 +344,6 @@ System::get_paper_system () SCM *tail = &exprs; post_processing (); - build_skylines (); vector entries; for (vsize j = 0; j < all_elements_->size (); j++) @@ -388,8 +391,16 @@ System::get_paper_system () exprs)); if (debug_skylines) { - sys_stencil.add_stencil (Lookup::points_to_line_stencil (0.1, skylines_[UP].to_points ()).in_color (255, 0, 0)); - sys_stencil.add_stencil (Lookup::points_to_line_stencil (0.1, skylines_[DOWN].to_points ()).in_color (0, 255, 0)); + Skyline_pair *skylines = Skyline_pair::unsmob (get_property ("vertical-skylines")); + if (skylines) + { + Stencil up + = Lookup::points_to_line_stencil (0.1, (*skylines)[UP].to_points (X_AXIS)); + Stencil down + = Lookup::points_to_line_stencil (0.1, (*skylines)[DOWN].to_points (X_AXIS)); + sys_stencil.add_stencil (up.in_color (255, 0, 0)); + sys_stencil.add_stencil (down.in_color (0, 255, 0)); + } } Grob *left_bound = this->get_bound (LEFT); @@ -399,7 +410,7 @@ System::get_paper_system () /* information that the page breaker might need */ Grob *right_bound = this->get_bound (RIGHT); - pl->set_property ("skylines", skylines_.smobbed_copy ()); + pl->set_property ("vertical-skylines", this->get_property ("vertical-skylines")); pl->set_property ("page-break-permission", right_bound->get_property ("page-break-permission")); pl->set_property ("page-turn-permission", right_bound->get_property ("page-turn-permission")); pl->set_property ("page-break-penalty", right_bound->get_property ("page-break-penalty")); @@ -503,36 +514,15 @@ get_root_system (Grob *me) return dynamic_cast (system_grob); } -void -System::build_skylines () -{ - vector boxes; - for (vsize i = 0; i < all_elements_->size (); i++) - { - Grob *g = all_elements_->grob (i); - if (!unsmob_stencil (g->get_property ("stencil"))) - continue; - - Interval xiv = g->extent (this, X_AXIS); - Interval yiv = g->extent (this, Y_AXIS); - if (!xiv.is_empty () && !yiv.is_empty ()) - boxes.push_back (Box (xiv, yiv)); - } - - SCM horizon_padding_scm = get_property ("skyline-horizontal-padding"); - Real horizon_padding = robust_scm2double (horizon_padding_scm, 0); - skylines_[UP] = Skyline (boxes, horizon_padding, X_AXIS, UP); - skylines_[DOWN] = Skyline (boxes, horizon_padding, X_AXIS, DOWN); -} - - ADD_INTERFACE (System, - "This is the toplevel object: each object in a score " - "ultimately has a System object as its X and Y parent. ", + "This is the top-level object: Each object in a score" + " ultimately has a @code{System} object as its X and" + " Y@tie{}parent.", /* properties */ "all-elements " "columns " + "labels " "pure-Y-extent " "spaceable-staves " "skyline-distance "