From a87ae30f998f6e275118ce45d0c3c3c8e60f2bc8 Mon Sep 17 00:00:00 2001 From: fred Date: Thu, 29 Jun 2000 19:48:55 +0000 Subject: [PATCH] lilypond-1.3.66 --- CHANGES | 38 +++++++++- input/test/dots.ly | 7 +- input/trip.ly | 4 +- lily/afm.cc | 2 +- lily/beam-engraver.cc | 111 ++++++++++++++++++--------- lily/beam.cc | 66 +++++++++++++++++ lily/collision-engraver.cc | 11 ++- lily/collision.cc | 63 +++++++++------- lily/dot-column.cc | 6 +- lily/dots.cc | 28 ++++--- lily/hara-kiri-group-spanner.cc | 3 - lily/include/beam.hh | 2 +- lily/include/collision.hh | 18 ++--- lily/include/dot-column.hh | 4 +- lily/include/dots.hh | 9 +-- lily/include/note-column.hh | 15 ++-- lily/include/note-heads-engraver.hh | 2 +- lily/include/rest-collision.hh | 16 ++-- lily/include/rest-engraver.hh | 2 +- lily/include/rhythmic-head.hh | 4 +- lily/note-column.cc | 138 +++++++--------------------------- lily/note-head.cc | 2 +- lily/note-heads-engraver.cc | 2 +- lily/rest-collision-engraver.cc | 22 +++++- lily/rest-collision.cc | 144 ++++++++++++++++++++++-------------- lily/rest-engraver.cc | 2 +- lily/rest.cc | 3 +- lily/rhythmic-column-engraver.cc | 23 +++++- lily/rhythmic-head.cc | 8 +- lily/stem.cc | 15 ++-- ly/engraver.ly | 14 +++- ly/params.ly | 2 - 32 files changed, 461 insertions(+), 325 deletions(-) diff --git a/CHANGES b/CHANGES index 48da8c0b8d..8fa5208be2 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,36 @@ -1.3.64.uu1 +1.3.65.mb1 ========== +* Corrected text sizes in paper*.ly + + +1.3.65.uu1 +========== + +* Dots, Collision, Rest_collision removed as separate Score_element type. + +* Stem and Note_column accept only one rest. + +* Use offset callback in Stem to resolve rest/beam collisions. + +* Put the value of new local key signature (accidentals) back into a property. + +* Set molecule-callback for notename item. + +1.3.65.jcn2 +=========== + +* Added some comments to new slur code. + +* Removed some ugly interstaff slur code, interstaff slurs at line-break + are still broken. + +* Slur bugfix: 16th beams are also beams. + + +1.3.65 +====== + * Bugfix: translate volta spanner at start of line. * Changed directional_element() calls to instantiations @@ -819,7 +849,7 @@ Side_position_interface, Score_element, Item and Spanner generic-property.scm. Similar fixes for Stem, Tie, etc. * Added a Text_engraver to GraceContext. Maybe it was removed on - purpose: scripst on grace notes seem broken, they appear on the + purpose: scripts on grace notes seem broken, they appear on the main note. * Bugfix: volume effect of (de)crescendi was sometimes wrong way round. @@ -854,7 +884,7 @@ backend * Fixed dimensions (more x-y interchanges) of brace, bracket and volta-spanner. -* Bit half-baken fix in to get similar vertical placement of orphaned vs. +* Half-assed fix to get similar vertical placement of orphaned vs. line-spanned dynamic elements. * Added property bracketCollapseHeight: the minimal size of a staff bracket @@ -1032,7 +1062,7 @@ into do_process_music. =========== * Lily now also performs crescendi and decrescendi in MIDI output: - Span_dynamic_performer (bit scrappy). + Span_dynamic_performer in a slightly crappy way. * Added preliminary support for crescendi/decrescendi other than `hairpins', eg: `cresc. poco `a poco -- -- --' diff --git a/input/test/dots.ly b/input/test/dots.ly index fca6280b39..b21d25ae5c 100644 --- a/input/test/dots.ly +++ b/input/test/dots.ly @@ -1,7 +1,8 @@ \score { - \context Voice \notes\relative c { + \context Voice \notes\relative c'' { \time 6/8; - d''4. b + d4. g,, + @@ -14,4 +15,4 @@ } \paper { } \midi { } -} \ No newline at end of file +} diff --git a/input/trip.ly b/input/trip.ly index 70ff8a0297..5ca69f53eb 100644 --- a/input/trip.ly +++ b/input/trip.ly @@ -7,12 +7,10 @@ %{ This file tests as much features of lily as possible. If there are any -basic faults in , this file will not run correctly. +basic faults in lily, this file will not run correctly. TODO: -* add tuplets - * repeats. * tremolo diff --git a/lily/afm.cc b/lily/afm.cc index 1f1d22f1db..9f1f8045f5 100644 --- a/lily/afm.cc +++ b/lily/afm.cc @@ -1,5 +1,5 @@ /* - afm2.cc -- implement Adobe_font_metric + afm.cc -- implement Adobe_font_metric source file of the Flower Library diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc index 4800564c77..c037c00923 100644 --- a/lily/beam-engraver.cc +++ b/lily/beam-engraver.cc @@ -7,13 +7,46 @@ */ #include "engraver-group-engraver.hh" -#include "beam-engraver.hh" +#include "engraver.hh" #include "musical-request.hh" #include "beam.hh" #include "stem.hh" #include "warn.hh" #include "beaming.hh" #include "score-engraver.hh" +#include "rest.hh" +#include "drul-array.hh" + +class Beam_engraver : public Engraver +{ + Drul_array reqs_drul_; + + Beam *finished_beam_p_; + Beam *beam_p_; + Span_req * prev_start_req_; + + Beaming_info_list * beam_info_p_; + Beaming_info_list * finished_beam_info_p_; + + /// location within measure where beam started. + Moment beam_start_location_; + + /// moment (global time) where beam started. + Moment beam_start_mom_; + + void typeset_beam (); +protected: + virtual void do_pre_move_processing (); + virtual void do_post_move_processing (); + virtual void do_removal_processing (); + virtual void acknowledge_element (Score_element_info); + virtual bool do_try_music (Music*); + virtual void do_process_music (); +public: + Beam_engraver (); + VIRTUAL_COPY_CONS (Translator); +}; + Beam_engraver::Beam_engraver () { @@ -150,48 +183,54 @@ Beam_engraver::acknowledge_element (Score_element_info info) { if (beam_p_) { - Stem* stem_l = dynamic_cast (info.elem_l_); - if (!stem_l || stem_l->beam_l ()) - return; + if (Rest* r = dynamic_cast (info.elem_l_)) + { + r->add_offset_callback (Beam::rest_collision_callback, Y_AXIS); + } + else if (Stem* stem_l = dynamic_cast (info.elem_l_)) + { + if (stem_l->beam_l ()) + return; - bool stem_grace = stem_l->get_elt_property ("grace") == SCM_BOOL_T; + bool stem_grace = stem_l->get_elt_property ("grace") == SCM_BOOL_T; - SCM wg =get_property ("weAreGraceContext"); - bool wgb= to_boolean (wg); + SCM wg =get_property ("weAreGraceContext"); + bool wgb= to_boolean (wg); - if (wgb!= stem_grace) - return; + if (wgb!= stem_grace) + return; - Rhythmic_req *rhythmic_req = dynamic_cast (info.req_l_); - if (!rhythmic_req) - { - String s = _ ("stem must have Rhythmic structure"); - if (info.req_l_) - info.req_l_->warning (s); - else - ::warning (s); + Rhythmic_req *rhythmic_req = dynamic_cast (info.req_l_); + if (!rhythmic_req) + { + String s = _ ("stem must have Rhythmic structure"); + if (info.req_l_) + info.req_l_->warning (s); + else + ::warning (s); - return; + return; + } + + if (rhythmic_req->duration_.durlog_i_<= 2) + { + rhythmic_req->warning (_ ("stem doesn't fit in beam")); + prev_start_req_->warning (_ ("beam was started here")); + /* + don't return, since + + [r4 c8] can just as well be modern notation. + */ + } + + stem_l->set_elt_property ("duration-log", + gh_int2scm (rhythmic_req->duration_.durlog_i_)); + Moment stem_location = now_mom () - beam_start_mom_ + beam_start_location_; + beam_info_p_->add_stem (stem_location, + (rhythmic_req->duration_.durlog_i_ - 2) >? 1); + beam_p_->add_stem (stem_l); } - - if (rhythmic_req->duration_.durlog_i_<= 2) - { - rhythmic_req->warning (_ ("stem doesn't fit in beam")); - prev_start_req_->warning (_ ("beam was started here")); - /* - don't return, since - - [r4 c8] can just as well be modern notation. - */ - } - - stem_l->set_elt_property ("duration-log", - gh_int2scm (rhythmic_req->duration_.durlog_i_)); - Moment stem_location = now_mom () - beam_start_mom_ + beam_start_location_; - beam_info_p_->add_stem (stem_location, - (rhythmic_req->duration_.durlog_i_ - 2) >? 1); - beam_p_->add_stem (stem_l); } } diff --git a/lily/beam.cc b/lily/beam.cc index 322655fe74..5b50831fca 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -845,3 +845,69 @@ Beam::last_visible_stem () const } return 0; } + + +/* + [TODO] + handle rest under beam (do_post: beams are calculated now) + what about combination of collisions and rest under beam. + + Should lookup + + rest -> stem -> beam -> interpolate_y_position () +*/ +Real +Beam::rest_collision_callback (Score_element const *rest, Axis a ) +{ + assert (a == Y_AXIS); + + Score_element * st = unsmob_element (rest->get_elt_pointer ("stem")); + Stem * stem = dynamic_cast (st); + if (!stem) + return 0.0; + Beam * beam = dynamic_cast (unsmob_element (stem->get_elt_pointer ("beam"))); + if (!beam || !beam->visible_stem_count ()) + return 0.0; + + // make callback for rest from this. + Real beam_dy = 0; + Real beam_y = 0; + + + // todo: make sure this calced already. + SCM s = beam->get_elt_property ("height"); + if (gh_number_p (s)) + beam_dy = gh_scm2double (s); + + s = beam->get_elt_property ("y-position"); + if (gh_number_p (s)) + beam_y = gh_scm2double (s); + + Real x0 = beam->first_visible_stem ()->relative_coordinate (0, X_AXIS); + Real dx = beam->last_visible_stem ()->relative_coordinate (0, X_AXIS) - x0; + Real dydx = beam_dy && dx ? beam_dy/dx : 0; + + Direction d = stem->get_direction (); + Real beamy = (stem->relative_coordinate (0, X_AXIS) - x0) * dydx + beam_y; + + Staff_symbol_referencer_interface si (rest); + + Real staff_space = si.staff_space (); + Real rest_dim = rest->extent (Y_AXIS)[d]*2.0 / staff_space ; + + Real minimum_dist + = gh_scm2double (rest->get_elt_property ("minimum-beam-collision-distance")); + Real dist = + minimum_dist + -d * (beamy - rest_dim) >? 0; + + int stafflines = si.line_count (); + + // move discretely by half spaces. + int discrete_dist = int (ceil (dist)); + + // move by whole spaces inside the staff. + if (discrete_dist < stafflines+1) + discrete_dist = int (ceil (discrete_dist / 2.0)* 2.0); + + return (-d * discrete_dist); +} diff --git a/lily/collision-engraver.cc b/lily/collision-engraver.cc index db736c8bb4..f698089413 100644 --- a/lily/collision-engraver.cc +++ b/lily/collision-engraver.cc @@ -10,12 +10,13 @@ #include "collision.hh" #include "dimension-cache.hh" #include "engraver.hh" +#include "axis-group-interface.hh" /* collect Note_column, and as soon as there are 2 or more, put them in a collision object. */ class Collision_engraver : public Engraver { - Collision* col_p_; + Item * col_p_; Link_array note_column_l_arr_; protected: @@ -35,11 +36,15 @@ Collision_engraver::process_acknowledged () return ; if (!col_p_) { - col_p_ = new Collision (get_property ("basicCollisionProperties")); + col_p_ = new Item (get_property ("basicCollisionProperties")); + Axis_group_interface (col_p_).set_interface (); + Axis_group_interface (col_p_).set_axes (X_AXIS, Y_AXIS); + announce_element (Score_element_info (col_p_,0)); } + for (int i=0; i< note_column_l_arr_.size (); i++) - col_p_->add_column (note_column_l_arr_[i]); + Collision (col_p_).add_column (note_column_l_arr_[i]); } void diff --git a/lily/collision.cc b/lily/collision.cc index 4807e47b7a..01cb443dd5 100644 --- a/lily/collision.cc +++ b/lily/collision.cc @@ -11,41 +11,46 @@ #include "note-head.hh" #include "paper-def.hh" #include "axis-group-interface.hh" - - -Collision::Collision(SCM s ) - : Item (s) -{ - Axis_group_interface (this).set_interface (); - Axis_group_interface (this).set_axes (X_AXIS, Y_AXIS); -} +#include "item.hh" void Collision::add_column (Note_column* ncol_l) { - Axis_group_interface (this).add_element (ncol_l); - add_dependency (ncol_l); + ncol_l->add_offset_callback (force_shift_callback, X_AXIS); + Axis_group_interface (elt_l_).add_element (ncol_l); + elt_l_->add_dependency (ncol_l); } -GLUE_SCORE_ELEMENT(Collision,before_line_breaking); -SCM -Collision::member_before_line_breaking () +Real +Collision::force_shift_callback (Score_element const * c, Axis a) { - do_shifts(); - return SCM_UNDEFINED; + assert (a == X_AXIS); + + Score_element * me = c->parent_l (a); + /* + ugh. the way DONE is done is not clean + */ + if (!unsmob_element (me->get_elt_pointer ("done"))) + { + me->set_elt_pointer ("done", me->self_scm_); + do_shifts (me); + } + + return 0.0; } /* TODO: make callback of this. */ void -Collision::do_shifts() +Collision::do_shifts(Score_element* me) { - SCM autos (automatic_shift ()); - SCM hand (forced_shift ()); + SCM autos (automatic_shift (me)); + SCM hand (forced_shift (me)); + Link_array done; - Real wid = paper_l ()->get_var ("collision_note_width"); + Real wid = me->paper_l ()->get_var ("collision_note_width"); // elt prop for (; gh_pair_p (hand); hand =gh_cdr (hand)) { Score_element * s = unsmob_element (gh_caar (hand)); @@ -70,13 +75,13 @@ Collision::do_shifts() This should be put into Scheme. */ SCM -Collision::automatic_shift () +Collision::automatic_shift (Score_element *me) { Drul_array > clash_groups; Drul_array > shifts; SCM tups = SCM_EOL; - SCM s = get_elt_pointer ("elements"); + SCM s = me->get_elt_pointer ("elements"); for (; gh_pair_p (s); s = gh_cdr (s)) { SCM car = gh_car (s); @@ -124,7 +129,7 @@ Collision::automatic_shift () { for (int i=0; i < clash_groups[d].size (); i++) { - Slice s(clash_groups[d][i]->head_positions_interval ()); + Slice s(Note_column::head_positions_interval (clash_groups[d][i])); s[LEFT] --; s[RIGHT]++; extents[d].push (s); @@ -162,15 +167,15 @@ Collision::automatic_shift () Note_head * nu_l= cu_l->first_head(); Note_head * nd_l = cd_l->first_head(); - int downpos = cd_l->head_positions_interval ()[BIGGER]; - int uppos = cu_l->head_positions_interval ()[SMALLER]; + int downpos = Note_column::head_positions_interval (cd_l)[BIGGER]; + int uppos = Note_column::head_positions_interval (cu_l)[SMALLER]; bool merge = downpos == uppos && nu_l->balltype_i () == nd_l->balltype_i (); - if (!to_boolean (get_elt_property ("merge-differently-dotted"))) + if (!to_boolean (me->get_elt_property ("merge-differently-dotted"))) merge = merge && nu_l->dot_count () == nd_l->dot_count (); /* @@ -199,11 +204,11 @@ Collision::automatic_shift () SCM -Collision::forced_shift () +Collision::forced_shift (Score_element *me) { SCM tups = SCM_EOL; - SCM s = get_elt_pointer ("elements"); + SCM s = me->get_elt_pointer ("elements"); for (; gh_pair_p (s); s = gh_cdr (s)) { Score_element * se = unsmob_element (gh_car (s)); @@ -220,3 +225,7 @@ Collision::forced_shift () +Collision::Collision (Score_element* c) +{ + elt_l_ = c; +} diff --git a/lily/dot-column.cc b/lily/dot-column.cc index f3d3fccf3f..ce660a24a2 100644 --- a/lily/dot-column.cc +++ b/lily/dot-column.cc @@ -18,7 +18,7 @@ // todo: dots and elements duplicate each other. void -Dot_column::add_dots (Dots *d) +Dot_column::add_dots (Item *d) { Pointer_group_interface gi (this, "dots"); gi.add_element (d); @@ -39,7 +39,7 @@ Dot_column::add_head (Rhythmic_head *r) int -Dot_column::compare (Dots * const &d1, Dots * const &d2) +Dot_column::compare (Item * const &d1, Item * const &d2) { Staff_symbol_referencer_interface s1(d1); Staff_symbol_referencer_interface s2(d2); @@ -79,7 +79,7 @@ GLUE_SCORE_ELEMENT(Dot_column,after_line_breaking); SCM Dot_column::member_after_line_breaking () { - Link_array dots = Pointer_group_interface__extract_elements (this, (Dots*)0 , "dots"); + Link_array dots = Pointer_group_interface__extract_elements (this, (Item*)0 , "dots"); dots.sort (Dot_column::compare); if (dots.size () < 2) diff --git a/lily/dots.cc b/lily/dots.cc index edd64f0144..ccd29ae3b6 100644 --- a/lily/dots.cc +++ b/lily/dots.cc @@ -7,35 +7,33 @@ */ #include "dots.hh" +#include "item.hh" #include "molecule.hh" #include "paper-def.hh" #include "lookup.hh" #include "staff-symbol-referencer.hh" #include "directional-element-interface.hh" -Dots::Dots (SCM s) - : Item (s) -{ -} +MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(Dots,after_line_breaking); -GLUE_SCORE_ELEMENT(Dots,after_line_breaking); SCM -Dots::member_after_line_breaking () +Dots::after_line_breaking (SCM smob) { - SCM d= get_elt_property ("dot-count"); + Item * p = dynamic_cast (unsmob_element (smob)); + + SCM d= p->get_elt_property ("dot-count"); if (gh_number_p (d) && gh_scm2int (d)) { - if (!Directional_element_interface (this).get ()) - Directional_element_interface (this).set (UP); + if (!Directional_element_interface (p).get ()) + Directional_element_interface (p).set (UP); - Staff_symbol_referencer_interface si (this); - int p = int (si.position_f ()); - if (!(p % 2)) - si.set_position (p + Directional_element_interface (this).get ()); + Staff_symbol_referencer_interface si (p); + int pos = int (si.position_f ()); + if (!(pos % 2)) + si.set_position (pos + Directional_element_interface (p).get ()); } - return SCM_UNDEFINED; - + return SCM_UNDEFINED; } MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(Dots,brew_molecule); diff --git a/lily/hara-kiri-group-spanner.cc b/lily/hara-kiri-group-spanner.cc index 0094a018ed..3161032716 100644 --- a/lily/hara-kiri-group-spanner.cc +++ b/lily/hara-kiri-group-spanner.cc @@ -33,9 +33,6 @@ SCM Hara_kiri_group_spanner::member_after_line_breaking () { SCM worth = get_elt_pointer ("items-worth-living"); - /* - worth == self_scm is a stupid way to signal that we're done. - */ if (gh_pair_p (worth)) return SCM_UNDEFINED; diff --git a/lily/include/beam.hh b/lily/include/beam.hh index d14801e370..9a85134d64 100644 --- a/lily/include/beam.hh +++ b/lily/include/beam.hh @@ -35,7 +35,7 @@ public: int visible_stem_count () const; Stem* first_visible_stem () const; Stem* last_visible_stem () const; - + static Real rest_collision_callback (Score_element const*,Axis); Beam (SCM); void add_stem (Stem*); void set_grouping (Rhythmic_grouping def, Rhythmic_grouping current); diff --git a/lily/include/collision.hh b/lily/include/collision.hh index e1297545da..6f7ffbb471 100644 --- a/lily/include/collision.hh +++ b/lily/include/collision.hh @@ -9,8 +9,9 @@ #ifndef COLLISION_HH #define COLLISION_HH + #include "lily-proto.hh" -#include "item.hh" +#include "lily-guile.hh" /** @@ -35,17 +36,16 @@ Read and removed from elements. */ -class Collision : public Item +class Collision // interface { public: - SCM automatic_shift (); - SCM forced_shift (); - void do_shifts (); - SCM member_before_line_breaking (); - static SCM before_line_breaking (SCM); + Score_element* elt_l_; + static SCM automatic_shift (Score_element*); + static SCM forced_shift (Score_element*); + static Real force_shift_callback (Score_element const*, Axis); + static void do_shifts (Score_element*); - void add_column (Note_column*ncol_l); - Collision(SCM); + Collision(Score_element*); }; #endif // COLLISION_HH diff --git a/lily/include/dot-column.hh b/lily/include/dot-column.hh index c91d05d3d4..0a71a1466d 100644 --- a/lily/include/dot-column.hh +++ b/lily/include/dot-column.hh @@ -18,8 +18,8 @@ */ class Dot_column : public Item { - static int compare (Dots * const&,Dots * const&); - void add_dots (Dots*); + static int compare (Item * const&,Item * const&); + void add_dots (Item*); public: VIRTUAL_COPY_CONS (Score_element); void add_head (Rhythmic_head*); diff --git a/lily/include/dots.hh b/lily/include/dots.hh index f816cc2a24..3333cd26b7 100644 --- a/lily/include/dots.hh +++ b/lily/include/dots.hh @@ -10,7 +10,8 @@ #ifndef DOTS_HH #define DOTS_HH -#include "item.hh" +#include "lily-proto.hh" +#include "lily-guile.hh" /** @@ -23,15 +24,11 @@ */ -class Dots : public Item +class Dots // interface { public: - SCM member_brew_molecule () const; - SCM member_after_line_breaking (); static SCM after_line_breaking (SCM); static SCM brew_molecule (SCM); - - Dots (SCM); }; #endif // DOTS_HH diff --git a/lily/include/note-column.hh b/lily/include/note-column.hh index c8cf7959e9..dc6d665f77 100644 --- a/lily/include/note-column.hh +++ b/lily/include/note-column.hh @@ -14,12 +14,13 @@ /** a struct for treating a group of noteheads (noteheads, stem (chord) and scripts) as a single entity. + + UGR. Junkme. refpoint should be the notehead, dir should come from stem. + */ class Note_column : public Item { public: - SCM member_after_line_breaking (); - static SCM after_line_breaking (SCM); static int shift_compare (Note_column *const &, Note_column*const&); /** The relative position of the "voice" containing this @@ -30,15 +31,15 @@ public: Direction dir () const; - Interval_t head_positions_interval() const; - + static Slice head_positions_interval(Score_element* me) ; + static Direction static_dir (Score_element*); void translate_rests(int dy); Note_head * first_head ()const; Interval rest_dim ()const ; Note_column (SCM); - void set_stem (Stem*); - void set_dotcol (Dot_column*); - void add_head (Rhythmic_head*); + void set_stem (Score_element*); + void set_dotcol (Score_element*); + void add_head (Score_element*); bool rest_b () const; Stem *stem_l()const; diff --git a/lily/include/note-heads-engraver.hh b/lily/include/note-heads-engraver.hh index 39eb3868fe..bbe8e0254f 100644 --- a/lily/include/note-heads-engraver.hh +++ b/lily/include/note-heads-engraver.hh @@ -15,7 +15,7 @@ */ class Note_heads_engraver : public Engraver { Link_array note_p_arr_; - Link_array dot_p_arr_; + Link_array dot_p_arr_; Link_array note_req_l_arr_; Moment note_end_mom_; public: diff --git a/lily/include/rest-collision.hh b/lily/include/rest-collision.hh index 10b8ac01c1..4eaddd45d7 100644 --- a/lily/include/rest-collision.hh +++ b/lily/include/rest-collision.hh @@ -11,16 +11,18 @@ #define REST_COLLISION_HH #include "lily-proto.hh" -#include "item.hh" +#include "lily-guile.hh" -class Rest_collision : public Item { +class Rest_collision // interface +{ public: + Score_element *elt_l_; + void add_column (Note_column*); - Interval rest_dim () const; - - Rest_collision(SCM); + Rest_collision(Score_element*); + void set_interface (); - SCM member_after_line_breaking (); - static SCM after_line_breaking (SCM); + static Real force_shift_callback (Score_element const*, Axis); + static SCM do_shift (Score_element*,SCM); }; #endif // REST_COLLISION_HH diff --git a/lily/include/rest-engraver.hh b/lily/include/rest-engraver.hh index 54d5967480..af5715269d 100644 --- a/lily/include/rest-engraver.hh +++ b/lily/include/rest-engraver.hh @@ -15,7 +15,7 @@ class Rest_engraver : public Engraver { Rest_req *rest_req_l_; - Dots * dot_p_; + Item * dot_p_; Rest * rest_p_; protected: virtual bool do_try_music (Music *); diff --git a/lily/include/rhythmic-head.hh b/lily/include/rhythmic-head.hh index 8145bd9118..33e7bb279b 100644 --- a/lily/include/rhythmic-head.hh +++ b/lily/include/rhythmic-head.hh @@ -30,9 +30,9 @@ public: VIRTUAL_COPY_CONS(Rhythmic_head); int balltype_i () const; - void add_dots (Dots *); + void add_dots (Item *); Stem * stem_l () const; - Dots * dots_l () const; + Item * dots_l () const; int dot_count () const; SCM member_after_line_breaking (); diff --git a/lily/note-column.cc b/lily/note-column.cc index db93c4370b..613a9bae82 100644 --- a/lily/note-column.cc +++ b/lily/note-column.cc @@ -8,12 +8,8 @@ #include // ceil #include "axis-group-interface.hh" -#include "dot-column.hh" #include "note-column.hh" -#include "beam.hh" -#include "note-head.hh" #include "stem.hh" -#include "rest.hh" #include "debug.hh" #include "paper-def.hh" #include "group-interface.hh" @@ -22,9 +18,7 @@ bool Note_column::rest_b () const { - SCM r = get_elt_pointer ("rests"); - - return gh_pair_p (r); + return unsmob_element (get_elt_pointer ("rest")); } int @@ -41,7 +35,6 @@ Note_column::shift_compare (Note_column *const &p1, Note_column*const&p2) Note_column::Note_column( SCM s) : Item (s) { - set_elt_pointer ("rests", SCM_EOL); set_elt_pointer ("note-heads", SCM_EOL); Axis_group_interface (this).set_interface (); Axis_group_interface (this).set_axes (X_AXIS, Y_AXIS); @@ -53,18 +46,17 @@ Note_column::stem_l () const { SCM s = get_elt_pointer ("stem"); return dynamic_cast (unsmob_element (s)); - } Slice -Note_column::head_positions_interval() const +Note_column::head_positions_interval(Score_element *me) { Slice iv; iv.set_empty (); - SCM h = get_elt_pointer ("note-heads"); + SCM h = me->get_elt_pointer ("note-heads"); for (; gh_pair_p (h); h = gh_cdr (h)) { Score_element *se = unsmob_element (gh_car (h)); @@ -77,20 +69,27 @@ Note_column::head_positions_interval() const } Direction -Note_column::dir () const +Note_column::static_dir (Score_element* me) { - if (stem_l ()) - return stem_l ()->get_direction (); - else if (gh_pair_p (get_elt_pointer ("note-heads"))) - return (Direction)sign (head_positions_interval().center ()); + Score_element *stem = unsmob_element (me->get_elt_pointer ("stem")); + if (dynamic_cast (stem)) + return dynamic_cast (stem)->get_direction (); + else if (gh_pair_p (me->get_elt_pointer ("note-heads"))) + return (Direction)sign (head_positions_interval (me).center ()); programming_error ("Note column without heads and stem!"); return CENTER; } +Direction +Note_column::dir () const +{ + return static_dir ((Score_element*) this); +} + void -Note_column::set_stem (Stem * stem_l) +Note_column::set_stem (Score_element * stem_l) { set_elt_pointer ("stem", stem_l->self_scm_); @@ -98,20 +97,17 @@ Note_column::set_stem (Stem * stem_l) Axis_group_interface (this).add_element (stem_l); } - - void -Note_column::add_head (Rhythmic_head *h) +Note_column::add_head (Score_element *h) { - if (Rest*r=dynamic_cast (h)) + if (to_boolean (h->get_elt_property ("rest-interface"))) { - Pointer_group_interface gi (this, "rests"); - gi.add_element (h); + this->set_elt_pointer ("rest", h->self_scm_); } - if (Note_head *nh=dynamic_cast (h)) + else if (to_boolean (h->get_elt_property ("note-head-interface"))) { Pointer_group_interface gi (this, "note-heads"); - gi.add_element (nh); + gi.add_element (h); } Axis_group_interface (this).add_element (h); } @@ -122,106 +118,28 @@ Note_column::add_head (Rhythmic_head *h) void Note_column::translate_rests (int dy_i) { - SCM s = get_elt_pointer ("rests"); - for (; gh_pair_p (s); s = gh_cdr (s)) + Score_element * r = unsmob_element (get_elt_pointer ("rest")); + if (r) { - Score_element * se = unsmob_element (gh_car (s)); - Staff_symbol_referencer_interface si (se); - - se->translate_axis (dy_i * si.staff_space ()/2.0, Y_AXIS); + Staff_symbol_referencer_interface si (r); + r->translate_axis (dy_i * si.staff_space ()/2.0, Y_AXIS); } } void -Note_column::set_dotcol (Dot_column *d) +Note_column::set_dotcol (Score_element *d) { Axis_group_interface (this).add_element (d); } -/* - [TODO] - handle rest under beam (do_post: beams are calculated now) - what about combination of collisions and rest under beam. - - Should lookup - - rest -> stem -> beam -> interpolate_y_position () -*/ - -GLUE_SCORE_ELEMENT(Note_column,after_line_breaking); -SCM -Note_column::member_after_line_breaking () -{ - if (!stem_l () || !rest_b ()) - return SCM_UNDEFINED; - - Beam * b = stem_l ()->beam_l (); - if (!b || !b->visible_stem_count ()) - return SCM_UNDEFINED; - - /* ugh. Should be done by beam. - (what? should be done --jcn) - scary too?: height is calculated during post_processing - */ - Real beam_dy = 0; - Real beam_y = 0; - - SCM s = b->get_elt_property ("height"); - if (gh_number_p (s)) - beam_dy = gh_scm2double (s); - - s = b->get_elt_property ("y-position"); - if (gh_number_p (s)) - beam_y = gh_scm2double (s); - - - Real x0 = b->first_visible_stem ()->relative_coordinate (0, X_AXIS); - Real dx = b->last_visible_stem ()->relative_coordinate (0, X_AXIS) - x0; - Real dydx = beam_dy && dx ? beam_dy/dx : 0; - - Direction d = stem_l ()->get_direction (); - Real beamy = (stem_l ()->relative_coordinate (0, X_AXIS) - x0) * dydx + beam_y; - - s = get_elt_pointer ("rests"); - Score_element * se = unsmob_element (gh_car (s)); - Staff_symbol_referencer_interface si (se); - - Real staff_space = si.staff_space (); - Real rest_dim = extent (Y_AXIS)[d]*2.0 /staff_space ; - - Real minimum_dist - = paper_l ()->get_var ("restcollision_minimum_beamdist") ; - Real dist = - minimum_dist + -d * (beamy - rest_dim) >? 0; - - int stafflines = si.line_count (); - - // move discretely by half spaces. - int discrete_dist = int (ceil (dist )); - - // move by whole spaces inside the staff. - if (discrete_dist < stafflines+1) - discrete_dist = int (ceil (discrete_dist / 2.0)* 2.0); - - translate_rests (-d * discrete_dist); - - return SCM_UNDEFINED; -} Interval Note_column::rest_dim () const { - Interval restdim; - SCM s = get_elt_pointer ("rests"); - for (; gh_pair_p (s); s = gh_cdr (s)) - { - Score_element * sc = unsmob_element ( gh_car (s)); - restdim.unite (sc->extent (Y_AXIS)); - } - - return restdim; + Score_element * r = unsmob_element (get_elt_pointer ("rest")); + return r->extent (Y_AXIS); } Note_head* diff --git a/lily/note-head.cc b/lily/note-head.cc index 4452ce905a..5c4e1b6905 100644 --- a/lily/note-head.cc +++ b/lily/note-head.cc @@ -61,7 +61,7 @@ Note_head::member_before_line_breaking () if (balltype_i () > 2) set_elt_property ("duration-log", gh_int2scm (2)); - if (Dots *d = dots_l ()) + if (Item *d = dots_l ()) { // move into Rhythmic_head? Staff_symbol_referencer_interface si (d); Staff_symbol_referencer_interface me (this); diff --git a/lily/note-heads-engraver.cc b/lily/note-heads-engraver.cc index 067a3d3933..c12f28df11 100644 --- a/lily/note-heads-engraver.cc +++ b/lily/note-heads-engraver.cc @@ -73,7 +73,7 @@ Note_heads_engraver::do_process_music() if (note_req_l->duration_.dots_i_) { - Dots * d = new Dots (get_property ("basicDotsProperties")); + Item * d = new Item (get_property ("basicDotsProperties")); Staff_symbol_referencer_interface sd (d); sd.set_interface (); diff --git a/lily/rest-collision-engraver.cc b/lily/rest-collision-engraver.cc index 606dfe30d6..bea1a8cc1c 100644 --- a/lily/rest-collision-engraver.cc +++ b/lily/rest-collision-engraver.cc @@ -8,11 +8,25 @@ #include "debug.hh" #include "rest-collision.hh" -#include "rest-collision-engraver.hh" +#include "engraver.hh" #include "collision.hh" #include "note-column.hh" +class Rest_collision_engraver : public Engraver +{ + Item* rest_collision_p_; + + Link_array note_column_l_arr_; +protected: + virtual void acknowledge_element (Score_element_info); + virtual void process_acknowledged (); + virtual void do_pre_move_processing(); +public: + VIRTUAL_COPY_CONS(Translator); + Rest_collision_engraver(); + +}; ADD_THIS_TRANSLATOR(Rest_collision_engraver); @@ -27,11 +41,11 @@ Rest_collision_engraver::process_acknowledged () if (rest_collision_p_ || note_column_l_arr_.size () < 2) return; - rest_collision_p_ = new Rest_collision (get_property ("basicRestCollisionProperties")); - + rest_collision_p_ = new Item (get_property ("basicRestCollisionProperties")); + Rest_collision (rest_collision_p_).set_interface(); announce_element (Score_element_info (rest_collision_p_, 0)); for (int i=0; i< note_column_l_arr_.size (); i++) - rest_collision_p_->add_column (note_column_l_arr_[i]); + Rest_collision (rest_collision_p_).add_column (note_column_l_arr_[i]); } void diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc index a72e0504e3..69f1ff0eed 100644 --- a/lily/rest-collision.cc +++ b/lily/rest-collision.cc @@ -7,32 +7,52 @@ */ #include // ceil. -#include "beam.hh" #include "debug.hh" #include "rest-collision.hh" #include "note-column.hh" #include "stem.hh" #include "note-head.hh" -#include "collision.hh" #include "paper-def.hh" #include "rest.hh" #include "group-interface.hh" #include "staff-symbol-referencer.hh" #include "duration.hh" -void -Rest_collision::add_column (Note_column *nc_l) +Real +Rest_collision::force_shift_callback (Score_element const*them, Axis a) { - add_dependency (nc_l); - Pointer_group_interface gi (this); - if (nc_l->rest_b ()) - gi.name_ = "rests"; - else - gi.name_ = "notes"; + assert (a == Y_AXIS); + + Score_element * rc = unsmob_element (them->get_elt_pointer ("rest-collision")); + + if (rc) + { + /* + Done: destruct pointers, so we do the shift only once. + */ + SCM elts = rc->get_elt_pointer ("elements"); + rc->set_elt_pointer ("elements", SCM_EOL); + + do_shift (rc, elts); + } - gi.add_element (nc_l); + return 0.0; } +void +Rest_collision::add_column (Note_column *p) +{ + elt_l_->add_dependency (p); + Pointer_group_interface gi (elt_l_); + gi.add_element (p); + + p->add_offset_callback (&Rest_collision::force_shift_callback, Y_AXIS); + p->set_elt_pointer ("rest-collision", elt_l_->self_scm_); +} + +/* + these 3 have to go, because they're unnecessary complications. + */ static Duration to_duration (int type, int dots) { @@ -42,6 +62,11 @@ to_duration (int type, int dots) return d; } +/* + UGH + + elt_l_ should be "duration" independent + */ static Moment rhythmic_head2mom (Rhythmic_head* r) { @@ -52,23 +77,32 @@ rhythmic_head2mom (Rhythmic_head* r) ugh */ static Rhythmic_head* -col2rhythmic_head (Note_column* c) +col2rhythmic_head (Score_element* c) { - SCM s = c->get_elt_pointer ("rests"); - assert (gh_pair_p (s)); - Score_element* e = unsmob_element (gh_car (s)); - return dynamic_cast (e); + return dynamic_cast (unsmob_element (c->get_elt_pointer ("rest"))); } -GLUE_SCORE_ELEMENT(Rest_collision,after_line_breaking); +/* + TODO: fixme, fucks up if called twice on the same set of rests. + */ SCM -Rest_collision::member_after_line_breaking () +Rest_collision::do_shift (Score_element *me, SCM elts) { - Link_array rest_l_arr = - Pointer_group_interface__extract_elements (this, (Note_column*) 0, "rests"); - Link_array ncol_l_arr = - Pointer_group_interface__extract_elements (this, (Note_column*) 0, "notes"); + /* + ugh. -> score elt type + */ + Link_array rests; + Link_array notes; + + for (SCM s = elts; gh_pair_p (s); s = gh_cdr (s)) + { + Score_element * e = unsmob_element (gh_car (s)); + if (e && unsmob_element (e->get_elt_pointer ("rest"))) + rests.push (dynamic_cast (e)); + else + notes.push (dynamic_cast (e)); + } /* @@ -81,21 +115,21 @@ Rest_collision::member_after_line_breaking () */ // no rests to collide - if (!rest_l_arr.size()) + if (!rests.size()) return SCM_UNDEFINED; // no partners to collide with - if (rest_l_arr.size() + ncol_l_arr.size () < 2) + if (rests.size() + notes.size () < 2) return SCM_UNDEFINED; // meisjes met meisjes - if (!ncol_l_arr.size()) + if (!notes.size()) { - Moment m = rhythmic_head2mom (col2rhythmic_head (rest_l_arr[0])); + Moment m = rhythmic_head2mom (col2rhythmic_head (rests[0])); int i = 1; - for (; i < rest_l_arr.size (); i++) + for (; i < rests.size (); i++) { - Moment me = rhythmic_head2mom (col2rhythmic_head (rest_l_arr[i])); + Moment me = rhythmic_head2mom (col2rhythmic_head (rests[i])); if (me != m) break; } @@ -107,17 +141,17 @@ Rest_collision::member_after_line_breaking () (urg: all 3 of them, currently). */ int display_count; - SCM s = get_elt_property ("maximum-rest-count"); - if (i == rest_l_arr.size () - && gh_number_p (s) && gh_scm2int (s) < rest_l_arr.size ()) + SCM s = me->get_elt_property ("maximum-rest-count"); + if (i == rests.size () + && gh_number_p (s) && gh_scm2int (s) < rests.size ()) { display_count = gh_scm2int (s); for (; i > display_count; i--) - col2rhythmic_head (rest_l_arr[i-1]) + col2rhythmic_head (rests[i-1]) ->set_elt_property ("molecule-callback", SCM_BOOL_T); } else - display_count = rest_l_arr.size (); + display_count = rests.size (); /* UGH. Should get dims from table. Should have minimum dist. @@ -125,47 +159,45 @@ Rest_collision::member_after_line_breaking () int dy = display_count > 2 ? 6 : 4; if (display_count > 1) { - rest_l_arr[0]->translate_rests (dy); - rest_l_arr[1]->translate_rests (-dy); + rests[0]->translate_rests (dy); + rests[1]->translate_rests (-dy); } } // meisjes met jongetjes else { - if (rest_l_arr.size () > 1) + if (rests.size () > 1) { warning (_("too many colliding rests")); } - if (ncol_l_arr.size () > 1) + if (notes.size () > 1) { warning (_("too many notes for rest collision")); } - Note_column * rcol = rest_l_arr[0]; + Note_column * rcol = rests[0]; // try to be opposite of noteheads. - Direction dir = - ncol_l_arr[0]->dir(); + Direction dir = - notes[0]->dir(); Interval restdim = rcol->rest_dim (); if (restdim.empty_b ()) return SCM_UNDEFINED; // staff ref'd? - Real staff_space = paper_l()->get_var ("interline"); + Real staff_space = me->paper_l()->get_var ("interline"); /* FIXME - staff_space = rcol->rest_l_arr[0]->staff_space (); + staff_space = rcol->rests[0]->staff_space (); */ - Real half_staff_space_f = staff_space/2; - Real minimum_dist = paper_l ()->get_var ("restcollision_minimum_dist") - * half_staff_space_f; + Real minimum_dist = gh_scm2double (me->get_elt_property ("minimum-distance")) * staff_space; /* assumption: ref points are the same. */ Interval notedim; - for (int i = 0; i < ncol_l_arr.size(); i++) + for (int i = 0; i < notes.size(); i++) { - notedim.unite (ncol_l_arr[i]->extent (Y_AXIS)); + notedim.unite (notes[i]->extent (Y_AXIS)); } Interval inter (notedim); @@ -176,8 +208,8 @@ Rest_collision::member_after_line_breaking () // FIXME - //int stafflines = 5; // rcol->rest_l_arr[0]->line_count; - int stafflines = Staff_symbol_referencer_interface (this).line_count (); + //int stafflines = 5; // rcol->rests[0]->line_count; + int stafflines = Staff_symbol_referencer_interface (me).line_count (); // hurg? stafflines = stafflines != 0 ? stafflines : 5; @@ -193,13 +225,15 @@ Rest_collision::member_after_line_breaking () return SCM_UNDEFINED; } - -Rest_collision::Rest_collision(SCM s) - : Item (s) +void +Rest_collision::set_interface () { - set_elt_pointer ("rests", SCM_EOL); - set_elt_pointer ("notes", SCM_EOL); - set_extent_callback (0, X_AXIS); - set_extent_callback (0, Y_AXIS); + elt_l_->set_extent_callback (0, X_AXIS); + elt_l_->set_extent_callback (0, Y_AXIS); + elt_l_->set_elt_pointer ("elements", SCM_EOL); } +Rest_collision::Rest_collision (Score_element* c) +{ + elt_l_ = c; +} diff --git a/lily/rest-engraver.cc b/lily/rest-engraver.cc index aefefc453a..96f34bfe96 100644 --- a/lily/rest-engraver.cc +++ b/lily/rest-engraver.cc @@ -56,7 +56,7 @@ Rest_engraver::do_process_music () if (rest_req_l_->duration_.dots_i_) { - dot_p_ = new Dots (get_property ("basicDotsProperties")); + dot_p_ = new Item (get_property ("basicDotsProperties")); Staff_symbol_referencer_interface si (dot_p_); si.set_interface (); diff --git a/lily/rest.cc b/lily/rest.cc index 9d9385f567..f76968aaa0 100644 --- a/lily/rest.cc +++ b/lily/rest.cc @@ -24,8 +24,7 @@ Rest::member_after_line_breaking () Staff_symbol_referencer_interface si (this); si.set_position (si.position_f () + 2); } - - Dots * d = dots_l (); + Item * d = dots_l (); if (d && balltype_i () > 4) // UGH. { /* diff --git a/lily/rhythmic-column-engraver.cc b/lily/rhythmic-column-engraver.cc index ad0c6acbdd..06a67569cc 100644 --- a/lily/rhythmic-column-engraver.cc +++ b/lily/rhythmic-column-engraver.cc @@ -8,13 +8,34 @@ #include "dimension-cache.hh" #include "slur.hh" -#include "rhythmic-column-engraver.hh" +#include "engraver.hh" #include "note-head.hh" #include "stem.hh" #include "note-column.hh" #include "dot-column.hh" #include "musical-request.hh" +class Rhythmic_column_engraver :public Engraver +{ + Link_array rhead_l_arr_; + Link_array grace_slur_endings_; + Stem * stem_l_; + Note_column *ncol_p_; + Dot_column *dotcol_l_; + +protected: + VIRTUAL_COPY_CONS(Translator); + virtual void acknowledge_element (Score_element_info); + virtual void process_acknowledged (); + virtual void do_pre_move_processing(); + virtual void do_post_move_processing(); +public: + Rhythmic_column_engraver(); + +}; + + + Rhythmic_column_engraver::Rhythmic_column_engraver() { stem_l_ =0; diff --git a/lily/rhythmic-head.cc b/lily/rhythmic-head.cc index b6a83b6d43..76a2d698a0 100644 --- a/lily/rhythmic-head.cc +++ b/lily/rhythmic-head.cc @@ -18,11 +18,11 @@ #include "staff-symbol-referencer.hh" -Dots* +Item* Rhythmic_head::dots_l () const { SCM s = get_elt_pointer ("dot"); - return dynamic_cast (unsmob_element (s)); + return dynamic_cast (unsmob_element (s)); } int @@ -51,7 +51,7 @@ GLUE_SCORE_ELEMENT(Rhythmic_head,after_line_breaking); SCM Rhythmic_head::member_after_line_breaking () { - if (Dots *d = dots_l ()) + if (Item *d = dots_l ()) { Staff_symbol_referencer_interface si (d); Staff_symbol_referencer_interface me (d); @@ -63,7 +63,7 @@ Rhythmic_head::member_after_line_breaking () void -Rhythmic_head::add_dots (Dots *dot_l) +Rhythmic_head::add_dots (Item *dot_l) { set_elt_pointer ("dot", dot_l->self_scm_); dot_l->add_dependency (this); diff --git a/lily/stem.cc b/lily/stem.cc index ab18bcd9b1..e8fe8b4647 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -205,20 +205,23 @@ Stem::add_head (Rhythmic_head *n) n->set_elt_pointer ("stem", this->self_scm_); n->add_dependency (this); - Pointer_group_interface gi (this); if (Note_head *nh = dynamic_cast (n)) - gi.name_ = "heads"; - else - gi.name_ = "rests"; + { + Pointer_group_interface gi (this); + gi.name_ = "heads"; - gi.add_element (n); + gi.add_element (n); + } + else + { + n->set_elt_pointer ("rest", n->self_scm_); + } } Stem::Stem (SCM s) : Item (s) { set_elt_pointer ("heads", SCM_EOL); - set_elt_pointer ("rests", SCM_EOL); add_offset_callback ( &Stem::off_callback, X_AXIS); } diff --git a/ly/engraver.ly b/ly/engraver.ly index 079ebe69e9..2fff02a9f8 100644 --- a/ly/engraver.ly +++ b/ly/engraver.ly @@ -456,7 +456,6 @@ ScoreContext = \translator { ) basicCollisionProperties = #`( (axes 0 1) - (before-line-breaking-callback . ,Collision::before_line_breaking) ) basicCrescendoProperties = #`( (molecule-callback . ,Crescendo::brew_molecule) @@ -467,7 +466,8 @@ ScoreContext = \translator { basicDotsProperties = #`( (molecule-callback . ,Dots::brew_molecule) (after-line-breaking-callback . ,Dots::after_line_breaking) - (dot-count . 1) + (dot-count . 1) + (dots-interface . #t) ) basicDynamicLineSpannerProperties = #`( (dynamic-interface . #t) @@ -531,10 +531,14 @@ ScoreContext = \translator { (axes 0 1) ) basicNoteHeadProperties = #`( + (note-head-interface . #t) (molecule-callback . ,Note_head::brew_molecule) (before-line-breaking-callback . ,Note_head::before_line_breaking) (after-line-breaking-callback . ,Rhythmic_head::after_line_breaking) ) + basicNoteNameProperties = #`( + (molecule-callback . ,Text_item::brew_molecule) + ) basicOctavateEightProperties = #`( (self-alignment-X . 0) (text . "8") @@ -550,13 +554,15 @@ ScoreContext = \translator { ) basicTextProperties = #`( ) - basicRestProperties = #`( + basicRestProperties = #`( + (rest-interface . #t) (molecule-callback . ,Rest::brew_molecule) (after-line-breaking-callback . ,Rhythmic_head::after_line_breaking) + (minimum-beam-collision-distance . 1.5) ) basicRestCollisionProperties = #`( - (after-line-breaking-callback . ,Rest_collision::after_line_breaking) + (minimum-distance . 0.75) ) basicScriptProperties = #`( (molecule-callback . ,Script::brew_molecule) diff --git a/ly/params.ly b/ly/params.ly index 46e240e986..0fb31179fd 100644 --- a/ly/params.ly +++ b/ly/params.ly @@ -185,8 +185,6 @@ crescendo_dash_thickness = 1.2*\stafflinethickness; crescendo_dash = 4.0*\staffspace; % in internote. -restcollision_minimum_dist = 3.0; -restcollision_minimum_beamdist = 1.5; % unit for note collision resolving -- 2.11.4.GIT