X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstaff-side.cc;h=ec82d64aad7ed9b4c91f600f46c0afeaf087c34e;hb=1cf3d59c1559fb9774c4c1c8cae155cfe54a927c;hp=b380e1feb8c57e5dbda8e053118ad1fb951b2eab;hpb=dccb52c3a040eb61328bf7bb9aae9a90b59e1120;p=lilypond.git diff --git a/lily/staff-side.cc b/lily/staff-side.cc index b380e1feb8..ec82d64aad 100644 --- a/lily/staff-side.cc +++ b/lily/staff-side.cc @@ -3,12 +3,12 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--1998 Han-Wen Nienhuys */ #include "interval.hh" #include "paper-def.hh" -#include "dimen.hh" +#include "dimension.hh" #include "staff-side.hh" #include "staff-sym.hh" #include "debug.hh" @@ -16,37 +16,38 @@ Staff_side::Staff_side() { - y_=0; + coordinate_offset_f_=0; sym_int_ = Interval (0,0); + padding_f_ = 0.0; dir_ = CENTER; + axis_ = Y_AXIS; } Interval -Staff_side::support_height() const +Staff_side::support_extent() const { Interval y_int; for (int i=0; i < support_l_arr_.size(); i++) { - Axis_group_element *common = - common_group (support_l_arr_[i], Y_AXIS); + Graphical_axis_group *common = + common_group (support_l_arr_[i], axis_); - Real y = support_l_arr_[i]->relative_coordinate (common, Y_AXIS) - -relative_coordinate (common,Y_AXIS); + Real y = support_l_arr_[i]->relative_coordinate (common, axis_) + -relative_coordinate (common,axis_); - y_int.unite (y + support_l_arr_[i]->height()); + y_int.unite (y + support_l_arr_[i]->extent(axis_)); } - if (y_int.empty_b()) { y_int = Interval (0,0); } - return y_int; + return Interval(y_int[LEFT] - padding_f_, y_int[RIGHT] + padding_f_); } void -Staff_side::add_support (Score_elem*i) +Staff_side::add_support (Score_element*i) { support_l_arr_.push (i); add_dependency (i); @@ -57,17 +58,29 @@ Staff_side::get_position_f () const { if (!dir_) { - warning (_("Staff_side::get_position_f(): " - "somebody forgot to set my vertical direction, returning -20")); + warning (_ ("Staff_side::get_position_f(): " + "somebody forgot to set my direction, returning -20")); return -20; } - Real y=0; + Real y = 0; Real inter_f = paper()-> internote_f (); - Interval v= support_height(); - y = v[dir_] + 1 * dir_ * inter_f; // ugh + Interval v = support_extent(); + + // ugh, dim[y] = PT over here + y = v[dir_] + 1 * dir_ * inter_f; + + int coordinate_offset_f_i = (int)rint (y / inter_f); + // ugh: 5 -> staff_lines + if (axis_ == Y_AXIS && abs (coordinate_offset_f_i) < 5) + { + if (!(abs (coordinate_offset_f_i) % 2)) + y += (Real)dir_ * inter_f; + } +// else +// y = v[dir_] + 1 * dir_ * inter_f; return y; } @@ -78,20 +91,54 @@ Staff_side::symbol_height() const return Interval (0,0); } +Interval +Staff_side::symbol_width () const +{ + return Interval (0,0); +} + void -Staff_side::do_post_processing() +Staff_side::do_pre_processing () { - sym_int_ = symbol_height(); - y_ = get_position_f(); + if (axis_== X_AXIS) + do_side_processing (); +} + +void +Staff_side::do_side_processing () +{ + sym_int_ = symbol_extent(); + coordinate_offset_f_ = get_position_f(); if (dir_) - y_ += - sym_int_[-dir_]; + coordinate_offset_f_ += - sym_int_[-dir_]; + +} + +/* + ugh should use do_width (), do_height (), get_extent () + */ +Interval +Staff_side::symbol_extent () const +{ + if (axis_ == Y_AXIS) + return symbol_height (); + else + return symbol_width (); +} + + +void +Staff_side::do_post_processing() +{ + if (axis_ == Y_AXIS) + do_side_processing (); } void -Staff_side::do_substitute_dependency (Score_elem*o, Score_elem*n) +Staff_side::do_substitute_dependency (Score_element*o, Score_element*n) { support_l_arr_.unordered_substitute (o,n); } -IMPLEMENT_IS_TYPE_B1(Staff_side, Score_elem); +IMPLEMENT_IS_TYPE_B1(Staff_side, Score_element);