]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/line-spanner.cc
Further corrections of Documentation/po/de.po
[lilypond.git] / lily / line-spanner.cc
index 3d5638343f9799c5595a1bbcd70226c4bd17b1c0..7d8cea10d6d702977057c59bccaf263285098bd3 100644 (file)
@@ -6,21 +6,21 @@
   (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
+#include "align-interface.hh"
 #include "axis-group-interface.hh"
-#include "spanner.hh"
-#include "output-def.hh"
-#include "item.hh"
-#include "staff-symbol-referencer.hh"
 #include "font-interface.hh"
-#include "warn.hh"
-#include "align-interface.hh"
+#include "grob-interface.hh"
+#include "item.hh"
+#include "lily-proto.hh"
 #include "line-interface.hh"
 #include "moment.hh"
+#include "output-def.hh"
+#include "pointer-group-interface.hh"
+#include "spanner.hh"
+#include "staff-symbol-referencer.hh"
 #include "system.hh"
-
-#include "lily-proto.hh"
-#include "grob-interface.hh"
 #include "text-interface.hh"
+#include "warn.hh"
 
 class Line_spanner
 {
@@ -88,8 +88,19 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir)
                                                     details, SCM_BOOL_F),
                        CENTER);
 
+      Item *bound_item = me->get_bound (dir);
+      Grob *bound_grob = bound_item;
+      if (to_boolean (ly_assoc_get (ly_symbol2scm ("end-on-note"), details, SCM_BOOL_F))
+         && bound_item->break_status_dir ())
+       {
+         extract_grob_set (me, "note-columns", columns);
+         if (columns.size ())
+           bound_grob = (dir == LEFT)
+             ? columns[0] : columns.back();
+       }
+      
       details = scm_acons (ly_symbol2scm ("X"),
-                          scm_from_double (me->get_bound (dir)->extent (commonx, X_AXIS)
+                          scm_from_double (bound_grob->extent (commonx, X_AXIS)
                                            .linear_combination (attach)),
                           details);
     }
@@ -233,8 +244,7 @@ Line_spanner::print (SCM smob)
   do
     {
       Offset z (robust_scm2double (ly_assoc_get (ly_symbol2scm ("X"),
-                                                bounds[d], SCM_BOOL_F), 0.0)
-               + commonx->relative_coordinate (commonx, X_AXIS),
+                                                bounds[d], SCM_BOOL_F), 0.0),
                robust_scm2double (ly_assoc_get (ly_symbol2scm ("Y"),
                                                 bounds[d], SCM_BOOL_F), 0.0));
       
@@ -276,13 +286,15 @@ Line_spanner::print (SCM smob)
   Stencil line;
   do
     {
+      span_points[d] += -d * gaps[d] *  dz.direction ();
+
       if (stencils[d])
        {
         Stencil s = stencils[d]->translated (span_points[d]);
         SCM align = ly_assoc_get (ly_symbol2scm ("stencil-align-dir-y"),
                                   bounds[d], SCM_BOOL_F);
         SCM off = ly_assoc_get (ly_symbol2scm ("stencil-offset"),
-                                  bounds[d], SCM_BOOL_F);
+                                bounds[d], SCM_BOOL_F);
 
         if (scm_is_number (align)) 
           s.align_to (Y_AXIS, scm_to_double (align));
@@ -303,20 +315,23 @@ Line_spanner::print (SCM smob)
       if (stencils[d])
        span_points[d] += dz_dir *
          (stencils[d]->extent (X_AXIS)[-d] / dz_dir[X_AXIS]);
-      
-      span_points[d] += -d * gaps[d] *  dz.direction ();
     }
   while (flip (&d) != LEFT);
 
-  line.add_stencil (Line_interface::line (me, 
-                                         span_points[LEFT],
-                                         span_points[RIGHT]));
+  Offset adjust = dz.direction() * Staff_symbol_referencer::staff_space (me);
 
-  line.add_stencil (Line_interface::arrows (me,
-                                           span_points[LEFT],
-                                           span_points[RIGHT],
-                                           arrows[LEFT],
-                                           arrows[RIGHT]));
+  Offset line_left = span_points[LEFT] + (arrows[LEFT] ? adjust*1.4 : Offset (0, 0));
+  Offset line_right = span_points[RIGHT] - (arrows[RIGHT] ? adjust*0.55 : Offset (0, 0));
+  if (line_right[X_AXIS] > line_left[X_AXIS])
+    {
+      line.add_stencil (Line_interface::line (me, line_left, line_right));
+      line.add_stencil (Line_interface::arrows (me,
+                                               span_points[LEFT],
+                                               span_points[RIGHT],
+                                               arrows[LEFT],
+                                               arrows[RIGHT]));
+    }
 
   line.translate (Offset (-me->relative_coordinate (commonx, X_AXIS),
                          -me->relative_coordinate (my_common_y, Y_AXIS)));
@@ -332,11 +347,12 @@ ADD_INTERFACE (Line_spanner,
               "@code{dotted-line} or @code{zigzag}.\n"
               "\n",
 
+              "bound-details " 
               "extra-dy "
               "gap "
-              "thickness "
-              "bound-details " 
-              "left-bound-info " 
+              "left-bound-info "
+              "note-columns "
               "right-bound-info " 
+              "thickness "
               );