X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fgrob.cc;h=b27350b92996e694a9acffe8ff94cbb2513a8e86;hb=0a0da41d935f7744e7ffd934034f25c40d4c59be;hp=9479f17f41179cb3fbdc3cf6769fb533ffbbde9a;hpb=494225fd3ef286f1e52d22553fc79c12ee1865a4;p=lilypond.git diff --git a/lily/grob.cc b/lily/grob.cc index 9479f17f41..b27350b929 100644 --- a/lily/grob.cc +++ b/lily/grob.cc @@ -1,9 +1,20 @@ /* - grob.cc -- implement Grob + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2009 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 "grob.hh" @@ -11,6 +22,7 @@ #include #include "align-interface.hh" +#include "axis-group-interface.hh" #include "input.hh" #include "international.hh" #include "item.hh" @@ -19,6 +31,7 @@ #include "music.hh" #include "output-def.hh" #include "pointer-group-interface.hh" +#include "program-option.hh" #include "stencil.hh" #include "stream-event.hh" #include "system.hh" @@ -142,6 +155,15 @@ Grob::get_print_stencil () const retval = Stencil (retval.extent_box (), expr); } + /* process whiteout */ + if (to_boolean (get_property ("whiteout"))) + { + /* Call the scheme procedure stencil-whiteout in scm/stencils.scm */ + /* to add a round-filled-box stencil to the stencil list */ + retval + = *unsmob_stencil (scm_call_1 (ly_lily_module_constant ("stencil-whiteout"), + retval.smobbed_copy())); + } } return retval; @@ -533,6 +555,9 @@ Grob::fixup_refpoint () void Grob::warning (string s) const { + if (get_program_option ("warning-as-error")) + error (s); + SCM cause = self_scm (); while (Grob *g = unsmob_grob (cause)) cause = g->get_property ("cause"); @@ -559,6 +584,9 @@ Grob::name () const void Grob::programming_error (string s) const { + if (get_program_option ("warning-as-error")) + error (s); + SCM cause = self_scm (); while (Grob *g = unsmob_grob (cause)) cause = g->get_property ("cause"); @@ -569,7 +597,7 @@ Grob::programming_error (string s) const if (Music *m = unsmob_music (cause)) m->origin ()->message (s); else if (Stream_event *ev = unsmob_stream_event (cause)) - ev->origin ()->warning (s); + ev->origin ()->message (s); else ::message (s); } @@ -606,8 +634,8 @@ ADD_INTERFACE (Grob, " properties are variables that are specific to one grob." " Typically, lists of other objects, or results from" " computations are stored in mutable properties. In" - " particular, every call to @code{set-grob-property} (or its" - " C++ equivalent) sets a mutable property.\n" + " particular, every call to @code{ly:grob-set-property!}" + " (or its C++ equivalent) sets a mutable property.\n" "\n" "The properties @code{after-line-breaking} and" " @code{before-line-breaking} are dummies that are not" @@ -643,6 +671,7 @@ ADD_INTERFACE (Grob, "staff-symbol " "stencil " "transparent " + "whiteout " ); /**************************************************************** @@ -703,7 +732,6 @@ Grob::stencil_width (SCM smob) } - Grob * common_refpoint_of_list (SCM elist, Grob *common, Axis a) { @@ -741,3 +769,18 @@ robust_relative_extent (Grob *me, Grob *refpoint, Axis a) return ext; } +// Checks whether there is a vertical alignment in the chain of +// parents between this and commony. +bool +Grob::check_cross_staff (Grob *commony) +{ + if (Align_interface::has_interface (commony)) + return true; + + for (Grob *g = this; g && g != commony; g = g->get_parent (Y_AXIS)) + if (Align_interface::has_interface (g)) + return true; + + return false; +} +