X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fconstrained-breaking.hh;h=1562dc1d17eddc17d224820d15769afa3b780699;hb=58d1c2f39c091da0325d54b19476ee7532d8889f;hp=2478afcacaa0281638fc1deed859a4b0ef7e8155;hpb=3f8485925e8c879fe4c9ae86acef9804126c3b91;p=lilypond.git diff --git a/lily/include/constrained-breaking.hh b/lily/include/constrained-breaking.hh index 2478afcaca..1562dc1d17 100644 --- a/lily/include/constrained-breaking.hh +++ b/lily/include/constrained-breaking.hh @@ -4,7 +4,7 @@ source file of the GNU LilyPond music typesetter - (c) 2006--2007 Joe Neeman + (c) 2006--2009 Joe Neeman */ #ifndef CONSTRAINED_BREAKING_HH @@ -15,9 +15,13 @@ #include "prob.hh" struct Line_details { + Grob *last_column_; Real force_; Interval extent_; /* Y-extent of the system */ - Real padding_; /* compulsory space after this system (if we're not last on a page) */ + + Real padding_; /* compulsory space after this system (if we're not + last on a page) */ + Real title_padding_; Real bottom_padding_; Real space_; /* spring length */ Real inverse_hooke_; @@ -29,10 +33,22 @@ struct Line_details { Real page_penalty_; Real turn_penalty_; + bool title_; + + /* The page-breaker deals with forbidden page breaks by "compressing" + two Line_detailses into one. The following fields are used by the + page-breaker to keep track of this. If the number of fields needed + by the page-breaker grows, it might be a good idea to create a separate + class. */ + int compressed_lines_count_; + int compressed_nontitle_lines_count_; + Line_details () { + last_column_ = 0; force_ = infinity_f; padding_ = 0; + title_padding_ = 0; bottom_padding_ = 0; space_ = 0; inverse_hooke_ = 1; @@ -42,23 +58,12 @@ struct Line_details { break_penalty_ = 0; page_penalty_ = 0; turn_penalty_ = 0; + title_ = false; + compressed_lines_count_ = 1; + compressed_nontitle_lines_count_ = 1; } - Line_details (Prob *pb) - { - force_ = 0; - extent_ = unsmob_stencil (pb->get_property ("stencil")) ->extent (Y_AXIS); - padding_ = 0; - bottom_padding_ = 0; - space_ = 1.0; - inverse_hooke_ = 1.0; - break_permission_ = ly_symbol2scm ("allow"); - page_permission_ = pb->get_property ("page-break-permission"); - turn_permission_ = pb->get_property ("page-turn-permission"); - break_penalty_ = 0; - page_penalty_ = robust_scm2double (pb->get_property ("page-break-penalty"), 0); - turn_penalty_ = robust_scm2double (pb->get_property ("page-turn-penalty"), 0); - } + Line_details (Prob *pb, Output_def *paper); }; /* @@ -109,6 +114,9 @@ private: vsize systems_; bool ragged_right_; bool ragged_last_; + Real between_system_space_; + Real before_title_padding_; + Real between_system_padding_; /* the (i,j)th entry is the configuration for breaking between columns i and j */ @@ -132,6 +140,7 @@ private: Real combine_demerits (Real force, Real prev_force); - bool calc_subproblem(vsize start, vsize systems, vsize max_break_index); + bool calc_subproblem (vsize start, vsize systems, vsize max_break_index); + void fill_line_details (Line_details *const, vsize, vsize); }; #endif /* CONSTRAINED_BREAKING_HH */