X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fgrob-info.cc;h=aab0d3cb8d61b352cf381969d479982d7300f08e;hb=b872748c6aa8bb721ced458691b38ac2fac5dfc8;hp=f4042ec2968f6705661258deb0ed63826b0ce54d;hpb=e37010af17faa8b185de836664b6544bd29dc1d0;p=lilypond.git diff --git a/lily/grob-info.cc b/lily/grob-info.cc index f4042ec296..aab0d3cb8d 100644 --- a/lily/grob-info.cc +++ b/lily/grob-info.cc @@ -1,16 +1,40 @@ /* - grob-info.cc -- implement Grob_info + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2015 Han-Wen Nienhuys - (c) 1997--2004 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" +#include "context.hh" #include "grob-info.hh" +#include "item.hh" #include "music.hh" +#include "spanner.hh" +#include "stream-event.hh" #include "translator-group.hh" -#include "context.hh" + +Grob_info::Grob_info (Translator *t, Grob *g) +{ + origin_trans_ = t; + grob_ = g; + + /* + assert here, because this is easier to debug. + */ + assert (g); +} Grob_info::Grob_info () { @@ -18,23 +42,59 @@ Grob_info::Grob_info () origin_trans_ = 0; } -Music* -Grob_info::music_cause () +Stream_event * +Grob_info::event_cause () const { - SCM cause = grob_->get_grob_property ("cause"); - return unsmob_music (cause); + SCM cause = grob_->get_property ("cause"); + return unsmob (cause); } -Link_array -Grob_info::origin_contexts (Translator* end) const +vector +Grob_info::origin_contexts (Translator *end) const { - Context * t = origin_trans_->daddy_context_; - Link_array r; - do { - r.push (t); - t = t->daddy_context_; - } while (t && t != end->daddy_context_); - + Context *t = origin_trans_->context (); + vector r; + do + { + r.push_back (t); + t = t->get_parent_context (); + } + while (t && t != end->context ()); + return r; } - + +Context * +Grob_info::context () const +{ + return origin_trans_->context (); +} + +Spanner * +Grob_info::spanner () const +{ + return dynamic_cast (grob_); +} + +Item * +Grob_info::item () const +{ + return dynamic_cast (grob_); +} + +Stream_event * +Grob_info::ultimate_event_cause () const +{ + SCM cause = grob_->self_scm (); + while (unsmob (cause)) + { + cause = unsmob (cause)->get_property ("cause"); + } + return unsmob (cause); +} + +bool +Grob_info::less (Grob_info i, Grob_info j) +{ + return Grob::less (i.grob (), j.grob ()); +}