diff options
author | Joe Neeman <joeneeman@gmail.com> | 2011-08-17 22:56:02 -0700 |
---|---|---|
committer | Joe Neeman <joeneeman@gmail.com> | 2011-08-28 12:14:12 -0700 |
commit | 01f24004c5a9984eaa6c644881505349e49b3a4a (patch) | |
tree | 590a838f817db54a375037bacbb1ebf0494686ce /lily/paper-column-engraver.cc | |
parent | 525a57c5bc0ce6f92af465d1aa9653c5a8db82e1 (diff) |
Fix 1286.
Diffstat (limited to 'lily/paper-column-engraver.cc')
-rw-r--r-- | lily/paper-column-engraver.cc | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/lily/paper-column-engraver.cc b/lily/paper-column-engraver.cc index 31b8023bef..3d4ee9fd95 100644 --- a/lily/paper-column-engraver.cc +++ b/lily/paper-column-engraver.cc @@ -61,8 +61,18 @@ Paper_column_engraver::finalize () if (command_column_) { + // At the end of the score, allow page breaks and turns by default, but... + command_column_->set_property ("page-break-permission", ly_symbol2scm ("allow")); + command_column_->set_property ("page-turn-permission", ly_symbol2scm ("allow")); + + // ...allow the user to override them. + handle_manual_breaks (true); + + // On the other hand, line breaks are always allowed at the end of a score, + // even if they try to stop us. if (!scm_is_symbol (command_column_->get_property ("line-break-permission"))) command_column_->set_property ("line-break-permission", ly_symbol2scm ("allow")); + system_->set_bound (RIGHT, command_column_); } } @@ -147,7 +157,7 @@ Paper_column_engraver::listen_label (Stream_event *ev) } void -Paper_column_engraver::process_music () +Paper_column_engraver::handle_manual_breaks (bool only_do_permissions) { for (vsize i = 0; i < break_events_.size (); i++) { @@ -170,7 +180,7 @@ Paper_column_engraver::process_music () SCM pen = break_events_[i]->get_property ("break-penalty"); SCM perm = break_events_[i]->get_property ("break-permission"); - if (scm_is_number (pen)) + if (!only_do_permissions && scm_is_number (pen)) { Real new_pen = robust_scm2double (cur_pen, 0.0) + scm_to_double (pen); command_column_->set_property (pen_str.c_str (), scm_from_double (new_pen)); @@ -179,6 +189,12 @@ Paper_column_engraver::process_music () else command_column_->set_property (perm_str.c_str (), perm); } +} + +void +Paper_column_engraver::process_music () +{ + handle_manual_breaks (false); for (vsize i = 0; i < label_events_.size (); i++) { |