X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Fhorizontal-align-item.cc;h=25b9ab8e94a9a128767197f87e36105cb624b569;hb=bd0a24bfd5968f97b8817f6e1442403a35ebcdf6;hp=163a1bf61c12df191437e150ce98f7c0d607aeaa;hpb=13e79c0250d34b6bdfbafbc551ef64e8b59b2991;p=lilypond.git diff --git a/lily/horizontal-align-item.cc b/lily/horizontal-align-item.cc index 163a1bf61c..25b9ab8e94 100644 --- a/lily/horizontal-align-item.cc +++ b/lily/horizontal-align-item.cc @@ -3,129 +3,33 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--1998 Han-Wen Nienhuys */ #include "horizontal-align-item.hh" +#include "debug.hh" -IMPLEMENT_IS_TYPE_B1(Horizontal_align_item,Item); -void -Horizontal_align_item::OK() const -{ - for (int i =0; i < item_l_arr_.size(); i++) - assert ( pcol_l_ == item_l_arr_[i]->pcol_l_); -} -bool -Horizontal_align_item::contains_b (Item *i)const -{ - return item_l_arr_.find_l (i); -} - -void -Horizontal_align_item::add (Item *i,int p) -{ - assert (! contains_b (i)); - priority_i_arr_.push (p); - item_l_arr_.push (i); - add_dependency (i); -} void -Horizontal_align_item::do_substitute_dependency (Score_elem*o,Score_elem*n) +Horizontal_align_item::add_item (Item *i,int p) { - int i; - while ((i = item_l_arr_.find_i (o->item())) >=0) - { - if (n) - item_l_arr_[i] = n->item(); - else - item_l_arr_.del (i); - } + add_element_priority (i,p); } -struct Horizontal_align_item_content { - Item * item_l_; - int priority_i_; - static int compare (Horizontal_align_item_content const &h1, - Horizontal_align_item_content const &h2) - { - return h1.priority_i_ - h2.priority_i_; - } - Horizontal_align_item_content (Item*i, int p) - { - priority_i_ = p; - item_l_ = i; - } - Horizontal_align_item_content(){item_l_ =0; priority_i_ =0; } -}; - - void -Horizontal_align_item::do_pre_processing() +Horizontal_align_item::do_print() const { - OK(); - { - Array content; - for (int i =0; i < item_l_arr_.size(); i++) - content.push ( - Horizontal_align_item_content ( - item_l_arr_[i], priority_i_arr_[i])); - content.sort (Horizontal_align_item_content::compare); - item_l_arr_.clear(); - priority_i_arr_.clear(); - for (int i =0; i < content.size(); i++) - { - item_l_arr_.push (content[i].item_l_); - priority_i_arr_.push (content[i].priority_i_); - } - } - - Array dims; - Real total =0; - for (int i =0; i < item_l_arr_.size(); i++) - { - - Interval item_width= item_l_arr_[i]->width(); - if (item_width.empty_b()) - { - item_width = Interval (0,0); - } - dims.push (item_width); - total += item_width.length(); - } - - 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++) - { - Real dx = where_f -dims[i][-1]; - item_l_arr_[i]->translate (dx , X_AXIS); - 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 (- center_dx_f , X_AXIS); - +#ifndef NPRINT + Item::do_print (); + Align_element::do_print (); +#endif } -Interval -Horizontal_align_item::do_width() const -{ - return Interval (0,0); -} - -void -Horizontal_align_item::do_print()const -{ -} -Horizontal_align_item::Horizontal_align_item() +Horizontal_align_item::Horizontal_align_item () { - center_l_ = 0; - align_i_ = 0; - empty_b_ = true; - transparent_b_ = true; + align_dir_ = CENTER; + stacking_dir_ = RIGHT; + axis_ = X_AXIS; }