X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fgrob-info.cc;h=45bacb9bb907285b6061817ff74606c0b9e35b2a;hb=f420654e26a36d5f70580490d42ad3063ab2dba7;hp=38d074dde677a189672b8ab3b74f0766c6272e52;hpb=58bcc84c9480dae1b21bc24d8396b91fe19e0131;p=lilypond.git diff --git a/lily/grob-info.cc b/lily/grob-info.cc index 38d074dde6..45bacb9bb9 100644 --- a/lily/grob-info.cc +++ b/lily/grob-info.cc @@ -3,37 +3,51 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2005 Han-Wen Nienhuys + (c) 1997--2007 Han-Wen Nienhuys */ +#include "context.hh" #include "grob-info.hh" - -#include "grob.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; + start_end_ = START; + + /* + assert here, because this is easier to debug. + */ + assert (g); +} Grob_info::Grob_info () { grob_ = 0; + start_end_ = START; origin_trans_ = 0; } -Music * -Grob_info::music_cause () +Stream_event * +Grob_info::event_cause () const { SCM cause = grob_->get_property ("cause"); - return unsmob_music (cause); + return unsmob_stream_event (cause); } -Link_array +vector Grob_info::origin_contexts (Translator *end) const { Context *t = origin_trans_->context (); - Link_array r; + vector r; do { - r.push (t); + r.push_back (t); t = t->get_parent_context (); } while (t && t != end->context ()); @@ -41,3 +55,31 @@ Grob_info::origin_contexts (Translator *end) const 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_grob (cause)) + { + cause = unsmob_grob (cause)->get_property ("cause"); + } + return unsmob_stream_event (cause); +}