X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fclef-item.cc;h=282bd535ec9ac13fdad2f71b848d1e289b6bb2b3;hb=refs%2Ftags%2Frelease%2F1.1.36;hp=0c5c56eb2241bf654451f09132ac829c88f97261;hpb=472c212541034e95c30f5a1a6bc99d7f36f15b68;p=lilypond.git diff --git a/lily/clef-item.cc b/lily/clef-item.cc index 0c5c56eb22..282bd535ec 100644 --- a/lily/clef-item.cc +++ b/lily/clef-item.cc @@ -3,144 +3,74 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--1999 Han-Wen Nienhuys */ +#include #include "clef-item.hh" #include "string.hh" #include "molecule.hh" #include "paper-def.hh" #include "lookup.hh" -#include "clef-grav.hh" - +#include "g-text-item.hh" +#include "p-score.hh" void Clef_item::do_pre_processing() { - change_b_ = ! (break_status_i() == 1); - - if (default_b_) + dim_cache_[Y_AXIS].translate (y_position_i_ * staff_line_leading_f () / 2.0); + if (break_status_dir() != RIGHT) { - set_empty(break_status_i() != 1); - transparent_b_ = (break_status_i() != 1); + symbol_ += "_change"; } } +/* + 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") + if (!break_status_dir ()) // broken stuff takes care of their own texts { - 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") - { - 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; - } -} + G_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_int2scm (SCM_CDR(octave_dir))); + g = new G_text_item; + pscore_l_->typeset_element (g); + + g->text_str_ = "8"; + g->style_str_ = "italic"; + g->dim_cache_[Y_AXIS].parent_l_ = &dim_cache_[Y_AXIS]; + g->dim_cache_[X_AXIS].parent_l_ = &dim_cache_[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); + g->set_elt_property (visibility_lambda_scm_sym, + get_elt_property (visibility_lambda_scm_sym)); + } + + } } 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); +