X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fscript.cc;h=76c9cbc02a522ca85b3b0957b2234a144ff1207c;hb=1cf3d59c1559fb9774c4c1c8cae155cfe54a927c;hp=4014ed729c6f2ced45097ef127d8381ea841b8b6;hpb=1e95a0be01466d1c98644f7705c8e07e41cc645c;p=lilypond.git diff --git a/lily/script.cc b/lily/script.cc index 4014ed729c..76c9cbc02a 100644 --- a/lily/script.cc +++ b/lily/script.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--1998 Han-Wen Nienhuys + (c) 1997--1998 Han-Wen Nienhuys */ #include "script-def.hh" #include "musical-request.hh" @@ -14,20 +14,20 @@ #include "lookup.hh" void -Script::do_print() const +Script::do_print () const { #ifndef NPRINT - specs_l_->print(); + specs_p_->print (); #endif } void -Script::do_substitute_dependency (Score_elem*o,Score_elem*n) +Script::do_substitute_dependency (Score_element*o,Score_element*n) { Staff_side::do_substitute_dependency (o,n); if (o == stem_l_) { - stem_l_ = n ? (Stem*)n->item() : 0; + stem_l_ = n ? (Stem*)n->access_Item () : 0; } } @@ -39,78 +39,109 @@ Script::set_stem (Stem*st_l) } -Script::Script() +Script::Script () { - specs_l_ = 0; + axis_ = Y_AXIS; + specs_p_ = 0; stem_l_ = 0; + postbreak_only_b_ = true; dir_ = CENTER; } void -Script::set_default_dir() +Script::set_default_dir () { - int s_i=specs_l_->rel_stem_dir(); + int s_i=specs_p_->rel_stem_dir (); if (s_i) { if (stem_l_) - dir_ = Direction(stem_l_->dir_ * s_i); + dir_ = Direction (stem_l_->dir_ * s_i); else { - specs_l_->warning (_("Script needs stem direction")); + specs_p_->warning (_ ("script needs stem direction")); dir_ = DOWN; } } else { - dir_ =specs_l_->staff_dir(); + dir_ =specs_p_->staff_dir (); } assert (dir_); } Interval -Script::do_width() const +Script::do_width () const { - return specs_l_->get_atom (paper(), dir_).extent ().x (); + return specs_p_->get_atom (paper (), dir_).extent ().x (); } void -Script::do_pre_processing() +Script::do_pre_processing () { - if (breakable_b_ && break_status_i() != 1) + Staff_side::do_pre_processing (); + if (breakable_b_ && postbreak_only_b_ && (break_status_dir () != RIGHT)) { transparent_b_ = true; set_empty (true); } + + if (axis_ == Y_AXIS && !dir_) + set_default_dir (); +} - if (!dir_) - set_default_dir(); +Interval +Script::symbol_height () const +{ + return specs_p_->get_atom (paper (), dir_).extent ().y (); } Interval -Script::symbol_height() const +Script::symbol_width () const { - return specs_l_->get_atom (paper(), dir_).extent ().y (); + return specs_p_->width (paper ()); } Molecule* -Script::brew_molecule_p() const +Script::brew_molecule_p () const { - Real dx = paper()->note_width()/2; - - Molecule*out = new Molecule (specs_l_->get_atom (paper(), dir_)); - // ugh, staccato dots are not centred between stafflines (how?)? - Real correct = - (Real)dir_ * 2.0 * paper ()->rule_thickness (); - out->translate_axis (y_ + correct, Y_AXIS); - out->translate_axis (dx, X_AXIS); // FIXME! ugh - return out; + Real dx =0.; + + Molecule*mol_p = new Molecule (specs_p_->get_atom (paper (), dir_)); + /* + ugh, staccato dots are not centred between stafflines (how?)? + */ + Real correct =0.0; + if (axis_ == Y_AXIS){ + dx = paper ()->note_width ()/2; + correct = - (Real)dir_ * 2.0 * paper ()->rule_thickness (); + mol_p->translate_axis (dx, X_AXIS); // FIXME! ugh + } + + mol_p->translate_axis (coordinate_offset_f_ + correct, axis_); + + return mol_p; } -IMPLEMENT_IS_TYPE_B2(Script,Item,Staff_side); +IMPLEMENT_IS_TYPE_B2 (Script,Item,Staff_side); int Script::compare (Script *const&l1, Script *const&l2) { - return l1->specs_l_->priority_i() - l2->specs_l_->priority_i (); + return l1->specs_p_->priority_i() - l2->specs_p_->priority_i (); +} + +Script::~Script () +{ + delete specs_p_; +} + +Script::Script (Script const&s) + : Item (s), Staff_side(s) +{ + specs_p_ = s.specs_p_ ? s.specs_p_->clone (): 0; + stem_l_ =s.stem_l_; + postbreak_only_b_ = s.postbreak_only_b_; } +