X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Falign-interface.hh;h=a17f5235511e75c876d3f337ca64d77c3cb33625;hb=2944a83e59f487894a214769392ce27289accb71;hp=f570a60509603c28bf7a2e2f42ff61ba34089fdb;hpb=45bae7c4e36d595cf545c85a53ff14c95bf4cf9c;p=lilypond.git diff --git a/lily/include/align-interface.hh b/lily/include/align-interface.hh index f570a60509..a17f523551 100644 --- a/lily/include/align-interface.hh +++ b/lily/include/align-interface.hh @@ -1,63 +1,55 @@ /* - align-interface.hh -- declare Align_interface - - source file of the GNU LilyPond music typesetter - - (c) 2000 Han-Wen Nienhuys - - */ + This file is part of LilyPond, the GNU music typesetter. -#ifndef ALIGN_INTERFACE_HH -#define ALIGN_INTERFACE_HH - -#include "axes.hh" -#include "lily-proto.hh" - -/* - Order elements top to bottom/left to right/right to left etc. - - - ******* - - element properties + Copyright (C) 2000--2012 Han-Wen Nienhuys - stacking-dir -- stack contents of elements in which direction ? + 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. - align-dir -- Which side to align? -1: left side, 0: centered (around - center_l_ if not nil, or around center of width), 1: right side + 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. - threshold -- (cons MIN MAX), where MIN and MAX are dimensions in - staffspace - - alignment-done -- boolean to administrate whether we've done the alignment already (to ensure that the process is done only once) - - group-center-element -- element which will be at the center of the group - after aligning (when using Align_interface::center_on_element) - - elements -- to be aligned elements + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . +*/ - axes -- list of axis numbers. Should contain only one number. - - ******* - - Reads the following from its elements - - - minimum-space -- (cons LEFT RIGHT) +#ifndef ALIGN_INTERFACE_HH +#define ALIGN_INTERFACE_HH - extra-space -- (cons LEFT RIGHT) - -*/ -struct Align_interface { - static Real alignment_callback (Score_element *,Axis); - static void do_side_processing (Score_element*,Axis a); - static void set_axis (Score_element*,Axis); - static Axis axis (Score_element*) ; - static void add_element (Score_element*,Score_element*); - static int get_count (Score_element*,Score_element*); - static void set_interface (Score_element*); - static bool has_interface (Score_element*); - static Real center_on_element (Score_element *c, Axis); +#include "lily-proto.hh" +#include "std-vector.hh" +#include "grob-interface.hh" + +class Align_interface +{ +public: + DECLARE_SCHEME_CALLBACK (align_to_minimum_distances, (SCM)); + DECLARE_SCHEME_CALLBACK (align_to_ideal_distances, (SCM)); + DECLARE_SCHEME_CALLBACK (full_score_pure_minimum_translations, (SCM)); + static void align_elements_to_minimum_distances (Grob *, Axis a); + static void align_elements_to_ideal_distances (Grob *); + static vector get_minimum_translations (Grob *, vector const &, Axis a); + static vector get_minimum_translations_without_min_dist (Grob *, vector const &, Axis a); + static vector get_pure_minimum_translations (Grob *, vector const &, + Axis a, int start, int end); + static void set_ordered (Grob *); + static Axis axis (Grob *); + static void add_element (Grob *, Grob *); + static int get_count (Grob *, Grob *); + + DECLARE_GROB_INTERFACE (); + + static Real get_pure_child_y_translation (Grob *, Grob *child, int start, int end); + +protected: + static vector internal_get_minimum_translations (Grob *, vector const &, + Axis a, + bool include_fixed_spacing, + bool pure, int start, int end); }; #endif /* ALIGN_INTERFACE_HH */