X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fconstrained-breaking.hh;h=c461859f7c92e6a549ddeb5d8bc8bb4602f1dab8;hb=4a6773dd60ef6ef481e37b00049c9eedcb5b8193;hp=48771545e4c2dfe644a8a23e74caaf3ae6c2f46f;hpb=7b032d0e90b828bee401bc27febd3cc1a736c0c2;p=lilypond.git diff --git a/lily/include/constrained-breaking.hh b/lily/include/constrained-breaking.hh index 48771545e4..c461859f7c 100644 --- a/lily/include/constrained-breaking.hh +++ b/lily/include/constrained-breaking.hh @@ -1,10 +1,20 @@ /* - constrained-breaking.hh -- declare a line breaker that - supports limits on the number of systems + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2010 Joe Neeman - (c) 2006--2009 Joe Neeman + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #ifndef CONSTRAINED_BREAKING_HH @@ -14,12 +24,33 @@ #include "matrix.hh" #include "prob.hh" +/* + * Begin/rest-of-line hack. This geometrical shape is a crude approximation + * of Skyline, but it is better than a rectangle. + */ +struct Line_shape +{ + Interval begin_; + Interval rest_; + + Line_shape () + { + } + Line_shape (Interval begin, Interval rest); + Line_shape piggyback (Line_shape mount, Real padding) const; +}; + struct Line_details { + Grob *last_column_; Real force_; - Interval extent_; /* Y-extent of the system */ + Line_shape shape_; + Real tallness_; /* Y-extent, adjusted according to begin/rest-of-line*/ Real padding_; /* compulsory space after this system (if we're not last on a page) */ + Real title_padding_; + Real min_distance_; + Real title_min_distance_; Real bottom_padding_; Real space_; /* spring length */ Real inverse_hooke_; @@ -40,14 +71,23 @@ struct Line_details { class. */ int compressed_lines_count_; int compressed_nontitle_lines_count_; + bool last_markup_line_; + bool first_markup_line_; + bool tight_spacing_; + Real first_refpoint_offset_; Line_details () { + last_column_ = 0; force_ = infinity_f; padding_ = 0; + title_padding_ = 0; bottom_padding_ = 0; + min_distance_ = 0; + title_min_distance_ = 0; space_ = 0; inverse_hooke_ = 1; + tight_spacing_ = false; break_permission_ = ly_symbol2scm ("allow"); page_permission_ = ly_symbol2scm ("allow"); turn_permission_ = ly_symbol2scm ("allow"); @@ -57,26 +97,15 @@ struct Line_details { title_ = false; compressed_lines_count_ = 1; compressed_nontitle_lines_count_ = 1; + last_markup_line_ = false; + first_markup_line_ = false; + tallness_ = 0; + first_refpoint_offset_ = 0; } - Line_details (Prob *pb) - { - force_ = 0; - extent_ = unsmob_stencil (pb->get_property ("stencil")) ->extent (Y_AXIS); - 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"); - 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); - title_ = to_boolean (pb->get_property ("is-title")); - compressed_lines_count_ = 1; - compressed_nontitle_lines_count_ = title_ ? 0 : 1; - } + Line_details (Prob *pb, Output_def *paper); + Real full_height () const; + Real tallness () const; }; /* @@ -128,6 +157,14 @@ private: bool ragged_right_; bool ragged_last_; + Real between_system_min_distance_; + Real between_system_padding_; + Real between_system_space_; + Real between_scores_system_min_distance_; + Real between_scores_system_padding_; + Real before_title_min_distance_; + Real before_title_padding_; + /* the (i,j)th entry is the configuration for breaking between columns i and j */ Matrix lines_; @@ -150,6 +187,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 */