]> git.donarmstrong.com Git - lilypond.git/commitdiff
better fix for 366
authorJoe Neeman <joeneeman@gmail.com>
Fri, 6 Jul 2007 00:19:28 +0000 (10:19 +1000)
committerJoe Neeman <joeneeman@gmail.com>
Fri, 6 Jul 2007 00:19:28 +0000 (10:19 +1000)
make the VoltaBracketSpanner stuff a bit less hacky

lily/accidental.cc
lily/axis-group-interface.cc
lily/include/accidental-interface.hh
lily/vertical-align-engraver.cc
lily/volta-engraver.cc
scm/define-grob-properties.scm
scm/define-grobs.scm

index 3e5d0475f7afa671f23187b9616e8f81ef70df0a..c22e7af3ced3eba4bb2f348adf9812888d75ec49 100644 (file)
@@ -41,6 +41,20 @@ Accidental_interface::height (SCM smob)
   return Grob::stencil_height (smob);
 }
 
+/* If this gets called before line breaking, we will return a non-trivial
+   width even if we belong to a tie and won't actually get printed. */
+MAKE_SCHEME_CALLBACK (Accidental_interface, width, 1);
+SCM
+Accidental_interface::width (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  Stencil *s = unsmob_stencil (get_stencil (me));
+
+  if (s)
+    return ly_interval2scm (s->extent (X_AXIS));
+  return ly_interval2scm (Interval ());
+}
+
 MAKE_SCHEME_CALLBACK (Accidental_interface, pure_height, 3);
 SCM
 Accidental_interface::pure_height (SCM smob, SCM start_scm, SCM)
@@ -148,7 +162,13 @@ Accidental_interface::print (SCM smob)
       me->suicide ();
       return SCM_EOL;
     }
-  
+
+  return get_stencil (me);
+}
+
+SCM
+Accidental_interface::get_stencil (Grob *me)
+{
   Font_metric *fm = Font_interface::get_default_font (me);
 
   SCM alist = me->get_property ("glyph-name-alist");
index b9641d41c3ec735ebacdb447b5bcbc5beab3fc7c..bd00b283073a0e9e09ca531887a1f870272cb0b5 100644 (file)
@@ -620,6 +620,7 @@ ADD_INTERFACE (Axis_group_interface,
               "elements "
               "keep-fixed-while-stretching "
               "max-stretch "
+              "no-alignment "
               "pure-Y-common "
               "pure-relevant-items "
               "pure-relevant-spanners "
index a90680537f9a9eefeca52e8fdee1cc60a93a1c6e..93951236cfb361f8e15962ebb7bfe0ea3c2df1f0 100644 (file)
@@ -19,14 +19,14 @@ class Accidental_interface
 {
 public:
   DECLARE_SCHEME_CALLBACK (print, (SCM));
-  DECLARE_SCHEME_CALLBACK (calc_stencils, (SCM));
   DECLARE_SCHEME_CALLBACK (height, (SCM));
+  DECLARE_SCHEME_CALLBACK (width, (SCM));
   DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
   
   DECLARE_GROB_INTERFACE();
   static string get_fontcharname (string style, int alteration);
-  static vector<Box> accurate_boxes (Grob *me,
-                                                         Grob **common);
+  static vector<Box> accurate_boxes (Grob *me, Grob **common);
+  static SCM get_stencil (Grob *me);
 };
 
 #endif
index fe214ac48dee3fc7e0635c973bf95199a7360730..f3cc50d6cfc759ff7c1d313a56e542c8228d4b22 100644 (file)
@@ -92,6 +92,7 @@ Vertical_align_engraver::qualifies (Grob_info i) const
 
   return sz > 0 && Axis_group_interface::has_interface (i.grob ())
     && !i.grob ()->get_parent (Y_AXIS)
+    && !to_boolean (i.grob ()->get_property ("no-alignment"))
     && Axis_group_interface::has_axis (i.grob (), Y_AXIS);
 }
 
index dad57ca7f47584d34b7c5ee1780202d3ffa506be..279eb5eb64e8fcda6ff56754f1966bc47b0ad873 100644 (file)
@@ -130,13 +130,7 @@ Volta_engraver::process_music ()
       volta_bracket_->set_property ("text", start_string_);
 
       if (!volta_spanner_)
-       {
-         volta_spanner_ = make_spanner ("VoltaBracketSpanner", SCM_EOL);
-         /* ensure that we don't get spanned up by VerticalAlignment.
-            ugh. this could cause problems if we get moved to Staff context */
-         Axis_group_interface::add_element (unsmob_grob (get_property ("rootSystem")),
-                                            volta_spanner_);
-       }
+       volta_spanner_ = make_spanner ("VoltaBracketSpanner", SCM_EOL);
 
       Axis_group_interface::add_element (volta_spanner_, volta_bracket_);
     }
@@ -188,6 +182,6 @@ Volta_engraver::stop_translation_timestep ()
 ADD_ACKNOWLEDGER (Volta_engraver, bar_line);
 ADD_TRANSLATOR (Volta_engraver,
                /* doc */ "Make volta brackets.",
-               /* create */ "VoltaBracket",
+               /* create */ "VoltaBracket VoltaBracketSpanner",
                /* read */ "repeatCommands voltaSpannerDuration stavesFound",
                /* write */ "");
index e8ea8998ad0a727a605c892f611e00cbee9c07a7..3a6a583f807378f2f8e835833653eb632074a188 100644 (file)
@@ -360,6 +360,8 @@ center of the staff.")
 to flip the direction of custos stem.")
      (next ,ly:grob? "Object that is next relation (e.g., the lyric
 syllable following an extender.")
+     (no-alignment ,boolean? "If set, don't place this grob in a
+VerticalAlignment; rather, place it using its own Y-offset callback")
      (no-ledgers ,boolean? "If set, don't draw ledger lines on this
 object.")
      (no-stem-extend ,boolean? "If set, notes with ledger lines do not
index 0a9b30766faae505695d0e40e6c61d452a1af8b4..daacad59d393f8d3a5dd2b461904dba0be30783b 100644 (file)
@@ -24,6 +24,7 @@
        (alteration . ,accidental-interface::calc-alteration) 
        (stencil . ,ly:accidental-interface::print)
        (Y-extent . ,ly:accidental-interface::height)
+       (X-extent . ,ly:accidental-interface::width)
        (meta . ((class . Item)
                 (interfaces . (accidental-interface
                                font-interface))))))
        (outside-staff-priority . 100)
        (Y-extent . ,ly:axis-group-interface::height)
        (X-extent . ,ly:axis-group-interface::width)
+       (no-alignment . ,#t)
        (meta . ((class . Spanner)
                 (interfaces . (side-position-interface
                                axis-group-interface)))