]> git.donarmstrong.com Git - lilypond.git/commitdiff
Fix #339.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 13 Mar 2008 02:33:27 +0000 (23:33 -0300)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 13 Mar 2008 02:33:27 +0000 (23:33 -0300)
Introduce prefer-dotted-right property.

input/regression/collision-dots-up-space-dotted.ly [new file with mode: 0644]
lily/note-collision.cc
scm/define-grob-properties.scm
scm/define-grobs.scm

diff --git a/input/regression/collision-dots-up-space-dotted.ly b/input/regression/collision-dots-up-space-dotted.ly
new file mode 100644 (file)
index 0000000..4175fba
--- /dev/null
@@ -0,0 +1,19 @@
+\header {
+
+  texidoc = "For collisions where the upper note is dotted and in a
+  space, the upper is moved to right.  This behavior can be tuned by
+  prefer-dotted-right."
+
+  }
+
+\version "2.10.20"
+
+\paper{ ragged-right=##t }
+
+\new Staff \relative c' <<
+  { fis4.
+    \override Staff.NoteCollision #'prefer-dotted-right = ##f
+    fis4. }
+  \\
+  { \autoBeamOff e8 e e e e e e }
+>> 
index b4e353d978a16a5693e015b136494f596fb36a25..ab157412885b75fa5c00b0cc708dcc18c0ade44b 100644 (file)
@@ -279,12 +279,20 @@ check_meshing_chords (Grob *me,
     {
       Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
       if (!Staff_symbol_referencer::on_line (staff, ups[0]))
-       {
-         Grob *d = unsmob_grob (head_up->get_object ("dot"));
-         Grob *parent = d->get_parent (X_AXIS);
-         if (Dot_column::has_interface (parent))
-           Side_position_interface::add_support (parent, head_down);
-       }
+       /*
+         TODO: consider junking the else body.
+       */
+       if (to_boolean (me->get_property ("prefer-dotted-right")))
+         {
+           shift_amount = 0.5;
+         }
+       else
+         {
+           Grob *d = unsmob_grob (head_up->get_object ("dot"));
+           Grob *parent = d->get_parent (X_AXIS);
+           if (Dot_column::has_interface (parent))
+             Side_position_interface::add_support (parent, head_down);
+         }
     }
 
   /* For full or close half collisions, the right hand head may
@@ -333,30 +341,30 @@ Note_collision_interface::calc_positioning_done (SCM smob)
   Grob *me = unsmob_grob (smob);
   me->set_property ("positioning-done", SCM_BOOL_T);
   
-  Drul_array<vector<Grob*> > cg = get_clash_groups (me);
+  Drul_array<vector<Grob*> > clash_groups = get_clash_groups (me);
 
   Direction d = UP;
   do
     {
-      for (vsize i = cg[d].size (); i--; )
+      for (vsize i = clash_groups[d].size (); i--; )
        {
          /*
            Trigger positioning
           */
-         cg[d][i]->extent (me, X_AXIS);
+         clash_groups[d][i]->extent (me, X_AXIS);
        }
     }
   while (flip (&d) != UP);
 
-  SCM autos (automatic_shift (me, cg));
+  SCM autos (automatic_shift (me, clash_groups));
   SCM hand (forced_shift (me));
 
   Real wid = 0.0;
   do
     {
-      if (cg[d].size ())
+      if (clash_groups[d].size ())
        {
-         Grob *h = cg[d][0];
+         Grob *h = clash_groups[d][0];
          Grob *fh = Note_column::first_head (h);
          if (fh)
            wid = fh->extent (h, X_AXIS).length ();
@@ -579,4 +587,6 @@ ADD_INTERFACE (Note_collision_interface,
               /* properties */
               "merge-differently-dotted "
               "merge-differently-headed "
-              "positioning-done ");
+              "positioning-done "
+              "prefer-dotted-right "
+              );
index 4ec267019c4589c04b750a9d3f4fe4a0e5ac231e..089a1ada23d39b70e05849c7e741be3bcc374b53 100644 (file)
@@ -415,7 +415,7 @@ whether to put a page turn at this column.  Can be @code{force} or
 
 For slurs, this value selects which slur candidate
 to use; if extreme positions are requested, the closest one is taken.")
-
+     (prefer-dotted-right ,boolean? "For note collisions, prefer to shift dotted up-note to the right, rather than shifting just the dot.")
      (ratio ,number? "Parameter for slur shape.  The higher this
 number, the quicker the slur attains its @code{height-limit}.")
      (remove-empty ,boolean? "If set, remove group if it contains no
index 14f57fedd65e861d817cf24a2ca9edaa584f6f0d..d81c37d3c9c9d7fa2bc90f6d9cc68d3f79110967 100644 (file)
        (axes . (,X ,Y))
        (X-extent . ,ly:axis-group-interface::width)
        (Y-extent . ,ly:axis-group-interface::height)
+       (prefer-dotted-right . #t)
        (positioning-done . ,ly:note-collision-interface::calc-positioning-done)
        (meta . ((class . Item)
                 (interfaces . (note-collision-interface