]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-0.0.70pre
authorfred <fred>
Sun, 24 Mar 2002 19:45:43 +0000 (19:45 +0000)
committerfred <fred>
Sun, 24 Mar 2002 19:45:43 +0000 (19:45 +0000)
lily/horizontal-align-item.cc
lily/score-halign-reg.cc

index 6cfb0c00c0a74d6a033c5bd11468d0a7ed130aec..46e2b67ee281949162becc55861f52ec6d3e1fd8 100644 (file)
@@ -7,9 +7,11 @@
 */
 
 #include "horizontal-align-item.hh"
+
 IMPLEMENT_STATIC_NAME(Horizontal_align_item);
 IMPLEMENT_IS_TYPE_B1(Horizontal_align_item,Item);
 
+
 bool
 Horizontal_align_item::contains_b(Item *i)const
 {
@@ -83,10 +85,18 @@ Horizontal_align_item::do_pre_processing()
     }
 
     Real where_f= total * (align_i_-1.0)/2.0;
+    Real center_dx_f = 0;
     for ( int i=0 ;  i < item_l_arr_.size(); i++) {
-       item_l_arr_[i]->translate_x(where_f -dims[i][-1] );
+       Real dx = where_f -dims[i][-1];
+       item_l_arr_[i]->translate_x( dx );
+       if (item_l_arr_[i] == center_l_)
+           center_dx_f = where_f;
        where_f += dims[i].length();
     }
+    if (center_dx_f && !align_i_ )
+       for ( int i=0 ;  i < item_l_arr_.size(); i++) 
+           item_l_arr_[i]->translate_x( - center_dx_f );
+    
 }
 
 Interval
@@ -102,6 +112,7 @@ Horizontal_align_item::do_print()const
 
 Horizontal_align_item::Horizontal_align_item()
 {
+    center_l_ = 0;
     align_i_ = 0;
     empty_b_ = true;
     transparent_b_ = true;
index f2423f946180853317b1f768ea830a7317adf11b..748c018ffe3ad20d5327d3b75a6183069cfc42e0 100644 (file)
@@ -6,7 +6,7 @@
   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
 */
 
-
+#include "bar.hh"
 #include "break-align-item.hh"
 #include "score-halign-reg.hh"
 #include "score-align-reg.hh"
@@ -33,12 +33,16 @@ Score_horizontal_align_register::acknowledge_element(Score_elem_info i)
     if (reg->is_type_b( 
        Score_align_register::static_name()) )
     {
+       Score_align_register * align_reg_l = (Score_align_register*) reg;
        if (!halign_p_) {
            halign_p_ = new Break_align_item;
            announce_element(Score_elem_info(halign_p_,0));
        }
-       halign_p_->add(i.elem_l_->item(), 
-                      ((Score_align_register*)reg)->priority_i_  );
+       Item * it = i.elem_l_->item();
+       if (align_reg_l->type_ch_C_ == Bar::static_name())
+           halign_p_->center_l_ = it;
+       
+       halign_p_->add(it, align_reg_l->priority_i_);
     }
 }
 IMPLEMENT_STATIC_NAME(Score_horizontal_align_register);