]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' of ssh://jneem@git.sv.gnu.org/srv/git/lilypond
authorJoe Neeman <joeneeman@gmail.com>
Thu, 11 Dec 2008 20:45:33 +0000 (12:45 -0800)
committerJoe Neeman <joeneeman@gmail.com>
Thu, 11 Dec 2008 20:45:33 +0000 (12:45 -0800)
1  2 
lily/include/paper-column.hh
lily/paper-column.cc
lily/separation-item.cc
lily/spacing-spanner.cc

index 66d7ba16da1b85b12b4c8f4cd759bec2060bcb16,314f52ec8f578e3d44842774f3611bdb13139a3a..cc2e2b90f1f530fe7ae14e077077d1381380c145
@@@ -3,7 -3,7 +3,7 @@@
  
    source file of the GNU LilyPond music typesetter
  
-   (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
+   (c) 1997--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
  */
  
  #ifndef PAPER_COLUMN_HH
@@@ -48,7 -48,6 +48,7 @@@ public
    static Moment when_mom (Grob *);
    static bool is_used (Grob *);
    static bool is_breakable (Grob *);
 +  static bool is_extraneous_column_from_ligature (Grob *);
    static Real minimum_distance (Grob *l, Grob *r);
    static Interval break_align_width (Grob *me);
  };
diff --combined lily/paper-column.cc
index 7d4b92d990970d58111c100f0e0c750476eeca43,b30c7de32fec89688d4e0d5e2b0893bca07bc73c..c6b7c9c85c1aec0f9f5f9957937bd2b785f6b495
@@@ -3,7 -3,7 +3,7 @@@
  
    source file of the GNU LilyPond music typesetter
  
-   (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
+   (c) 1997--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
  */
  
  #include "paper-column.hh"
@@@ -18,7 -18,6 +18,7 @@@
  #include "output-def.hh"
  #include "paper-score.hh"
  #include "pointer-group-interface.hh"
 +#include "rhythmic-head.hh"
  #include "separation-item.hh"
  #include "skyline-pair.hh"
  #include "spaceable-grob.hh"
@@@ -314,33 -313,6 +314,33 @@@ Paper_column::before_line_breaking (SC
    return SCM_UNSPECIFIED;
  }
  
 +/* FIXME: This is a hack that we use to identify columns that used to
 +   contain note-heads but whose note-heads were moved by one of the ligature
 +   engravers. Once the ligature engravers are fixed to behave nicely, this
 +   function can be removed.
 +*/
 +bool
 +Paper_column::is_extraneous_column_from_ligature (Grob *me)
 +{
 +  if (!is_musical (me))
 +    return false;
 +
 +  // If all the note-heads that I think are my children actually belong
 +  // to another column, then I am extraneous.
 +  extract_grob_set (me, "elements", elts);
 +  bool has_notehead = false;
 +  for (vsize i = 0; i < elts.size (); i++)
 +    {
 +      if (Rhythmic_head::has_interface (elts[i]))
 +      {
 +        has_notehead = true;
 +        if (dynamic_cast<Item*> (elts[i])->get_column () == me)
 +          return false;
 +      }
 +    }
 +  return has_notehead;
 +}
 +
  
  ADD_INTERFACE (Paper_column,
               "@code{Paper_column} objects form the top-most X@tie{}parents"
diff --combined lily/separation-item.cc
index ec8c0db24faf6ea9ff6cfbddf39747722e2d9797,2483bac0d67a6bbbd07ffdbde5b3e10a78b308f0..4a9eec3ea6291915d455a046a39792fccf69d0b0
@@@ -3,7 -3,7 +3,7 @@@
  
    source file of the GNU LilyPond music typesetter
  
-   (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
+   (c) 1998--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
  */
  
  #include "separation-item.hh"
@@@ -146,7 -146,7 +146,7 @@@ Separation_item::boxes (Grob *me, Grob 
        y[UP] += extra_height[UP];
   
        if (!x.is_empty () && !y.is_empty ())
 -      out.push_back (Box (x, y));
 +      out.push_back (Box (x, y));
      }
  
    return out;      
diff --combined lily/spacing-spanner.cc
index 7b1756620f17884c207ba7a2b47d0415c3c61a06,4a6d0b05156dd602f7bcefde0261f539f00ad0aa..be0cd01a450883c1d3bb3dbe6e6a3226f8780c49
@@@ -3,7 -3,7 +3,7 @@@
  
    source file of the GNU LilyPond music typesetter
  
-   (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
+   (c) 1999--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
  */
  
  #include "spacing-spanner.hh"
@@@ -405,20 -405,8 +405,20 @@@ Spacing_spanner::musical_column_spacin
        Note that we don't actually pack things as tightly as possible:
        we don't allow the next column to begin before this one ends.
        */
 -      spring.set_distance (max (left_col->extent (left_col, X_AXIS)[RIGHT],
 -                              spring.min_distance ()));
 +      /* FIXME: the else clause below is the "right" thing to do,
 +       but we can't do it because of all the empty columns that the
 +       ligature-engravers leave lying around. In that case, the extent of
 +       the column is incorrect because it includes note-heads that aren't
 +       there. We get around this by only including the column extent if
 +       the left-hand column is "genuine". This is a dirty hack and it
 +       should be fixed in the ligature-engravers. --jneem
 +      */
 +      if (Paper_column::is_extraneous_column_from_ligature (left_col))
 +      spring.set_distance (spring.min_distance ());
 +      else
 +      spring.set_distance (max (left_col->extent (left_col, X_AXIS)[RIGHT],
 +                                spring.min_distance ()));
 +
        spring.set_inverse_stretch_strength (1.0);
      }