X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftext-engraver.cc;h=e1748316b35b9a3311dcba1515fb04aaa04edcfb;hb=61c4b07cddc6231c3ca4b45a0aa86d27e25110b9;hp=ba48473450e0da8ea869d48cb70cac022a7e183d;hpb=a341f45c2cf1494d291ebb21fd64d5c679ee6e19;p=lilypond.git diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index ba48473450..e1748316b3 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -3,23 +3,24 @@ 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 "staff-side.hh" +#include "text-item.hh" +#include "musical-request.hh" #include "note-head.hh" #include "stem.hh" -#include "staff-sym.hh" +#include "staff-symbol.hh" class Text_engraver : public Engraver { - Link_array reqs_; - Link_array positionings_; - Link_array texts_; + Link_array reqs_; + Link_array positionings_; + Link_array texts_; public: Text_engraver(); VIRTUAL_COPY_CONS(Translator); @@ -39,11 +40,8 @@ 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; } @@ -75,16 +73,40 @@ 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_); + Text_script_req * r = reqs_[i]; + + Text_item *text = new Text_item; + Staff_side_item *ss = new Staff_side_item; - G_text_item *text = new G_text_item; - G_staff_side_item *ss = new G_staff_side_item; ss->set_victim (text); + ss->set_elt_property (script_priority_scm_sym, + gh_int2scm (200)); + ss->dir_ = r->dir_; - text->text_str_ = t->text_str_; + text->text_str_ = r->text_str_; + + if (r->style_str_.empty_b ()) + { + Scalar p (get_property ("textStyle", 0)); + if (p.length_i ()) + text->style_str_ = p; + } + else + text->style_str_ = r->style_str_; + + Scalar padding = get_property ("textScriptPadding", 0); + if (padding.length_i() && padding.isnum_b ()) + { + ss->set_elt_property (padding_scm_sym, gh_double2scm(Real(padding))); + } + Scalar empty = get_property ("textEmptyDimension", 0); + if (empty.to_bool ()) + { + text->dim_cache_[X_AXIS]->set_empty (true); + } + announce_element (Score_element_info (text, r)); announce_element (Score_element_info (ss, r)); @@ -96,14 +118,8 @@ Text_engraver::do_process_requests () 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]); }