]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/tuplet-bracket.cc
2003 -> 2004
[lilypond.git] / lily / tuplet-bracket.cc
index be1e7aeed99b73ae429e624d157b02898ec3adcb..221d323a6cc2cb97b740a7a1f31f627cc134ba85 100644 (file)
@@ -1,9 +1,10 @@
 /*
-  plet-spanner.cc -- implement Tuplet_bracket
+  tuplet-bracket.cc -- implement Tuplet_bracket
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--2003 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2004 Jan Nieuwenhuizen <janneke@gnu.org>
+  Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 /*
@@ -196,7 +197,9 @@ Tuplet_bracket::brew_molecule (SCM smob)
   
   if (bracket_visibility)      
     {
-      SCM gap = me->get_grob_property ("gap");
+      Real ss =   Staff_symbol_referencer::staff_space (me);
+      Real gap = robust_scm2double (me->get_grob_property ("gap"), 1.0)
+       * ss;
       
       SCM fl = me->get_grob_property ("bracket-flare");
       SCM eh = me->get_grob_property ("edge-height");
@@ -207,20 +210,18 @@ Tuplet_bracket::brew_molecule (SCM smob)
       do {
        flare[d] =  height[d] = shorten[d] = 0.0;
        if (is_number_pair (fl))
-         flare[d] +=  gh_scm2double (index_get_cell (fl, d));
+         flare[d] +=  ss * gh_scm2double (index_get_cell (fl, d));
        if (is_number_pair (eh))
-         height[d] += gh_scm2double (index_get_cell (eh, d)) * - dir;
+         height[d] +=  - dir * ss *gh_scm2double (index_get_cell (eh, d));
        if (is_number_pair (sp))
-         shorten[d] +=  gh_scm2double (index_get_cell (sp, d));
+         shorten[d] +=  ss *gh_scm2double (index_get_cell (sp, d));
       }
       while (flip (&d) != LEFT);
       
       Molecule brack = make_bracket (me, Y_AXIS,
                                     Offset (w, ry - ly), 
-                                    height,
-                                    gh_scm2double (gap),
-                                    flare,
-                                    shorten);
+                                    height, gap,
+                                    flare, shorten);
       mol.add_molecule (brack);
     }
   
@@ -257,7 +258,16 @@ Tuplet_bracket::make_bracket (Grob *me,    // for line properties.
   Direction d = LEFT;
   do {
     straight_corners[d] += - d * shorten[d] /length * dz;
-    gap_corners[d] = (dz * 0.5) + d * gap / length * dz;
+  } while (flip (&d) != LEFT);
+
+  /*
+    UGH: the shortening factor is magic.
+   */
+  gap = gap <?
+    (0.66 * (straight_corners[RIGHT] - straight_corners[LEFT]).length ());
+  
+  do {
+    gap_corners[d] = (dz * 0.5) + d * 0.5 * gap / length * dz;
   } while (flip (&d) != LEFT);
 
   Drul_array<Offset> flare_corners = straight_corners;
@@ -295,7 +305,6 @@ Tuplet_bracket::calc_position_and_height (Grob*me,Real *offset, Real * dy)
   Grob * commonx = common_refpoint_of_list (cols, me, X_AXIS);  
 
   Interval staff;
-
   if (Grob * st = Staff_symbol_referencer::get_staff_symbol (me))
     staff = st->extent (commony, Y_AXIS);