X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftext-engraver.cc;h=56f7b3eae1bcd2267509af96d42efd29cf4ad8a1;hb=d26be70e8f3942df6f13e25a7f79321b9b98d1a8;hp=f93b9d653f9437fbd047838c35e7d07f961ed89c;hpb=622b379cd71af8dde94f68135a489b2536309e6f;p=lilypond.git diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index f93b9d653f..56f7b3eae1 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -3,25 +3,28 @@ source file of the GNU LilyPond music typesetter - (c) 1998 Han-Wen Nienhuys + (c) 1998--1999 Han-Wen Nienhuys */ +#include "dimension-cache.hh" #include "engraver.hh" -#include "g-staff-side.hh" -#include "g-text-item.hh" -#include "text-def.hh" +#include "side-position-interface.hh" +#include "text-item.hh" +#include "musical-request.hh" #include "note-head.hh" #include "stem.hh" -#include "staff-sym.hh" +#include "staff-symbol.hh" +/** + typeset directions that are plain text. + */ class Text_engraver : public Engraver { - Link_array reqs_; - Link_array positionings_; - Link_array texts_; + Link_array reqs_; + Link_array texts_; public: - Text_engraver(); + VIRTUAL_COPY_CONS(Translator); protected: virtual bool do_try_music (Music* m); @@ -31,19 +34,12 @@ protected: virtual void acknowledge_element (Score_element_info); }; -Text_engraver::Text_engraver () -{ - -} bool Text_engraver::do_try_music (Music *m) { - if (Script_req *r = dynamic_cast (m)) + if (Text_script_req *r = dynamic_cast (m)) { - Text_def * t = dynamic_cast (r->scriptdef_p_); - if (!t) - return false; reqs_.push (r); return true; } @@ -56,16 +52,21 @@ Text_engraver::acknowledge_element (Score_element_info i) { if (Note_head *n = dynamic_cast (i.elem_l_)) { - for (int i=0; i < positionings_.size (); i++) + for (int i=0; i < texts_.size (); i++) { - positionings_[i]->add_support (n); + Side_position_interface st (texts_[i]); + st.add_support (n); + if (st.get_axis( ) == X_AXIS + && !texts_[i]->parent_l (Y_AXIS)) + texts_[i]->set_parent (n, Y_AXIS); } } if (Stem *n = dynamic_cast (i.elem_l_)) { - for (int i=0; i < positionings_.size (); i++) + for (int i=0; i < texts_.size (); i++) { - positionings_[i]->add_support (n); + Side_position_interface st(texts_[i]); + st.add_support (n); } } } @@ -75,42 +76,50 @@ Text_engraver::do_process_requests () { for (int i=0; i < reqs_.size (); i++) { - Script_req * r = reqs_[i]; - Text_def * t= dynamic_cast (r->scriptdef_p_); - - G_text_item *text = new G_text_item; - G_staff_side_item *ss = new G_staff_side_item; - ss->set_victim (text); - ss->dir_ = r->dir_; - Scalar p (get_property ("textstyle", 0)); // textStyle? - if (p.length_i ()) - text->style_str_ = p; - text->text_str_ = t->text_str_; + Text_script_req * r = reqs_[i]; - announce_element (Score_element_info (text, r)); - announce_element (Score_element_info (ss, r)); + Text_item *text = new Text_item; + Side_position_interface stafy (text); + + SCM axisprop = get_property ("scriptHorizontal",0); + if (gh_boolean_p (axisprop) && gh_scm2bool (axisprop)) + { + stafy.set_axis (X_AXIS); + // text->set_parent (ss, Y_AXIS); + } + else + stafy.set_axis (Y_AXIS); + + text->set_elt_property ("script-priority", + gh_int2scm (200)); + if (r->get_direction ()) + stafy.set_direction (r->get_direction ()); + + text->text_str_ = r->text_str_; + + if (r->style_str_.length_i ()) + text->set_elt_property ("style", ly_str02scm (r->style_str_.ch_C())); + + SCM empty = get_property ("textEmptyDimension", 0); + if (gh_boolean_p (empty) && gh_scm2bool (empty)) + { + text->set_empty (X_AXIS); + } + + announce_element (Score_element_info (text, r)); texts_.push (text); - positionings_.push (ss); } } void Text_engraver::do_pre_move_processing () { - Staff_symbol* s_l = get_staff_info().staff_sym_l_; for (int i=0; i < texts_.size (); i++) { - if (s_l != 0) - { - positionings_[i]->add_support (s_l); - } - typeset_element (texts_[i]); - typeset_element (positionings_[i]); } texts_.clear (); - positionings_.clear (); } void @@ -120,3 +129,4 @@ Text_engraver::do_post_move_processing () } ADD_THIS_TRANSLATOR(Text_engraver); +