X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fclef-item.cc;h=2919255e71d13168fb90e1f93a1679df038a9531;hb=0cf97b5cdceecbba937f43ac827f4065aad5001e;hp=0d1a185923be893a1f6285b01b96f221f6f32f7c;hpb=225485917d3e66bd7eb907d6462e981ae1bd1654;p=lilypond.git diff --git a/lily/clef-item.cc b/lily/clef-item.cc index 0d1a185923..2919255e71 100644 --- a/lily/clef-item.cc +++ b/lily/clef-item.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--1999 Han-Wen Nienhuys */ #include @@ -12,136 +12,78 @@ #include "molecule.hh" #include "paper-def.hh" #include "lookup.hh" -#include "clef-grav.hh" - +#include "text-item.hh" +#include "paper-score.hh" +#include "dimension-cache.hh" void Clef_item::do_pre_processing() { - change_b_ = ! (break_status_i() == 1); - - if (default_b_) + translate_axis (y_position_i_ * staff_line_leading_f () / 2.0, Y_AXIS); + SCM style_sym =get_elt_property (style_scm_sym); + String style; + if (style_sym != SCM_BOOL_F) + style = ly_scm2string (SCM_CDR(style_sym)); + + if (break_status_dir() != RIGHT && style != "fullSizeChanges") + symbol_ += "_change"; + if (style == "transparent") { - set_empty(break_status_i() != 1); - transparent_b_ = (break_status_i() != 1); + set_elt_property (transparent_scm_sym, SCM_BOOL_T); + set_empty (true, X_AXIS); } } +/* + FIXME +*/ Clef_item::Clef_item() { - breakable_b_ =true; - default_b_ = false; - change_b_ = true; - read ("violin"); + set_elt_property (breakable_scm_sym, SCM_BOOL_T); + + symbol_ = "treble"; + y_position_i_ = -2; } -/* - * Convert input clef string to - * a clef symbol and a line position. - * This would be better done in the lexer (more efficient) - * or as a table-lookup. - */ void -Clef_item::read (String t) +Clef_item::do_add_processing () { - symbol_= t; - if (t == "violin") - { - y_position_i_ = -2; - } - else if (t == "bass") - { - y_position_i_ = 2; - } - else if (t == "G" || t == "G2" || t == "treble") - { - symbol_ = "violin"; - y_position_i_ = -2; - } - else if (t == "french" || t == "G1") - { - symbol_="violin"; - y_position_i_ = -4; - } - else if (t == "soprano" || t == "C1") - { - symbol_="alto"; - y_position_i_ = -4; - } - else if (t == "mezzosoprano" || t == "C2") - { - symbol_ = "alto"; - y_position_i_ = -2; - } - else if (t == "alto") - { - symbol_ = "alto"; - y_position_i_ = 0; - } - else if (t == "C3") - { - symbol_ = "alto"; - y_position_i_ = 0; - } - else if (t == "tenor" || t == "C4") - { - symbol_ = "alto"; - y_position_i_ = 2; - } - else if (t == "baritone" || t == "C5") - { - symbol_ = "alto"; - y_position_i_ = 4; - } - else if (t == "varbaritone" || t == "F3") + if (!break_status_dir ()) // broken stuff takes care of their own texts { - symbol_ = "bass"; - y_position_i_ = 0; - } - else if (t == "F" || t == "F4") - { - symbol_ = "bass"; - y_position_i_ = 2; - } - else if (t == "subbass") - { - symbol_ = "bass"; - y_position_i_ = 4; - } - else if (isdigit(t[1])) - switch (t[0]) - { // we've already dealt with plain F, G or C clef - // position 0 is line 3. - case 'G': - case 'g': - symbol_ = "violin"; - y_position_i_ = 2 * (t[1] - '0') - 6; - break; - case 'F': - case 'f': - symbol_ = "bass"; - y_position_i_ = 2 * (t[1] - '0') - 6; - break; - } -} + Text_item *g =0; -void -Clef_item::read (Clef_engraver const &k) -{ - read (k.clef_type_str_); + SCM octave_dir = remove_elt_property (octave_dir_scm_sym); + if (octave_dir != SCM_BOOL_F) + { + Direction d = Direction (gh_scm2int (SCM_CDR(octave_dir))); + g = new Text_item; + pscore_l_->typeset_element (g); + + g->text_str_ = "8"; + g->style_str_ = "italic"; + g->set_parent (this, Y_AXIS); + g->set_parent (this, X_AXIS); + + add_dependency (g); // just to be sure. + + Real r = do_height ()[d] - g->extent (Y_AXIS)[-d]; + g->dim_cache_[Y_AXIS]->set_offset (r); + + SCM my_vis = get_elt_property (visibility_lambda_scm_sym); + if (my_vis != SCM_BOOL_F) + g->set_elt_property (visibility_lambda_scm_sym, SCM_CDR (my_vis)); + + } + + } } Molecule* -Clef_item::brew_molecule_p() const +Clef_item::do_brew_molecule_p() const { - String t = symbol_; - if (change_b_) - t += "_change"; - Atom s = paper()->lookup_l ()->clef (t); - Molecule*output = new Molecule (Atom (s)); - output->translate_axis (paper()->internote_f () * y_position_i_, Y_AXIS); + Molecule*output = new Molecule (lookup_l ()->clef (symbol_)); return output; } -IMPLEMENT_IS_TYPE_B1(Clef_item,Item); +