]> git.donarmstrong.com Git - lilypond.git/commitdiff
Add regression tests for break-alignment anchor stuff.
authorJoe Neeman <joeneeman@gmail.com>
Wed, 25 Apr 2007 06:35:30 +0000 (16:35 +1000)
committerJoe Neeman <joeneeman@gmail.com>
Wed, 25 Apr 2007 06:35:30 +0000 (16:35 +1000)
Add anchors to some other break-aligned grobs by default.

input/regression/break-alignment-anchor-alignment.ly [new file with mode: 0644]
input/regression/break-alignment-anchors.ly [new file with mode: 0644]
input/regression/rehearsal-mark-align.ly
lily/break-alignment-interface.cc
lily/include/break-align-interface.hh
scm/define-grob-properties.scm
scm/define-grobs.scm

diff --git a/input/regression/break-alignment-anchor-alignment.ly b/input/regression/break-alignment-anchor-alignment.ly
new file mode 100644 (file)
index 0000000..b092554
--- /dev/null
@@ -0,0 +1,20 @@
+\version "2.11.22"
+
+\header {
+  texidoc = "The default callback for break-align-anchor in clefs and time/key
+signatures reads the break-align-anchor-aligment property to align
+the anchor to the extent of the break-aligned grob."
+}
+
+{
+  \override Score.RehearsalMark #'break-align-symbol = #'key-signature
+  c1
+  \key cis \major
+  \once \override Staff.KeySignature #'break-align-anchor-alignment = #LEFT
+  \mark \default
+  cis1
+  \key ces \major
+  \once \override Staff.KeySignature #'break-align-anchor-alignment = #RIGHT
+  \mark \default
+  ces1
+}
\ No newline at end of file
diff --git a/input/regression/break-alignment-anchors.ly b/input/regression/break-alignment-anchors.ly
new file mode 100644 (file)
index 0000000..ced785d
--- /dev/null
@@ -0,0 +1,19 @@
+\version "2.11.22"
+
+\header {
+  texidoc = "The break-align-anchor property of a break-aligned grob gives
+the horizontal offset at which other grobs should attach."
+}
+
+{
+  \override Score.RehearsalMark #'break-align-symbol = #'staff-bar
+  c'1
+  \once \override Staff.BarLine #'break-align-anchor = #-5
+  \mark \default
+  \noBreak
+  c'1
+  \once \override Staff.BarLine #'break-align-anchor = #5
+  \mark \default
+  \noBreak
+  c'1
+}
\ No newline at end of file
index 7b82049008fa96eaaf442b0654a66ef70334f524..5238a3889efccb88457f9306e3ec1fe341d80195 100644 (file)
@@ -11,6 +11,7 @@
   
 \relative {
   c1 \mark "foo"
+  c1
   \key cis \major
   \clef alto
   \override Score.RehearsalMark #'break-align-symbol = #'key-signature
index 7e866a551ffcc4bc7b6ad0892ea95bb7ca254f0b..1487252716cf1057b40b8c322a45baab5c7be524 100644 (file)
@@ -290,12 +290,6 @@ Break_alignable_interface::self_align_callback (SCM grob)
        break ;
     }  
 
-  Direction which_edge = LEFT;
-  if (vsize (last_idx_found + 1) < elements.size ())
-    last_idx_found ++;
-  else
-    which_edge = RIGHT;
-  
   Grob *alignment_parent = elements[last_idx_found];
   Grob *common = me->common_refpoint (alignment_parent, X_AXIS);
   Real anchor = robust_scm2double (alignment_parent->get_property ("break-align-anchor"), 0);
@@ -305,9 +299,9 @@ Break_alignable_interface::self_align_callback (SCM grob)
                          + anchor);
 }
 
-MAKE_SCHEME_CALLBACK (Break_aligned_interface, calc_anchor, 1)
+MAKE_SCHEME_CALLBACK (Break_aligned_interface, calc_average_anchor, 1)
 SCM
-Break_aligned_interface::calc_anchor (SCM grob)
+Break_aligned_interface::calc_average_anchor (SCM grob)
 {
   Grob *me = unsmob_grob (grob);
   Real avg = 0.0;
@@ -328,6 +322,16 @@ Break_aligned_interface::calc_anchor (SCM grob)
   return scm_from_double (count > 0 ? avg / count : 0);
 }
 
+MAKE_SCHEME_CALLBACK (Break_aligned_interface, calc_extent_aligned_anchor, 1)
+SCM
+Break_aligned_interface::calc_extent_aligned_anchor (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  Real alignment = robust_scm2double (me->get_property ("break-align-anchor-alignment"), 0.0);
+
+  return scm_from_double (me->extent (me, X_AXIS).linear_combination (alignment));
+}
+
 ADD_INTERFACE (Break_alignable_interface,
               "Object that is aligned on a break aligment. ",
 
@@ -363,6 +367,7 @@ ADD_INTERFACE (Break_aligned_interface,
 
               /* properties */ 
               "break-align-anchor "
+              "break-align-anchor-alignment "
               "break-align-symbol "
               "space-alist "
               );
index 211ad0da8b1dba98931d74abbd36627f5d2be7b3..f3633c2bad962b6637beeca6ed967f49dcfc202a 100644 (file)
@@ -25,7 +25,8 @@ public:
 
 struct Break_aligned_interface
 {
-  DECLARE_SCHEME_CALLBACK (calc_anchor, (SCM element));
+  DECLARE_SCHEME_CALLBACK (calc_average_anchor, (SCM));
+  DECLARE_SCHEME_CALLBACK (calc_extent_aligned_anchor, (SCM));
   DECLARE_GROB_INTERFACE();
 };
 
index 992b7f098dbe67476e37e9bbb659eb92db8dc68e..3bf185ac42b686ad0e4851dd0e39d15fd0de0a3f 100644 (file)
@@ -97,6 +97,9 @@ bracket.")
 grob will have their X-offsets shifted by this number. In barlines,
 for example, this is used to position grobs relative to the (visual)
 center of the barline.")
+     (break-align-anchor-alignment ,number? "Read by
+ly:break-aligned-interface::calc-extent-aligned-anchor for aligning
+an anchor to a grobs extent")
      (break-align-symbol ,symbol? "This key is used for aligning and
 spacing breakable items.")
      (break-align-orders ,vector? "Defines the order in which
index 8b32b4c6b956659a4ebf36f6de73b39253e73f38..3ab5b2c677efdb1de3f3816864ad35f170439962 100644 (file)
      . (
        (axes . (0))
        (X-extent . ,ly:axis-group-interface::width)
-       (break-align-anchor . ,ly:break-aligned-interface::calc-anchor)
+       (break-align-anchor . ,ly:break-aligned-interface::calc-average-anchor)
        (meta . ((class . Item)
                 (interfaces . (break-aligned-interface
                                axis-group-interface))))))
        (avoid-slur . inside)
        (font-family . music)
        (break-align-symbol . clef)
+       (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
        (break-visibility . ,begin-of-line-visible)
        (space-alist . ((ambitus . (extra-space . 2.0))
                        (staff-bar . (extra-space . 0.7))
                        (first-note . (fixed-space . 2.5))))
        (Y-offset . ,ly:staff-symbol-referencer::callback)
        (break-align-symbol . key-signature)
+       (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
        (break-visibility . ,begin-of-line-visible)
        (non-musical . #t)
        (meta . ((class . Item)
     (LeftEdge
      . (
        (break-align-symbol . left-edge)
+       (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
        (X-extent . (0 . 0))
        (non-musical . #t)
        (break-visibility . ,center-invisible)
      . (
        (stencil . ,ly:time-signature::print)
        (break-align-symbol . time-signature)
+       (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
        (break-visibility . ,all-visible)
        (avoid-slur . inside)
        (space-alist . (