]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/stem-beam-grav.cc
patch::: 0.1.10.jcn1: Re: Lilypond under Win/NT (fwd)
[lilypond.git] / lily / stem-beam-grav.cc
index bf479bca555540ab039cb6af6b1689677a853ec5..01564cd929c14c14b685e711cb6a5d8c3ee5ec6e 100644 (file)
 #include "grouping.hh"
 #include "note-head.hh"
 #include "time-description.hh"
+#include "duration-convert.hh"
 
 Stem_beam_engraver::Stem_beam_engraver()
 {
-    do_post_move_processing();
+  do_post_move_processing();
 
-    current_grouping = 0;
-    beam_p_ = 0;
-    default_dir_i_ =0;
-    start_req_l_ = 0;
+  current_grouping = 0;
+  beam_p_ = 0;
+  default_dir_i_ =0;
+  start_req_l_ = 0;
 }
 
 bool
-Stem_beam_engraver::do_try_request(Request*req_l)
+Stem_beam_engraver::do_try_request (Request*req_l)
 {
-    
-    Musical_req* mus_l = req_l->musical();
-    /* Debiele puntkomma's. Laat je er eentje per ongeluk achter een
-      if(..) staan, lijkt het net op een luis in gcc.
-
-      (ofwel Python rules)
-      */
-    if (!mus_l)
-       return false;
+  
+  Musical_req* mus_l = req_l->musical();
+  /* Debiele puntkomma's. Laat je er eentje per ongeluk achter een
+   if (..) staan, lijkt het net op een luis in gcc.
 
+   (ofwel Python rules)
+   */
+  if (!mus_l)
+  return false;
 
-    if ( mus_l->beam() ) {
-       if (bool(beam_p_ ) == bool(mus_l->beam()->spantype == Span_req::START))
-           return false;
+
+  if ( mus_l->beam()) 
+  {
+    if (bool (beam_p_) == bool (mus_l->beam()->spantype == Span_req::START))
+       return false;
        
-       if (beam_req_l_ && Beam_req::compare(*beam_req_l_ , *mus_l->beam()))
-           return false;
+    if (beam_req_l_ && beam_req_l_ ->equal_b (mus_l))
+       return false;
        
-       beam_req_l_ = mus_l->beam();
-       return true;
-    }
-    
-    if ( mus_l->stem() ) {
-       if (current_grouping && !current_grouping->child_fit_b(
-           get_staff_info().time_C_->whole_in_measure_))
-           return false;
-
-       if (stem_req_l_ && Stem_req::compare(*stem_req_l_, *mus_l->stem()))
-           return false;
-
-       stem_req_l_ = mus_l->stem();
-       return true;
-    }
-    return false;
+    beam_req_l_ = mus_l->beam();
+    return true;
+  }
+  
+  if ( mus_l->stem()) 
+  {
+    if (current_grouping && !current_grouping->child_fit_b (
+                                                             get_staff_info().time_C_->whole_in_measure_))
+       return false;
+
+    if (stem_req_l_ && !stem_req_l_->equal_b (mus_l) )
+       return false;
+
+    stem_req_l_ = mus_l->stem();
+    return true;
+  }
+  return false;
 }
 
 void
 Stem_beam_engraver::do_process_requests()
 {
-    if (beam_req_l_) {
-       if (beam_req_l_->spantype == Span_req::STOP) {
-           end_beam_b_ = true;
-           start_req_l_ = 0;
-       } else {
-           beam_p_ = new Beam;
-           start_req_l_ = beam_req_l_;
-           beam_p_->left_col_l_ = get_staff_info().musical_pcol_l();
-           current_grouping = new Rhythmic_grouping;
-           if (beam_req_l_->nplet) {
-               Text_spanner* t = new Text_spanner();
-               Text_def *defp = new Text_def;
-               t->set_support(beam_p_);
-               defp->align_i_ = 0;
-               defp->text_str_ = beam_req_l_->nplet;
-               defp->style_str_="italic";
-               t->spec_p_  = defp;
-               typeset_element(t);
+  if (beam_req_l_) 
+  {
+    if (beam_req_l_->spantype == Span_req::STOP) 
+       {
+         end_beam_b_ = true;
+         start_req_l_ = 0;
+       }
+    else 
+       {
+         beam_p_ = new Beam;
+         start_req_l_ = beam_req_l_;
+         beam_p_->left_col_l_ = get_staff_info().musical_pcol_l ();
+         current_grouping = new Rhythmic_grouping;
+         if (beam_req_l_->nplet) 
+           {
+             Text_spanner* t = new Text_spanner();
+             Text_def *defp = new Text_def;
+             t->set_support (beam_p_);
+             defp->align_i_ = 0;
+             defp->text_str_ = beam_req_l_->nplet;
+             defp->style_str_="italic";
+             t->spec_p_  = defp;
+             announce_element (Score_elem_info (t,0));
+             typeset_element (t);
            }
+         announce_element ( Score_elem_info (beam_p_, 0));
             
        }
-    }
-
-    if (stem_req_l_) {
-       stem_p_ = new Stem(8);
-       if (current_grouping)
-           current_grouping->add_child(
-               get_staff_info().time_C_->whole_in_measure_,
-               stem_req_l_->duration());
-
-       stem_p_->flag_i_ = stem_req_l_->duration_.type_i_;
-
-       if (beam_p_) {
-           if (stem_req_l_->duration_.type_i_<= 4)
-               stem_req_l_->warning( "stem doesn't fit in Beam");
-           else
-               beam_p_->add(stem_p_);
-           stem_p_->print_flag_b_ = false;
-       } else {
-           stem_p_->print_flag_b_ = true;
+  }
+
+  if (stem_req_l_) 
+  {
+    stem_p_ = new Stem (8);
+    if (current_grouping)
+       current_grouping->add_child (
+                                    get_staff_info().time_C_->whole_in_measure_,
+                                    stem_req_l_->duration());
+
+    stem_p_->flag_i_ = Duration_convert::type2_i
+      (stem_req_l_->duration_.durlog_i_);      // should change rep. of flags too.
+
+    if (beam_p_) 
+       {
+         if (stem_req_l_->duration_.durlog_i_<= 2)
+           stem_req_l_->warning ("stem doesn't fit in Beam");
+         else
+           beam_p_->add (stem_p_);
+         stem_p_->print_flag_b_ = false;
+       }
+    else 
+       {
+         stem_p_->print_flag_b_ = true;
        }
        
-       announce_element(Score_elem_info(stem_p_, stem_req_l_));
-    }
+    announce_element (Score_elem_info (stem_p_, stem_req_l_));
+  }
 }
 
 void
-Stem_beam_engraver::acknowledge_element(Score_elem_info info)
+Stem_beam_engraver::acknowledge_element (Score_elem_info info)
 {
-    if (!stem_p_)
-       return;
-
-    if (info.elem_l_->name() == Note_head::static_name() &&
-       stem_req_l_->duration() 
-       == info.req_l_->musical()->rhythmic()->duration()){
-       Note_head * n_l= (Note_head*)info.elem_l_->item();
-       stem_p_->add(n_l);
-    }
+  if (!stem_p_)
+  return;
+
+  if (info.elem_l_->name() == Note_head::static_name () &&
+    stem_req_l_->duration() 
+    == info.req_l_->musical()->rhythmic ()->duration ())
+  {
+    Note_head * n_l= (Note_head*)info.elem_l_->item();
+    stem_p_->add (n_l);
+  }
 }
 void
 Stem_beam_engraver::do_pre_move_processing()
 {
-    if (stem_p_) {
-       if (default_dir_i_)
-           stem_p_->dir_i_ = default_dir_i_;
+  if (stem_p_) 
+  {
+    if (default_dir_i_)
+       stem_p_->dir_i_ = default_dir_i_;
        
-       typeset_element(stem_p_);
-       stem_p_ = 0;
-    }
-    if (beam_p_ && end_beam_b_) {
-       Rhythmic_grouping const * rg_C = get_staff_info().rhythmic_C_;
-       rg_C->extend(current_grouping->interval());
-       beam_p_->set_grouping(*rg_C, *current_grouping);
-       beam_p_->right_col_l_ = get_staff_info().musical_pcol_l();
-       typeset_element(beam_p_);
-       delete current_grouping;
-       current_grouping = 0;
-       beam_p_ = 0;
-    }
-    end_beam_b_ = false;
+    typeset_element (stem_p_);
+    stem_p_ = 0;
+  }
+  if (beam_p_ && end_beam_b_) 
+  {
+    Rhythmic_grouping const * rg_C = get_staff_info().rhythmic_C_;
+    rg_C->extend (current_grouping->interval());
+    beam_p_->set_grouping (*rg_C, *current_grouping);
+    beam_p_->right_col_l_ = get_staff_info().musical_pcol_l ();
+    typeset_element (beam_p_);
+    delete current_grouping;
+    current_grouping = 0;
+    beam_p_ = 0;
+  }
+  end_beam_b_ = false;
 }
 void
 Stem_beam_engraver::do_post_move_processing()
 {
-    stem_p_ = 0;
-    beam_req_l_ = 0;
-    stem_req_l_ = 0;
-    end_beam_b_ = false;
+  stem_p_ = 0;
+  beam_req_l_ = 0;
+  stem_req_l_ = 0;
+  end_beam_b_ = false;
 }
 
 Stem_beam_engraver::~Stem_beam_engraver()
 {
-    if (beam_p_)
-       start_req_l_->warning("unterminated beam");
+  if (beam_p_)
+  start_req_l_->warning ("unterminated beam");
 }
 
 void
-Stem_beam_engraver::set_feature(Feature i)
+Stem_beam_engraver::set_feature (Feature i)
 {
-    if (i.type_ == "vdir")     
-       default_dir_i_ = i.value_;
+  if (i.type_ == "vdir")       
+  default_dir_i_ = i.value_;
 }
 
-IMPLEMENT_STATIC_NAME(Stem_beam_engraver);
-IMPLEMENT_IS_TYPE_B1(Stem_beam_engraver,Request_engraver);
+
+IMPLEMENT_IS_TYPE_B1(Stem_beam_engraver,Engraver);
 ADD_THIS_ENGRAVER(Stem_beam_engraver);