X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fconstrained-breaking.hh;h=e35fcc0bbecf03db6906d6a535f753b85ebcefeb;hb=47db9a3883d726ca53e2133a3b2298f78dd6a32e;hp=e6d898e6a0903e7623143a508c17bfe880aab1ce;hpb=a6bd229f7fe1dc4a03478e14ccc0c0c66b225061;p=lilypond.git diff --git a/lily/include/constrained-breaking.hh b/lily/include/constrained-breaking.hh index e6d898e6a0..e35fcc0bbe 100644 --- a/lily/include/constrained-breaking.hh +++ b/lily/include/constrained-breaking.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2010 Joe Neeman + Copyright (C) 2006--2015 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 @@ -24,16 +24,48 @@ #include "matrix.hh" #include "prob.hh" -struct Line_details { +/* + * 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_; + vector footnote_heights_; /* The footnotes at the bottom of the + page, where each stencil represents + a different footnote. */ + vector in_note_heights_; /* The in-notes under a system, + where each stencil represents + a different in-note. */ + Interval refpoint_extent_; /* The refpoints of the first and last + spaceable staff in this line. min-distance + should be measured from the bottom + refpoint_extent of one line to the + top refpoint_extent of the next. */ + 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) */ + last on a page) */ Real title_padding_; + Real min_distance_; + Real title_min_distance_; Real bottom_padding_; Real space_; /* spring length */ + Real title_space_; Real inverse_hooke_; SCM break_permission_; @@ -54,6 +86,7 @@ struct Line_details { int compressed_nontitle_lines_count_; bool last_markup_line_; bool first_markup_line_; + bool tight_spacing_; Line_details () { @@ -62,8 +95,12 @@ struct Line_details { padding_ = 0; title_padding_ = 0; bottom_padding_ = 0; + min_distance_ = 0; + title_min_distance_ = 0; space_ = 0; + title_space_ = 0; inverse_hooke_ = 1; + tight_spacing_ = false; break_permission_ = ly_symbol2scm ("allow"); page_permission_ = ly_symbol2scm ("allow"); turn_permission_ = ly_symbol2scm ("allow"); @@ -75,9 +112,14 @@ struct Line_details { compressed_nontitle_lines_count_ = 1; last_markup_line_ = false; first_markup_line_ = false; + tallness_ = 0; + refpoint_extent_ = Interval (0, 0); } Line_details (Prob *pb, Output_def *paper); + Real full_height () const; + Real tallness () const; + Real spring_length (Line_details const &next_line) const; }; /* @@ -128,9 +170,15 @@ private: vsize systems_; bool ragged_right_; bool ragged_last_; - Real between_system_space_; - Real before_title_padding_; - Real between_system_padding_; + + Real system_system_min_distance_; + Real system_system_padding_; + Real system_system_space_; + Real system_markup_space_; + Real score_system_min_distance_; + Real score_system_padding_; + Real score_markup_min_distance_; + Real score_markup_padding_; /* the (i,j)th entry is the configuration for breaking between columns i and j */ @@ -143,7 +191,7 @@ private: vector start_; /* the columns at which we might be asked to start breaking */ vector starting_breakpoints_; /* the corresponding index in breaks_ */ - vector all_; + vector all_; vector breaks_; void initialize (); @@ -155,6 +203,6 @@ private: Real combine_demerits (Real force, Real prev_force); bool calc_subproblem (vsize start, vsize systems, vsize max_break_index); - void fill_line_details (Line_details *const, vsize, vsize); + void fill_line_details (Line_details *, vsize, vsize); }; #endif /* CONSTRAINED_BREAKING_HH */