X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fgrob-info.cc;h=be6fd79e17a290f57ca4a206b018a1710f89d259;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=edd020796e7f416f4123d032d96433647d7ea4ad;hpb=94189ec2b8da6d7e89dc619c646a927adead9b19;p=lilypond.git diff --git a/lily/grob-info.cc b/lily/grob-info.cc index edd020796e..be6fd79e17 100644 --- a/lily/grob-info.cc +++ b/lily/grob-info.cc @@ -3,40 +3,83 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2001 Han-Wen Nienhuys + (c) 1997--2008 Han-Wen Nienhuys */ +#include "context.hh" #include "grob-info.hh" -#include "request.hh" -#include "translator.hh" +#include "item.hh" +#include "music.hh" +#include "spanner.hh" +#include "stream-event.hh" #include "translator-group.hh" -Grob_info::Grob_info (Grob*s_l, Music *r_l) +Grob_info::Grob_info (Translator *t, Grob *g) { - elem_l_ = s_l; - req_l_ = r_l; - origin_trans_l_ = 0; -} + origin_trans_ = t; + grob_ = g; + start_end_ = START; + /* + assert here, because this is easier to debug. + */ + assert (g); +} -Grob_info::Grob_info() +Grob_info::Grob_info () { - elem_l_ = 0; - req_l_ = 0; - origin_trans_l_ = 0; + grob_ = 0; + start_end_ = START; + origin_trans_ = 0; } +Stream_event * +Grob_info::event_cause () const +{ + SCM cause = grob_->get_property ("cause"); + return unsmob_stream_event (cause); +} -Link_array -Grob_info::origin_trans_l_arr (Translator* end) const +vector +Grob_info::origin_contexts (Translator *end) const { - Translator * t = origin_trans_l_; - Link_array r; - do { - r.push (t); - t = t->daddy_trans_l_; - } while (t && t != end->daddy_trans_l_); - + 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_grob (cause)) + { + cause = unsmob_grob (cause)->get_property ("cause"); + } + return unsmob_stream_event (cause); +}