X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Fclef-engraver.cc;h=64443eb18b6f187c1aa790d0725a312a8f95976b;hb=f988425624a6f6d1a48aea0ac0c1c84ff0857e56;hp=616e4c55f6d8353c9d2b14731437ef9f2400d3bb;hpb=c8e915a4f8c09d65db760d0637251e043320732a;p=lilypond.git diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index 616e4c55f6..64443eb18b 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -1,4 +1,5 @@ /* + clef-engraver.cc -- implement Clef_engraver source file of the GNU LilyPond music typesetter @@ -10,23 +11,22 @@ #include -#include "staff-symbol-referencer.hh" +#include "translator-group.hh" +#include "key-item.hh" +#include "local-key-item.hh" #include "bar.hh" - +#include "note-head.hh" +#include "staff-symbol-referencer.hh" #include "debug.hh" #include "command-request.hh" -#include "timing-translator.hh" -#include "note-head.hh" -#include "key-item.hh" -#include "local-key-item.hh" -#include "array.hh" #include "engraver.hh" #include "direction.hh" #include "side-position-interface.hh" #include "item.hh" /// where is c-0 in the staff? -class Clef_engraver : public Engraver { +class Clef_engraver : public Engraver +{ Item * clef_p_; Item * octavate_p_; Clef_change_req * clef_req_l_; @@ -51,15 +51,11 @@ public: Clef_engraver(); bool first_b_; - - Protected_scm current_settings_; }; Clef_engraver::Clef_engraver() { - current_settings_ = SCM_EOL; - first_b_ = true; clef_glyph_ = SCM_EOL; clef_p_ = 0; @@ -109,13 +105,14 @@ Clef_engraver::set_type (String s) c0_position_i_ -= (int) octave_dir_ * 7; - SCM basic = get_property ("basicClefItemProperties"); - current_settings_ = gh_cons (gh_cons (ly_symbol2scm ("glyph"), clef_glyph_), basic); - current_settings_ = - gh_cons (gh_cons (ly_symbol2scm ("c0-position"), - gh_int2scm (c0_position_i_)), - current_settings_); - + SCM basic = ly_symbol2scm ("basicClefItemProperties"); + SCM c0 = ly_symbol2scm ("c0-position"); + SCM gl = ly_symbol2scm ("glyph"); + daddy_trans_l_->execute_single_pushpop_property (basic, gl, SCM_UNDEFINED); + daddy_trans_l_->execute_single_pushpop_property (basic, c0, SCM_UNDEFINED); + daddy_trans_l_->execute_single_pushpop_property (basic, gl, clef_glyph_); + daddy_trans_l_->execute_single_pushpop_property (basic, c0, gh_int2scm (c0_position_i_)); + return true; } @@ -126,22 +123,24 @@ Clef_engraver::set_type (String s) void Clef_engraver::acknowledge_element (Score_element_info info) { - if (dynamic_cast(info.elem_l_) - && gh_string_p (clef_glyph_)) - create_clef(); - - Item * it_l =dynamic_cast (info.elem_l_); - if (it_l) + Item * item =dynamic_cast (info.elem_l_); + if (item) { - if (dynamic_cast(it_l) - || dynamic_cast (it_l)) + if (Bar::has_interface (info.elem_l_) + && gh_string_p (clef_glyph_)) + create_clef(); + + + if (Note_head::has_interface (item) + || Local_key_item::has_interface (item)) { - Staff_symbol_referencer_interface si (it_l); - si.set_position (int (si.position_f ()) + c0_position_i_); + int p = int (Staff_symbol_referencer::position_f (item)) + c0_position_i_; + Staff_symbol_referencer::set_position (item,p); + } - else if (Key_item *k = dynamic_cast(it_l)) + else if (Key_item::has_interface (item)) { - k->set_elt_property ("c0-position", gh_int2scm (c0_position_i_)); + item->set_elt_property ("c0-position", gh_int2scm (c0_position_i_)); } } } @@ -163,7 +162,7 @@ Clef_engraver::do_try_music (Music * r_l) { clef_req_l_ = cl; if (!set_type (cl->clef_str_)) - cl->error (_ ("unknown clef type")); + cl->origin ()->warning (_ ("unknown clef type")); return true; } @@ -177,30 +176,27 @@ Clef_engraver::create_clef() { if (!clef_p_) { - Item *c= new Item ( current_settings_); - announce_element (Score_element_info (c, clef_req_l_)); + Item *c= new Item (get_property ("basicClefItemProperties")); + announce_element (c, clef_req_l_); - Staff_symbol_referencer_interface si(c); - si.set_interface (); + Staff_symbol_referencer::set_interface (c); clef_p_ = c; } - Staff_symbol_referencer_interface si(clef_p_); - - si.set_position (clef_position_i_); + Staff_symbol_referencer::set_position(clef_p_, clef_position_i_); if (octave_dir_) { Item * g = new Item (get_property ("basicOctavateEightProperties")); - Side_position_interface spi (g); - spi.set_axis (Y_AXIS); - spi.add_support (clef_p_); + Side_position::set_axis (g,Y_AXIS); + Side_position::add_support (g,clef_p_); + g->set_parent (clef_p_, Y_AXIS); g->set_parent (clef_p_, X_AXIS); - g->add_offset_callback (Side_position_interface::aligned_on_self, X_AXIS); - g->add_offset_callback (Side_position_interface::centered_on_parent, X_AXIS); + g->add_offset_callback (Side_position::aligned_on_self, X_AXIS); + g->add_offset_callback (Side_position::centered_on_parent, X_AXIS); g->set_elt_property ("direction", gh_int2scm (octave_dir_)); octavate_p_ = g; - announce_element (Score_element_info (octavate_p_, clef_req_l_)); + announce_element (octavate_p_, clef_req_l_); } } @@ -223,8 +219,7 @@ Clef_engraver::do_pre_move_processing() SCM vis = 0; if(to_boolean (clef_p_->get_elt_property("non-default"))) { - vis = ly_symbol2scm ("all-visible"); - vis = scm_eval (vis); + vis = get_property ("explicitClefVisibility"); } if (vis)