Add anchors to some other break-aligned grobs by default.
--- /dev/null
+\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
--- /dev/null
+\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
\relative {
c1 \mark "foo"
+ c1
\key cis \major
\clef alto
\override Score.RehearsalMark #'break-align-symbol = #'key-signature
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);
+ 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;
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. ",
/* properties */
"break-align-anchor "
+ "break-align-anchor-alignment "
"break-align-symbol "
"space-alist "
);
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();
};
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
. (
(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 . (