]> git.donarmstrong.com Git - lilypond.git/commitdiff
Clean up DynamicText horizontal alignment.
authorJanek Warchoł <lemniskata.bernoullego@gmail.com>
Fri, 29 Mar 2013 23:11:28 +0000 (00:11 +0100)
committerJanek Warchoł <lemniskata.bernoullego@gmail.com>
Sat, 5 Jul 2014 21:09:29 +0000 (23:09 +0200)
Until now, DynamicText alignment was messy, as there were 3 different
callbacks involved - some of them interacting in a confusing way:
 - in define-grobs.scm, X-offset property was initialized to
   ly:self-alignment-interface::x-aligned-on-self,
 - Dynamic_engraver called set_center_parent on every DynamicText
   attached to a note, so that half a NoteHead width was always added
   to its X-offset (producing confusing results for example when
   user requested dynamics to be left-aligned),
 - DynamicTexts living in a Dynamics context used a completely
   different offset callback, which aligned them on NoteColumns.

Since aligned_on_parent is now able to correctly align grobs
with PaperColumn parents (issue 3254), we can use it for all
DynamicTexts and have a single interface for the job.

Expected changes in output: DynamicTexts in Dynamics context
aligned to suspended noteheads may be placed up to 1/4 NoteHead
width further to the right.  This shouldn't be a problem.

lily/dynamic-engraver.cc
lily/include/self-alignment-interface.hh
lily/self-alignment-interface.cc
ly/engraver-init.ly
scm/define-grobs.scm

index d1b8cf00b52d931605eacb16c9a179d898d74597..a91d742ee80306de3221656808baea2d52ff3ed1 100644 (file)
@@ -268,10 +268,7 @@ Dynamic_engraver::acknowledge_note_column (Grob_info info)
                         ? heads[0]
                         : unsmob_grob (info.grob ()->get_object ("rest")));
       if (x_parent)
-        {
-          script_->set_parent (x_parent, X_AXIS);
-          Self_alignment_interface::set_center_parent (script_, X_AXIS);
-        }
+        script_->set_parent (x_parent, X_AXIS);
     }
 
   if (current_spanner_ && !current_spanner_->get_bound (LEFT))
index 823556a4c2f7ac30ec930927955423b958faf19d..dfec0670a4fcf6304ac50c464072c7785a83ac26 100644 (file)
@@ -38,7 +38,6 @@ struct Self_alignment_interface
 
   DECLARE_SCHEME_CALLBACK (pure_y_aligned_on_self, (SCM element, SCM start, SCM end));
 
-  DECLARE_SCHEME_CALLBACK (centered_on_note_columns, (SCM element));
   DECLARE_SCHEME_CALLBACK (centered_on_x_parent, (SCM element));
   DECLARE_SCHEME_CALLBACK (centered_on_y_parent, (SCM element));
   DECLARE_SCHEME_CALLBACK (aligned_on_x_parent, (SCM element));
index eb51dc7f1b4e981902ddaf35a0d68ed2516dbb4f..a23d7b99cc6a64495751dd4d43fbdb37a2be4a9f 100644 (file)
@@ -79,27 +79,6 @@ Self_alignment_interface::centered_on_x_parent (SCM smob)
   return centered_on_object (unsmob_grob (smob)->get_parent (X_AXIS), X_AXIS);
 }
 
-MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_note_columns, 1);
-SCM
-Self_alignment_interface::centered_on_note_columns (SCM smob)
-{
-  Item *it = unsmob_item (smob)->get_column ();
-  if (!it)
-    return scm_from_double (0.0);
-
-  extract_grob_set (it, "elements", elts);
-  vector<Grob *> ncs;
-  Interval centers;
-  for (vsize i = 0; i < elts.size (); i++)
-    if (Note_column::has_interface (elts[i]))
-      centers.add_point (scm_to_double (centered_on_object (elts[i], X_AXIS)));
-
-  if (centers.is_empty ())
-    return scm_from_double (0.0);
-
-  return scm_from_double (centers.center ());
-}
-
 MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_y_parent, 1);
 SCM
 Self_alignment_interface::centered_on_y_parent (SCM smob)
index ebfff6a2fcd2889c14b287db84a28d6bc7d2a10e..ec34cd64c33fa1187504bfc9ebd02f5a14ec4768 100644 (file)
@@ -420,13 +420,6 @@ a collection of staves, with a bracket in front and spanning bar lines."
   \override DynamicLineSpanner.outside-staff-priority = ##f
   \override DynamicText.outside-staff-priority = ##f
   \override Hairpin.outside-staff-priority = ##f
-  \override DynamicText.X-offset =
-  #(ly:make-simple-closure
-    `(,+
-      ,(ly:make-simple-closure
-         (list ly:self-alignment-interface::centered-on-note-columns))
-      ,(ly:make-simple-closure
-        (list ly:self-alignment-interface::x-aligned-on-self))))
 
   \description "Holds a single line of dynamics, which will be
 centered between the staves surrounding this context."
index aa3e605aeb60423810836df9cbdf49cf70badc37..9d894be3e358a5df1f66f41c3c813169a0c27369 100644 (file)
         (stencil . ,ly:text-interface::print)
         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
         (Y-extent . ,grob::always-Y-extent-from-stencil)
-        (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
+        (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
         (Y-offset . ,(scale-by-font-size -0.6)) ; center on an 'm'
         (meta . ((class . Item)
                  (interfaces . (dynamic-interface