]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/abbreviation-beam-engraver.cc
release: 1.1.29
[lilypond.git] / lily / abbreviation-beam-engraver.cc
index ca62b92d24644994f3e0b502134ac8aad1f30f21..6f67fab90a7a2c13a242055dbaae670659f8cc49 100644 (file)
@@ -3,8 +3,8 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--1998 Han-Wen Nienhuys <hanwen@stack.nl>
-           Jan Nieuwenhuizen <jan@digicash.com>
+  (c)  1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+           Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "duration-convert.hh"
@@ -15,7 +15,7 @@
 #include "musical-request.hh"
 #include "misc.hh"
 
-IMPLEMENT_IS_TYPE_B1(Abbreviation_beam_engraver, Engraver);
+
 ADD_THIS_TRANSLATOR(Abbreviation_beam_engraver);
 
 Abbreviation_beam_engraver::Abbreviation_beam_engraver ()
@@ -25,22 +25,18 @@ Abbreviation_beam_engraver::Abbreviation_beam_engraver ()
 }
 
 bool
-Abbreviation_beam_engraver::do_try_request (Request*r)
+Abbreviation_beam_engraver::do_try_music (Music*r)
 {
-  Musical_req* mus_l = r->musical ();
-  if (!mus_l)
-    return false;
-
-  Abbreviation_beam_req * b = mus_l->abbrev_beam ();
+  Abbreviation_beam_req * b = dynamic_cast <Abbreviation_beam_req *> (r);
 
   if (!b)
     return false;
 
-  if (bool (abeam_p_) == bool (b->spantype == Span_req::START))
+  if (bool (abeam_p_) == bool (b->spantype_ == START))
     return false;
 
   Direction d = (!abeam_p_) ? LEFT : RIGHT;
-  if (span_reqs_drul_[d] && !span_reqs_drul_[d]->equal_b (mus_l))
+  if (span_reqs_drul_[d] && !span_reqs_drul_[d]->equal_b (b))
     return false;
 
   span_reqs_drul_[d] = b;
@@ -52,7 +48,7 @@ Abbreviation_beam_engraver::do_process_requests ()
 {
   if (!abeam_p_ && span_reqs_drul_[LEFT]) {
     abeam_p_ = new Abbreviation_beam;
-    announce_element (Score_elem_info (abeam_p_, span_reqs_drul_[LEFT]));
+    announce_element (Score_element_info (abeam_p_, span_reqs_drul_[LEFT]));
   }
 }
 
@@ -80,22 +76,19 @@ Abbreviation_beam_engraver::do_removal_processing ()
 }
 
 void
-Abbreviation_beam_engraver::acknowledge_element (Score_elem_info i)
+Abbreviation_beam_engraver::acknowledge_element (Score_element_info i)
 {
-  if (!abeam_p_ || !i.elem_l_->is_type_b (Stem::static_name ()))
+  Stem* s = dynamic_cast<Stem *> (i.elem_l_);
+  if (!abeam_p_ || !s)
     return;
 
-  Stem* s = (Stem*)i.elem_l_->item ();
-
   int type_i = span_reqs_drul_[LEFT]->type_i_;
   s->flag_i_ = intlog2 (type_i) - 2;
-  if (span_reqs_drul_[RIGHT])
-    s->beams_left_i_ = s->flag_i_;
-  else
-    s->beams_right_i_ = s->flag_i_;
+  s->beams_i_drul_[(span_reqs_drul_[RIGHT]) ? LEFT: RIGHT] = s->flag_i_;
 
+  abeam_p_->multiple_i_ = s->flag_i_;
   if (s->type_i () != 1) // no abbrev gaps on half note
     s->beam_gap_i_ = s->flag_i_ - ((s->type_i () >? 2) - 2);
 
-  abeam_p_->add (s);
+  abeam_p_->add_stem (s);
 }