X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fconstrained-breaking.hh;h=ff60adf34cadea06f2726be8a1750d778268a153;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=b0c1f7891d09979b8244cf8052f32b9ccb9e4141;hpb=cca6d7c50f0fb86afbf457fb3ccae2ad526bb393;p=lilypond.git diff --git a/lily/include/constrained-breaking.hh b/lily/include/constrained-breaking.hh index b0c1f7891d..ff60adf34c 100644 --- a/lily/include/constrained-breaking.hh +++ b/lily/include/constrained-breaking.hh @@ -4,13 +4,12 @@ source file of the GNU LilyPond music typesetter - (c) 2006 Joe Neeman + (c) 2006--2008 Joe Neeman */ #ifndef CONSTRAINED_BREAKING_HH #define CONSTRAINED_BREAKING_HH -#include "break-algorithm.hh" #include "lily-guile.hh" #include "matrix.hh" #include "prob.hh" @@ -18,7 +17,9 @@ struct Line_details { 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 bottom_padding_; Real space_; /* spring length */ Real inverse_hooke_; @@ -30,6 +31,8 @@ struct Line_details { Real page_penalty_; Real turn_penalty_; + bool title_; + Line_details () { force_ = infinity_f; @@ -43,14 +46,16 @@ struct Line_details { break_penalty_ = 0; page_penalty_ = 0; turn_penalty_ = 0; + title_ = false; } Line_details (Prob *pb) { force_ = 0; extent_ = unsmob_stencil (pb->get_property ("stencil")) ->extent (Y_AXIS); - padding_ = 0; - space_ = 1.0; + padding_ = robust_scm2double (pb->get_property ("next-padding"), 0); + bottom_padding_ = 0; + space_ = robust_scm2double (pb->get_property ("next-space"), 1.0); inverse_hooke_ = 1.0; break_permission_ = ly_symbol2scm ("allow"); page_permission_ = pb->get_property ("page-break-permission"); @@ -58,6 +63,7 @@ struct Line_details { 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); + title_ = to_boolean (pb->get_property ("is-title")); } }; @@ -90,24 +96,25 @@ struct Constrained_break_node /* A dynamic programming solution to breaking scores into lines */ -class Constrained_breaking : public Break_algorithm +class Constrained_breaking { public: - vector solve (); - Constrained_breaking (); - Constrained_breaking (vector const &start_col_posns); + vector solve (vsize start, vsize end, vsize sys_count); + vector best_solution (vsize start, vsize end); + vector line_details (vsize start, vsize end, vsize sys_count); - vector get_solution (vsize start, vsize end, vsize sys_count); - vector get_best_solution (vsize start, vsize end); - vector get_details (vsize start, vsize end, vsize sys_count); - int get_max_systems (vsize start, vsize end); - int get_min_systems (vsize start, vsize end); + Constrained_breaking (Paper_score *ps); + Constrained_breaking (Paper_score *ps, vector const &start_col_posns); - void resize (vsize systems); + int max_system_count (vsize start, vsize end); + int min_system_count (vsize start, vsize end); private: + Paper_score *pscore_; vsize valid_systems_; vsize systems_; + bool ragged_right_; + bool ragged_last_; /* the (i,j)th entry is the configuration for breaking between columns i and j */ @@ -123,6 +130,9 @@ private: vector all_; vector breaks_; + void initialize (); + void resize (vsize systems); + Column_x_positions space_line (vsize start_col, vsize end_col); vsize prepare_solution (vsize start, vsize end, vsize sys_count);