From: Jan Nieuwenhuizen Date: Tue, 27 Jun 2000 20:29:05 +0000 (+0200) Subject: patch::: 1.3.65.jcn2 X-Git-Tag: release/1.3.66~2 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=f965da294b4aa59759cdc3a8a3cf5341e4402c3d;p=lilypond.git patch::: 1.3.65.jcn2 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. --- diff --git a/CHANGES b/CHANGES index 79fcef79fa..c73ad09169 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,16 @@ +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. + 1.3.65.jcn1 =========== +* Bugfix: 16th beams are also beams. + * Patches from hw 1.3.64.uu1 diff --git a/VERSION b/VERSION index 4d97db3d86..b7e9595ca4 100644 --- a/VERSION +++ b/VERSION @@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=3 PATCH_LEVEL=65 -MY_PATCH_LEVEL=jcn1 +MY_PATCH_LEVEL=jcn2 # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/lily/cross-staff.cc b/lily/cross-staff.cc index e187466121..8e5e8e6f4a 100644 --- a/lily/cross-staff.cc +++ b/lily/cross-staff.cc @@ -4,6 +4,9 @@ #include "spanner.hh" #include "warn.hh" +/* + JUNKME + */ Real calc_interstaff_dist (Item const *item, Spanner const *span) { diff --git a/lily/include/slur.hh b/lily/include/slur.hh index 80b18fbfc7..3176d4b6bb 100644 --- a/lily/include/slur.hh +++ b/lily/include/slur.hh @@ -37,7 +37,6 @@ private: void de_uglyfy (Slur_bezier_bow* bb, Real default_height); void set_extremities (); void set_control_points (); - int cross_staff_count () const; Offset encompass_offset (Note_column const* )const; }; diff --git a/lily/slur.cc b/lily/slur.cc index 5f075607aa..260e2cecc9 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -9,6 +9,7 @@ /* [TODO] + * fix broken interstaff slurs * begin and end should be treated as a/acknowledge Scripts. * broken slur should have uniform trend * smart changing of endings @@ -28,7 +29,6 @@ #include "debug.hh" #include "slur-bezier-bow.hh" #include "main.hh" -#include "cross-staff.hh" #include "group-interface.hh" #include "staff-symbol-referencer.hh" @@ -130,8 +130,8 @@ Slur::encompass_offset (Note_column const* col) const if (!stem_l) { warning (_ ("Slur over rest?")); - o[X_AXIS] = col->relative_coordinate (0, X_AXIS); - o[Y_AXIS] = col->extent (Y_AXIS)[dir]; + o[X_AXIS] = col->relative_coordinate (0, X_AXIS); + o[Y_AXIS] = col->relative_coordinate (0, Y_AXIS); return o; } Direction stem_dir = Directional_element_interface (stem_l).get (); @@ -146,18 +146,17 @@ Slur::encompass_offset (Note_column const* col) const if ((stem_dir == dir) && !stem_l->extent (Y_AXIS).empty_b ()) { - o[Y_AXIS] = stem_l->extent (Y_AXIS)[dir]; + o[Y_AXIS] = stem_l->relative_coordinate (0, Y_AXIS); } else { - o[Y_AXIS] = col->extent (Y_AXIS)[dir]; + o[Y_AXIS] = col->relative_coordinate (0, Y_AXIS); } /* leave a gap: slur mustn't touch head/stem */ o[Y_AXIS] += dir * paper_l ()->get_var ("slur_y_free"); - o[Y_AXIS] -= calc_interstaff_dist (stem_l, this); return o; } @@ -302,39 +301,13 @@ Slur::get_attachment (Direction dir) const } } - - /* - URG - */ - - if (str != "loose-end") - { - Link_array encompass_arr = - Pointer_group_interface__extract_elements (this, (Note_column*)0, - "note-columns"); - o -= Offset (0, calc_interstaff_dist (dir == LEFT ? encompass_arr[0] - : encompass_arr.top (), this)); - } + if (str != "loose-end") + o += Offset (0, get_bound (dir)->relative_coordinate (0, Y_AXIS) + - relative_coordinate (0, Y_AXIS)); + return o; } -int -Slur::cross_staff_count ()const -{ - Link_array encompass_arr = - Pointer_group_interface__extract_elements (this, (Note_column*)0, "note-columns"); - - int k=0; - - for (int i = 0; i < encompass_arr.size (); i++) - { - if (calc_interstaff_dist (encompass_arr[i], this)) - k++; - } - return k; -} - - Array Slur::get_encompass_offset_arr () const { @@ -343,7 +316,8 @@ Slur::get_encompass_offset_arr () const Array offset_arr; - Offset origin (relative_coordinate (0, X_AXIS), 0); + Offset origin (relative_coordinate (0, X_AXIS), + relative_coordinate (0, Y_AXIS)); int first = 1; int last = encompass_arr.size () - 2; @@ -353,18 +327,12 @@ Slur::get_encompass_offset_arr () const /* left is broken edge */ - int cross_count = cross_staff_count (); - /* - URG - */ - bool cross_b = cross_count && cross_count < encompass_arr.size (); if (encompass_arr[0] != get_bound (LEFT)) { first--; - Real is = calc_interstaff_dist (encompass_arr[0], this); - if (cross_b) - offset_arr[0][Y_AXIS] += is; + offset_arr[0][Y_AXIS] -= encompass_arr[0]->relative_coordinate (0, Y_AXIS) + - relative_coordinate (0, Y_AXIS); } /* @@ -383,6 +351,12 @@ Slur::get_encompass_offset_arr () const offset_arr.push (Offset (spanner_length (), 0) + get_attachment (RIGHT)); + if (encompass_arr[0] != get_bound (LEFT)) + { + offset_arr.top ()[Y_AXIS] -= encompass_arr.top ()->relative_coordinate (0, Y_AXIS) + - relative_coordinate (0, Y_AXIS); + } + return offset_arr; } diff --git a/scm/slur.scm b/scm/slur.scm index 3df0bc3ebe..58a1b2b99f 100644 --- a/scm/slur.scm +++ b/scm/slur.scm @@ -9,7 +9,20 @@ (get-pointer stem 'heads)))) -;; FIXME: document this. +;; Slur-extremity-rules is a list of rules. Each rule is a pair +;; (fuction . attachment), where function takes two arguments, +;; the slur and the direction of the attachment. +;; +;; The rules are tried starting from the car of this list. If the +;; function part (car) evaluates to #t, the corresponding +;; attachment (cdr) is used for the slur's dir. Otherwise, the next +;; rule is tried. +;; +;; Currently, we have attachments: +;; +;; 'head 'along-side-stem 'stem 'loose-end +;; + (define slur-extremity-rules (list (cons (lambda (slur dir) @@ -46,6 +59,14 @@ )) +;; This list defines the offsets for each type of attachment. +;; The format of each element is +;; (attachment stem-dir * attachment-dir slur-dir) +;; Different attachments have different default points: +;; +;; head: Default position is centered in X, on outer side of head Y +;; along-side-stem: Default position is on stem X, on outer side of head Y +;; stem: Default position is on stem X, at stem end Y (define slur-extremity-offset-alist '( ((head 1 1) . (-0.25 . 0.2))