X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftext-spanner-engraver.cc;h=1b66b68f121139530e98d60b42f32fdc553b7666;hb=90e4d7057f3857da049dfda3d130017d4719bd6b;hp=c18bf098f2e03855dbfa4096b9d29331805abd96;hpb=a31ea2385b8587fe364eb6ce0874ece14f2218f2;p=lilypond.git diff --git a/lily/text-spanner-engraver.cc b/lily/text-spanner-engraver.cc index c18bf098f2..1b66b68f12 100644 --- a/lily/text-spanner-engraver.cc +++ b/lily/text-spanner-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2011 Jan Nieuwenhuizen + Copyright (C) 2000--2015 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -34,8 +34,8 @@ public: TRANSLATOR_DECLARATIONS (Text_spanner_engraver); protected: virtual void finalize (); - DECLARE_TRANSLATOR_LISTENER (text_span); - DECLARE_ACKNOWLEDGER (note_column); + void listen_text_span (Stream_event *); + void acknowledge_note_column (Grob_info); void stop_translation_timestep (); void process_music (); @@ -47,7 +47,8 @@ private: void typeset_all (); }; -Text_spanner_engraver::Text_spanner_engraver () +Text_spanner_engraver::Text_spanner_engraver (Context *c) + : Engraver (c) { finished_ = 0; current_event_ = 0; @@ -55,7 +56,6 @@ Text_spanner_engraver::Text_spanner_engraver () event_drul_.set (0, 0); } -IMPLEMENT_TRANSLATOR_LISTENER (Text_spanner_engraver, text_span); void Text_spanner_engraver::listen_text_span (Stream_event *ev) { @@ -69,28 +69,30 @@ Text_spanner_engraver::process_music () if (event_drul_[STOP]) { if (!span_) - event_drul_[STOP]->origin ()->warning (_ ("cannot find start of text spanner")); + event_drul_[STOP]->origin ()->warning (_ ("cannot find start of text spanner")); else - { - finished_ = span_; - announce_end_grob (finished_, SCM_EOL); - span_ = 0; - current_event_ = 0; - } + { + finished_ = span_; + announce_end_grob (finished_, SCM_EOL); + span_ = 0; + current_event_ = 0; + } } if (event_drul_[START]) { if (current_event_) - event_drul_[START]->origin ()->warning (_ ("already have a text spanner")); + event_drul_[START]->origin ()->warning (_ ("already have a text spanner")); else - { - current_event_ = event_drul_[START]; - span_ = make_spanner ("TextSpanner", event_drul_[START]->self_scm ()); - - Side_position_interface::set_axis (span_, Y_AXIS); - event_drul_[START] = 0; - } + { + current_event_ = event_drul_[START]; + span_ = make_spanner ("TextSpanner", event_drul_[START]->self_scm ()); + if (Direction d = to_dir (current_event_->get_property ("direction"))) + span_->set_property ("direction", scm_from_int (d)); + + Side_position_interface::set_axis (span_, Y_AXIS); + event_drul_[START] = 0; + } } } @@ -100,10 +102,10 @@ Text_spanner_engraver::typeset_all () if (finished_) { if (!finished_->get_bound (RIGHT)) - { - Grob *e = unsmob_grob (get_property ("currentMusicalColumn")); - finished_->set_bound (RIGHT, e); - } + { + Grob *e = unsmob (get_property ("currentMusicalColumn")); + finished_->set_bound (RIGHT, e); + } finished_ = 0; } } @@ -113,7 +115,7 @@ Text_spanner_engraver::stop_translation_timestep () { if (span_ && !span_->get_bound (LEFT)) { - Grob *e = unsmob_grob (get_property ("currentMusicalColumn")); + Grob *e = unsmob (get_property ("currentMusicalColumn")); span_->set_bound (LEFT, e); } @@ -139,33 +141,39 @@ Text_spanner_engraver::acknowledge_note_column (Grob_info info) if (span_) { Pointer_group_interface::add_grob (span_, - ly_symbol2scm ("note-columns"), - info.grob ()); + ly_symbol2scm ("note-columns"), + info.grob ()); if (!span_->get_bound (LEFT)) - add_bound_item (span_, info.grob ()); + add_bound_item (span_, info.grob ()); } else if (finished_) { Pointer_group_interface::add_grob (finished_, - ly_symbol2scm ("note-columns"), - info.grob ()); + ly_symbol2scm ("note-columns"), + info.grob ()); if (!finished_->get_bound (RIGHT)) - add_bound_item (finished_, info.grob ()); + add_bound_item (finished_, info.grob ()); } } -ADD_ACKNOWLEDGER (Text_spanner_engraver, note_column); + +void +Text_spanner_engraver::boot () +{ + ADD_LISTENER (Text_spanner_engraver, text_span); + ADD_ACKNOWLEDGER (Text_spanner_engraver, note_column); +} ADD_TRANSLATOR (Text_spanner_engraver, - /* doc */ - "Create text spanner from an event.", + /* doc */ + "Create text spanner from an event.", - /* create */ - "TextSpanner ", + /* create */ + "TextSpanner ", - /* read */ - "currentMusicalColumn ", + /* read */ + "currentMusicalColumn ", - /* write */ - "" - ); + /* write */ + "" + );