X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fnew-fingering-engraver.cc;h=db99dede95b2979324c3d7858911928bb67ac069;hb=69aa7021254529b5f399861636b33674f57aa20d;hp=2749d5cb3f623d1c46fd050c2f5b03bf7c9ab784;hpb=728c1f61013a32153c647a72ca31bc2353754803;p=lilypond.git diff --git a/lily/new-fingering-engraver.cc b/lily/new-fingering-engraver.cc index 2749d5cb3f..db99dede95 100644 --- a/lily/new-fingering-engraver.cc +++ b/lily/new-fingering-engraver.cc @@ -1,27 +1,37 @@ /* - fingering-engraver.cc -- implement New_fingering_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1998--2011 Han-Wen Nienhuys - (c) 1998--2007 Han-Wen Nienhuys + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include "engraver.hh" #include "international.hh" +#include "item.hh" #include "rhythmic-head.hh" #include "script-interface.hh" #include "self-alignment-interface.hh" #include "side-position-interface.hh" #include "stem.hh" #include "stream-event.hh" -#include "item.hh" #include "warn.hh" #include "translator.icc" - struct Finger_tuple { Grob *head_; @@ -53,7 +63,7 @@ class New_fingering_engraver : public Engraver vector articulations_; vector string_numbers_; - vector heads_; + vector heads_; Grob *stem_; void position_all (); @@ -125,10 +135,8 @@ New_fingering_engraver::acknowledge_stem (Grob_info inf) void New_fingering_engraver::add_script (Grob *head, Stream_event *event, - Stream_event *note) + Stream_event * /* note */) { - (void) note; - Finger_tuple ft; Grob *g = make_item ("Script", event->self_scm ()); @@ -136,7 +144,11 @@ New_fingering_engraver::add_script (Grob *head, event->get_property ("articulation-type"), 0); ft.script_ = g; ft.script_->set_parent (head, X_AXIS); - + + SCM forced_dir = event->get_property ("direction"); + if (to_dir (forced_dir)) + ft.script_->set_property ("direction", forced_dir); + articulations_.push_back (ft); } @@ -151,8 +163,7 @@ New_fingering_engraver::add_fingering (Grob *head, ft.script_ = internal_make_item (grob_sym, event->self_scm (), ly_symbol2string (grob_sym).c_str (), - __FILE__, __LINE__, __FUNCTION__ - ); + __FILE__, __LINE__, __FUNCTION__); Side_position_interface::add_support (ft.script_, head); @@ -254,7 +265,10 @@ New_fingering_engraver::position_scripts (SCM orientations, && unsmob_grob (ft.head_->get_object ("accidental-grob"))) Side_position_interface::add_support (f, unsmob_grob (ft.head_->get_object ("accidental-grob"))); - + else if (unsmob_grob (ft.head_->get_object ("dot"))) + Side_position_interface::add_support (f, + unsmob_grob (ft.head_->get_object ("dot"))); + Self_alignment_interface::set_align_self (f, Y_AXIS); Self_alignment_interface::set_center_parent (f, Y_AXIS); Side_position_interface::set_axis (f, X_AXIS); @@ -262,8 +276,6 @@ New_fingering_engraver::position_scripts (SCM orientations, f->set_property ("direction", scm_from_int (hordir)); } - int finger_prio = 200; - Direction d = DOWN; Drul_array< vector > vertical (down, up); do @@ -272,6 +284,7 @@ New_fingering_engraver::position_scripts (SCM orientations, { Finger_tuple ft = vertical[d][i]; Grob *f = ft.script_; + int finger_prio = robust_scm2int (f->get_property ("script-priority"), 200); f->set_parent (ft.head_, X_AXIS); f->set_property ("script-priority", scm_from_int (finger_prio + d * ft.position_)); @@ -279,7 +292,7 @@ New_fingering_engraver::position_scripts (SCM orientations, Self_alignment_interface::set_align_self (f, X_AXIS); Self_alignment_interface::set_center_parent (f, X_AXIS); Side_position_interface::set_axis (f, Y_AXIS); - + f->set_property ("direction", scm_from_int (d)); } } @@ -294,7 +307,6 @@ New_fingering_engraver::stop_translation_timestep () heads_.clear (); } - void New_fingering_engraver::position_all () { @@ -318,7 +330,7 @@ New_fingering_engraver::position_all () &stroke_fingerings_); stroke_fingerings_.clear (); } - + for (vsize i = articulations_.size (); i--;) { Grob *script = articulations_[i].script_; @@ -340,7 +352,6 @@ New_fingering_engraver::New_fingering_engraver () stem_ = 0; } - ADD_ACKNOWLEDGER (New_fingering_engraver, rhythmic_head); ADD_ACKNOWLEDGER (New_fingering_engraver, stem); @@ -361,7 +372,7 @@ ADD_TRANSLATOR (New_fingering_engraver, "harmonicDots " "strokeFingerOrientations " "stringNumberOrientations ", - + /* write */ "" );