X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fpage-layout-problem.hh;h=a98d2643542895b0ab125a0e4b229907fbdfafcd;hb=47db9a3883d726ca53e2133a3b2298f78dd6a32e;hp=629528bb53db51c0f4ea5acee8646b59abda545a;hpb=54b02666750062788185bd3f99e644d621e348c2;p=lilypond.git diff --git a/lily/include/page-layout-problem.hh b/lily/include/page-layout-problem.hh index 629528bb53..a98d264354 100644 --- a/lily/include/page-layout-problem.hh +++ b/lily/include/page-layout-problem.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2009--2011 Joe Neeman + Copyright (C) 2009--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 @@ -22,50 +22,58 @@ #include "simple-spacer.hh" #include "skyline.hh" +#include "stencil.hh" class Page_layout_problem { public: - Page_layout_problem (Paper_book*, SCM page, SCM systems, int footnote_count); + Page_layout_problem (Paper_book *, SCM page, SCM systems); SCM solution (bool ragged); + SCM fixed_force_solution (Real force); void set_header_height (Real); void set_footer_height (Real); - static bool read_spacing_spec (SCM spec, Real* dest, SCM sym); + Real force () const; + static bool read_spacing_spec (SCM spec, Real *dest, SCM sym); static bool is_spaceable (Grob *g); static SCM get_details (Grob *g); + static vector get_footnote_grobs (SCM lines); static vsize get_footnote_count (SCM lines); - static SCM get_footnotes_from_lines (SCM lines, int counter, Paper_book *pb); - static Stencil* get_footnote_separator_stencil (Output_def *paper); + static SCM get_footnotes_from_lines (SCM lines); + static void add_footnotes_to_lines (SCM lines, int counter, Paper_book *pb); + static Stencil get_footnote_separator_stencil (Output_def *paper); static SCM get_spacing_spec (Grob *before, Grob *after, bool pure, int start, int end); static Real get_fixed_spacing (Grob *before, Grob *after, int spaceable_index, bool pure, int start, int end); - static void add_footnotes_to_footer (SCM footnotes, Stencil *foot, Paper_book *pb); + static Stencil add_footnotes_to_footer (SCM footnotes, Stencil foot, Paper_book *pb); protected: - void append_system (System*, Spring const&, Real indent, Real padding); - void append_prob (Prob*, Spring const&, Real padding); + void append_system (System *, Spring const &, Real indent, Real padding); + void append_prob (Prob *, Spring const &, Real padding); - void solve_rod_spring_problem (bool ragged); + void solve_rod_spring_problem (bool ragged, Real fixed_force); SCM find_system_offsets (); - void distribute_loose_lines (vector const&, vector const&, Real, Real); + void distribute_loose_lines (vector const &, vector const &, Real, Real); - static void build_system_skyline (vector const&, vector const&, Skyline* up, Skyline* down); - static vector filter_dead_elements (vector const&); + static void build_system_skyline (vector const &, vector const &, Skyline *up, Skyline *down); + static vector filter_dead_elements (vector const &); // This is a union (in spirit). // Either staves must be empty or prob must be null. - typedef struct Element { + typedef struct Element + { Prob *prob; - vector staves; + vector staves; vector min_offsets; - // Store the appropriate '*-*-spacing 'padding, - // for spacing any adjacent loose line + // Store the appropriate '*-*-spacing 'padding, and skyline-distance, + // considering indentation, from the previous system. + Real min_distance; Real padding; - Element (vector const& a, vector const& o, Real p) + Element (vector const &a, vector const &o, Real m, Real p) { staves = a; min_offsets = o; + min_distance = m; padding = p; prob = 0; } @@ -77,23 +85,27 @@ protected: } } Element; - static Interval first_staff_extent (Element const&); - static Interval last_staff_extent (Element const&); - static Interval prob_extent (Prob*); - static SCM get_details (Element const&); - static SCM details_get_property (SCM details, const char*); - static void alter_spring_from_spacing_spec (SCM spec, Spring* spring); - static void mark_as_spaceable (Grob*); + static Interval first_staff_extent (Element const &); + static Interval last_staff_extent (Element const &); + static Interval prob_extent (Prob *); + static SCM get_details (Element const &); + static SCM details_get_property (SCM details, const char *); + static void alter_spring_from_spacing_spec (SCM spec, Spring *spring); + static void mark_as_spaceable (Grob *); vector springs_; vector elements_; vector solution_; + Real force_; Skyline bottom_skyline_; + Real bottom_loose_baseline_; Real page_height_; Real header_height_; Real footer_height_; Real header_padding_; Real footer_padding_; + Real in_note_padding_; + Direction in_note_direction_; }; #endif /* PAGE_LAYOUT_HH */