]> git.donarmstrong.com Git - lilypond.git/commitdiff
Fix #434, #440
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 1 May 2008 21:15:48 +0000 (18:15 -0300)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 1 May 2008 21:15:48 +0000 (18:15 -0300)
In single tie case, use Tie::get_default_dir() to determine tie
directions.  This now peeks across line boundaries, so the direction
for the 2 broken halves is synced.

Add neutral-direction to Tie so the defaults can be adjusted.

input/regression/tie-direction-broken.ly [new file with mode: 0644]
lily/include/tie-details.hh
lily/tie-details.cc
lily/tie-formatting-problem.cc
lily/tie.cc
scm/define-grobs.scm

diff --git a/input/regression/tie-direction-broken.ly b/input/regression/tie-direction-broken.ly
new file mode 100644 (file)
index 0000000..895f87f
--- /dev/null
@@ -0,0 +1,21 @@
+
+\version "2.11.45"
+
+\header {
+
+  texidoc = "In the single tie case, broken ties peek across line
+  boundaries to determine which direction to take."
+
+}
+
+
+\paper {
+  ragged-right = ##t
+}
+
+\relative c'' {
+ bes1~ \break
+ bes2.
+ \stemUp bes4 ~ \break
+ bes1 
+}
index 18b9127d1e83937c31f6395d504275117892c2a9..24402e56c56fcddce176339fa46d42d392e63540 100644 (file)
@@ -43,6 +43,7 @@ struct Tie_details
 
   int single_tie_region_size_;
   int multi_tie_region_size_;
+  Direction neutral_direction_;
   
   Tie_details ();
   void from_grob (Grob *);
index 7c39b1c717cf20bbca5c7fbf8f7b7e10dc32623a..75a32d5bb78a1aabc584815851d73442ddc80595 100644 (file)
@@ -28,7 +28,10 @@ Tie_details::from_grob (Grob *me)
 {
   staff_symbol_referencer_ = me;
   staff_space_ = Staff_symbol_referencer::staff_space (me);
-
+  
+  neutral_direction_ = to_dir (me->get_property ("neutral-direction"));
+  if (!neutral_direction_)
+    neutral_direction_ = DOWN;
   
   SCM details = me->get_property ("details");
 
index bb50c4fbc18c1cfb9cee8be9fbb49e9c54b3b443..6aa5feb3b1b04e139db3829810472c3590e58581 100644 (file)
@@ -977,7 +977,8 @@ Tie_formatting_problem::set_ties_config_standard_directions (Ties_configuration
        tie_configs->at (0).dir_ = Direction (sign (tie_configs->at (0).position_));
 
       if (!tie_configs->at (0).dir_)
-       tie_configs->at (0).dir_ = DOWN;
+       tie_configs->at (0).dir_
+         = (tie_configs->size() > 1) ? DOWN : details_.neutral_direction_;
     }
   
   if (!tie_configs->back ().dir_)
index aa265f504236aee5c4465eeec693610a247f9add..980484d21bcdaed4b0345b1fdee3f5891f5a7ffa 100644 (file)
@@ -17,6 +17,7 @@
 #include "note-head.hh"
 #include "output-def.hh"
 #include "paper-column.hh"
+#include "pointer-group-interface.hh"
 #include "rhythmic-head.hh"
 #include "spanner.hh"
 #include "staff-symbol-referencer.hh"
@@ -113,7 +114,11 @@ Tie::get_default_dir (Grob *me)
   Direction d = LEFT;
   do
     {
-      Grob *stem = head (me, d) ? Rhythmic_head::get_stem (head (me, d)) : 0;
+      Grob *one_head = head (me, d);
+      if (!one_head && dynamic_cast<Spanner*> (me)) 
+       one_head = Tie::head (dynamic_cast<Spanner*> (me)->broken_neighbor (d), d);
+      
+      Grob *stem = one_head ? Rhythmic_head::get_stem (one_head) : 0;
       if (stem)
        stem = Stem::is_invisible (stem) ? 0 : stem;
 
@@ -135,7 +140,7 @@ Tie::get_default_dir (Grob *me)
   else if (int p = get_position (me))
     return Direction (sign (p));
   
-  return UP;
+  return to_dir (me->get_property("neutral-direction"));
 }
 
 
@@ -218,6 +223,14 @@ Tie::calc_control_points (SCM smob)
       //      && unsmob_grob_array (yparent->get_object ("ties"))->size () > 1
       )
     {
+      extract_grob_set (yparent, "ties", ties);
+      if (ties.size() == 1
+         && !to_dir (me->get_property_data ("direction")))
+       {
+         assert (ties[0] == me);
+         set_grob_direction (me, Tie::get_default_dir (me));
+       }
+      
       /* trigger positioning. */
       (void) yparent->get_property ("positioning-done");
     }
@@ -310,10 +323,11 @@ ADD_INTERFACE (Tie,
               "dash-period "
               "details "
               "direction "
-              "separation-item "
               "head-direction "
               "line-thickness "
+              "neutral-direction "
               "quant-score "
+              "separation-item "
               "staff-position "
               "thickness "
               );
index 652a1392437143ba68ba4fc2d07c696ad9de5673..bb56a7682726ca0ef6411013028f5ebd029c295a 100644 (file)
        (springs-and-rods . ,ly:spanner::set-spacing-rods)
        (avoid-slur . inside)
        (direction . ,ly:tie::calc-direction)
+       (neutral-direction . ,DOWN)
        (stencil . ,ly:tie::print)
        (font-size . -6)
        (details . (