X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpaper-column.cc;h=24d76a163abbacbafa63eabc06948b0a08da79b2;hb=223ad8f5799657a5b628d862dd927f4197486b02;hp=0eb40d1b97a48c8297ff378de172d65de6cd5072;hpb=74599ededac15a341e2ee7641cde63b055a5d4e6;p=lilypond.git diff --git a/lily/paper-column.cc b/lily/paper-column.cc index 0eb40d1b97..24d76a163a 100644 --- a/lily/paper-column.cc +++ b/lily/paper-column.cc @@ -1,9 +1,20 @@ /* - paper-column.cc -- implement Paper_column + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2010 Han-Wen Nienhuys - (c) 1997--2007 Han-Wen Nienhuys + 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 . */ #include "paper-column.hh" @@ -18,6 +29,7 @@ #include "output-def.hh" #include "paper-score.hh" #include "pointer-group-interface.hh" +#include "rhythmic-head.hh" #include "separation-item.hh" #include "skyline-pair.hh" #include "spaceable-grob.hh" @@ -45,6 +57,12 @@ Paper_column::get_rank (Grob const *me) return dynamic_cast (me)->rank_; } +void +Paper_column::set_rank (int rank) +{ + rank_ = rank; +} + System * Paper_column::get_system () const { @@ -313,13 +331,40 @@ Paper_column::before_line_breaking (SCM grob) return SCM_UNSPECIFIED; } +/* FIXME: This is a hack that we use to identify columns that used to + contain note-heads but whose note-heads were moved by one of the ligature + engravers. Once the ligature engravers are fixed to behave nicely, this + function can be removed. +*/ +bool +Paper_column::is_extraneous_column_from_ligature (Grob *me) +{ + if (!is_musical (me)) + return false; + + // If all the note-heads that I think are my children actually belong + // to another column, then I am extraneous. + extract_grob_set (me, "elements", elts); + bool has_notehead = false; + for (vsize i = 0; i < elts.size (); i++) + { + if (Rhythmic_head::has_interface (elts[i])) + { + has_notehead = true; + if (dynamic_cast (elts[i])->get_column () == me) + return false; + } + } + return has_notehead; +} + ADD_INTERFACE (Paper_column, "@code{Paper_column} objects form the top-most X@tie{}parents" - " for items. There are two types of columns: musical columns," - " where are attached to, and non-musical columns, where" - " bar-lines, clefs, etc., are attached to. The spacing engine" - " determines the X@tie{}positions of these objects.\n" + " for items. There are two types of columns: musical and" + " non-musical, to which musical and non-musical objects are" + " attached respectively. The spacing engine determines the" + " X@tie{}positions of these objects.\n" "\n" "They are numbered, the first (leftmost) is column@tie{}0." " Numbering happens before line breaking, and columns are not" @@ -331,11 +376,13 @@ ADD_INTERFACE (Paper_column, /* properties */ "between-cols " "bounded-by-me " + "full-measure-extra-space " "grace-spacing " "labels " "line-break-system-details " "line-break-penalty " "line-break-permission " + "maybe-loose " "page-break-penalty " "page-break-permission " "page-turn-penalty "