]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/script-column.cc (row_before_line_breaking): also handle
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 16 Oct 2006 22:23:38 +0000 (22:23 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 16 Oct 2006 22:23:38 +0000 (22:23 +0000)
accidentals and arpeggios in horizontal script stacking.

* lily/script-row-engraver.cc (acknowledge_accidental_placement):
new function.

* input/regression/script-stack-horizontal.ly: trim.

ChangeLog
input/regression/script-stack-horizontal.ly
lily/script-column.cc
lily/script-row-engraver.cc
ly/engraver-init.ly
scm/define-grobs.scm

index e8d001f3d9d55121515a5de2561ffbfca37ffe6f..b8cb6fd6bcdb1612dae0b73dd78f97e37a9f8c89 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2006-10-17  Han-Wen Nienhuys  <hanwen@lilypond.org>
+
+       * lily/script-column.cc (row_before_line_breaking): also handle
+       accidentals and arpeggios in horizontal script stacking.
+
+       * lily/script-row-engraver.cc (acknowledge_accidental_placement):
+       new function.
+
+       * input/regression/script-stack-horizontal.ly: trim.
+
 2006-10-16  Han-Wen Nienhuys  <hanwen@lilypond.org>
 
        * scm/output-lib.scm (stroke-finger::calc-text): allow reading of
index e9cba0687a0728d68d345f9e1226b575fbbfb4e6..7e69ea60da2e3bd7c1f3ac83cf7e4659b99e05d2 100644 (file)
@@ -1,3 +1,4 @@
+
 \header
 {
   texidoc = "horizontal scripts are ordered, so they do not overlap.
@@ -12,14 +13,9 @@ The order may be set with script-priority."
 
 \relative 
 {
-  \set stringFingerOrientations = #'(left) 
+  \set stringNumberOrientations = #'(left) 
   \set fingeringOrientations = #'(left) 
-  \set strokeNumberOrientations = #'(left) 
+  \set strokeFingerOrientations = #'(left) 
   <cis-1\4
-   -\rightHandFinger #1
-   es-2\5
-   -\rightHandFinger #2
-   gis-3\6
-   -\rightHandFinger #3
-   >\arpeggio
+   -\rightHandFinger #1 f>\arpeggio
 }
index 0710cd483ac83cfbc350e2e6c5f3d3567e0f5a0c..a50f794961dce2c3a5ae98400c646fafe4bd890c 100644 (file)
@@ -8,6 +8,8 @@
 
 #include "script-column.hh"
 
+#include "accidental-placement.hh"
+#include "arpeggio.hh"
 #include "directional-element-interface.hh"
 #include "side-position-interface.hh"
 #include "warn.hh"
@@ -49,6 +51,7 @@ Script_column::row_before_line_breaking (SCM smob)
   extract_grob_set (me, "scripts", scripts);
 
   Grob_scripts_map head_scripts_map;
+  vector<Grob *> affect_all_grobs;
   for (vsize i = 0; i < scripts.size (); i++)
     {
       Grob *sc = scripts[i];
@@ -56,8 +59,13 @@ Script_column::row_before_line_breaking (SCM smob)
       /*
        Don't want to consider scripts horizontally next to notes.
       */
-      if (sc->get_property_data (ly_symbol2scm ("Y-offset")) !=
-         Side_position_interface::x_aligned_side_proc)
+      if (Accidental_placement::has_interface (sc)
+         || Arpeggio::has_interface (sc))
+       {
+         affect_all_grobs.push_back (sc);
+       }
+      else if (sc->get_property_data (ly_symbol2scm ("Y-offset")) !=
+              Side_position_interface::x_aligned_side_proc)
        {
          head_scripts_map[sc->get_parent (Y_AXIS)].push_back (sc);
        }
@@ -67,7 +75,11 @@ Script_column::row_before_line_breaking (SCM smob)
        i != head_scripts_map.end ();
        i++)
     {
-      order_grobs ((*i).second);
+      vector<Grob*> grobs  = (*i).second;
+
+      // this isn't right in all cases, but in general a safe assumption.
+      concat (grobs, affect_all_grobs);
+      order_grobs (grobs);
     }
 
   return SCM_UNSPECIFIED;
@@ -85,7 +97,6 @@ Script_column::before_line_breaking (SCM smob)
   for (vsize i = 0; i < scripts.size (); i++)
     {
       Grob *sc = scripts[i];
-
       /*
        Don't want to consider scripts horizontally next to notes.
       */
@@ -93,10 +104,9 @@ Script_column::before_line_breaking (SCM smob)
          Side_position_interface::x_aligned_side_proc)
        staff_sided.push_back (sc);
     }
-
+  
   order_grobs (staff_sided);
   return SCM_UNSPECIFIED;
-
 }
 
 void
index 3f81f54380639ed551d9bd744cfbb8b6d534630e..da062742707de29b1da65fb1e8ec2ff27025a309 100644 (file)
@@ -7,8 +7,9 @@
   
 */
 
-
 #include "engraver.hh"
+
+#include "accidental-placement.hh"
 #include "script-column.hh"
 #include "side-position-interface.hh"
 
@@ -27,6 +28,7 @@ class Script_row_engraver : public Engraver
 public:
   TRANSLATOR_DECLARATIONS (Script_row_engraver);
 protected:
+  DECLARE_ACKNOWLEDGER (accidental_placement);
   DECLARE_ACKNOWLEDGER (side_position);
   void process_acknowledged ();
   void stop_translation_timestep ();
@@ -43,7 +45,8 @@ Script_row_engraver::stop_translation_timestep ()
   if (script_row_)
     {
       for (vsize i = 0; i < scripts_.size (); i++)
-       if (Side_position_interface::get_axis (scripts_[i]) == X_AXIS)
+       if (Accidental_placement::has_interface (scripts_[i])
+           || Side_position_interface::get_axis (scripts_[i]) == X_AXIS)
          Script_column::add_side_positioned (script_row_, scripts_[i]);
     }
 
@@ -62,6 +65,14 @@ Script_row_engraver::acknowledge_side_position (Grob_info inf)
     }
 }
 
+
+void
+Script_row_engraver::acknowledge_accidental_placement (Grob_info inf)
+{
+  scripts_.push_back (inf.grob ());
+}
+
+
 void
 Script_row_engraver::process_acknowledged ()
 {
@@ -70,6 +81,7 @@ Script_row_engraver::process_acknowledged ()
 }
 
 
+ADD_ACKNOWLEDGER (Script_row_engraver, accidental_placement);
 ADD_ACKNOWLEDGER (Script_row_engraver, side_position);
 ADD_TRANSLATOR (Script_row_engraver,
                /* doc */ "Determine order in horizontal side position elements. ",
index e46bf7f89c03d85bd2ad6f7fd4bf119c439d1618..c2a5b112217ee591d54ce58cb70357435293b1df 100644 (file)
@@ -40,6 +40,7 @@
   \consists "Axis_group_engraver"
   \consists "Figured_bass_engraver"
   \consists "Figured_bass_position_engraver"
+  \consists "Script_row_engraver"
 
   \override VerticalAxisGroup #'minimum-Y-extent = #'(-4 . 4)
   extraVerticalExtent = ##f
@@ -219,7 +220,6 @@ contained staves are not connected vertically."
 
   \consists "Script_engraver"
   \consists "Script_column_engraver"
-  \consists "Script_row_engraver"
   \consists "Rhythmic_column_engraver"
   \consists "Phrasing_slur_engraver"
   \consists "Cluster_spanner_engraver"
index 69b68fec68de2135af013ed791044efad5fc09fd..14eb7e17966fc49d7258675023798c4374dee963 100644 (file)
      . (
        (left-padding . 0.2)
 
+       ;; for horizontally stacked scripts.
+       (script-priority .  -100)
+       (direction .  ,LEFT)
+       
        (positioning-done . ,ly:accidental-placement::calc-positioning-done)
        (X-extent . ,ly:axis-group-interface::width)                  
        
@@ -63,6 +67,7 @@
        (right-padding . 0.15)
        (meta . ((class . Item)
                 (interfaces . (accidental-placement-interface))))))
+    
     (Ambitus
      . (
        (axes . (0 1))
        (X-offset . ,ly:side-position-interface::x-aligned-side)
        (direction . ,LEFT)
        (padding . 0.5)
+       (script-priority . 0)
        (side-axis . ,X)
        (staff-position . 0.0)
        (meta . ((class . Item)
        (duration-log . ,note-head::calc-duration-log)
        (default-direction . ,ly:stem::calc-default-direction)
        (stem-end-position . ,ly:stem::calc-stem-end-position)
+
        (neutral-direction . ,DOWN)
        (stem-info . ,ly:stem::calc-stem-info)
        (positioning-done . ,ly:stem::calc-positioning-done)
      . (
        (stencil . ,ly:text-interface::print)
        (text . ,stroke-finger::calc-text)
-       (digit-names . #("P" "I" "m" "a" "x"))
+       (digit-names . #("p" "i" "m" "a" "x"))
        (padding . 0.5)
        (staff-padding . 0.5)
        (self-alignment-X . 0)