X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fscript.cc;h=c3dc48943d012e6670296c15216633d951573428;hb=48f2b9351f93d0161c675cfb60e95bf919041df2;hp=76c9cbc02a522ca85b3b0957b2234a144ff1207c;hpb=1cf3d59c1559fb9774c4c1c8cae155cfe54a927c;p=lilypond.git diff --git a/lily/script.cc b/lily/script.cc index 76c9cbc02a..c3dc48943d 100644 --- a/lily/script.cc +++ b/lily/script.cc @@ -1,147 +1,70 @@ -/* - script.cc -- implement Script - +/* + script.cc -- implement Script + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys + + */ - (c) 1997--1998 Han-Wen Nienhuys -*/ -#include "script-def.hh" -#include "musical-request.hh" -#include "paper-def.hh" +#include "debug.hh" #include "script.hh" -#include "stem.hh" -#include "molecule.hh" #include "lookup.hh" - -void -Script::do_print () const -{ -#ifndef NPRINT - specs_p_->print (); -#endif -} - -void -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->access_Item () : 0; - } -} - -void -Script::set_stem (Stem*st_l) -{ - stem_l_ = st_l; - add_support (st_l); -} +#include "side-position-interface.hh" +#include "paper-def.hh" +#include "dimension-cache.hh" -Script::Script () +Molecule +Script::get_molecule(Direction d) const { - axis_ = Y_AXIS; - specs_p_ = 0; - stem_l_ = 0; - postbreak_only_b_ = true; - dir_ = CENTER; -} + SCM s = get_elt_property ("molecule"); + assert (gh_pair_p (s)); -void -Script::set_default_dir () -{ - int s_i=specs_p_->rel_stem_dir (); - if (s_i) + SCM key = gh_car (s); + if (key == ly_symbol2scm ("feta")) { - if (stem_l_) - dir_ = Direction (stem_l_->dir_ * s_i); - else - { - specs_p_->warning (_ ("script needs stem direction")); - dir_ = DOWN; - } + return lookup_l ()->afm_find ("scripts-" + + ly_scm2string (index_cell (gh_cdr (s), d))); } - else + else if (key == ly_symbol2scm ("accordion")) { - dir_ =specs_p_->staff_dir (); + return lookup_l ()->accordion (s, paper_l()->get_var("interline")); } - assert (dir_); -} + else assert (false); -Interval -Script::do_width () const -{ - return specs_p_->get_atom (paper (), dir_).extent ().x (); + return Molecule (); } + void Script::do_pre_processing () { - 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 (); -} - -Interval -Script::symbol_height () const -{ - return specs_p_->get_atom (paper (), dir_).extent ().y (); + /* + center my self on the note head. + */ + Score_element * e = parent_l(X_AXIS); + translate_axis (e->extent (X_AXIS).center (), X_AXIS); } -Interval -Script::symbol_width () const +void +Script::do_post_processing () { - return specs_p_->width (paper ()); + Direction d = Side_position_interface (this).get_direction (); + Molecule m (get_molecule(d)); } Molecule* -Script::brew_molecule_p () const +Script::do_brew_molecule_p () const { - 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 - } + Direction dir = DOWN; + SCM d = get_elt_property ("direction"); + if (isdir_b (d)) + dir = to_dir (d); - mol_p->translate_axis (coordinate_offset_f_ + correct, axis_); - - return mol_p; + return new Molecule (get_molecule (dir)); } -IMPLEMENT_IS_TYPE_B2 (Script,Item,Staff_side); - -int -Script::compare (Script *const&l1, Script *const&l2) -{ - 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_; -} -