Move X-parent rewire to calc-positioning-done from calc-direction.
Now, we can run this if direction is manually set too.
--- /dev/null
+\header {
+
+ texidoc = "Scripts on chords with seconds remain centered on the extremal note head"
+ }
+
+
+\version "2.10.21"
+\layout { ragged-right = ##t }
+
+\relative c''{
+ <g a>-.
+ <g a>_.
+}
DECLARE_GROB_INTERFACE();
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
+ DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM));
DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM));
};
return Stencil ();
}
+MAKE_SCHEME_CALLBACK (Script_interface, calc_positioning_done, 1);
+SCM
+Script_interface::calc_positioning_done (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ if (Grob *par = me->get_parent (X_AXIS))
+ {
+ Grob *stem = Note_column::get_stem (par);
+ if (stem && Stem::first_head (stem))
+ me->set_parent (Stem::first_head (stem), X_AXIS);
+ }
+ return SCM_BOOL_T;
+}
+
MAKE_SCHEME_CALLBACK (Script_interface, calc_direction, 1);
SCM
Script_interface::calc_direction (SCM smob)
d = DOWN;
}
- if (Grob *par = me->get_parent (X_AXIS))
- {
- Grob *stem = Note_column::get_stem (par);
- if (stem && Stem::first_head (stem))
- me->set_parent (Stem::first_head (stem), X_AXIS);
- }
-
+ (void) me->get_property ("positioning-done");
return scm_from_int (d);
}
"An object that is put above or below a note",
"add-stem-support "
"avoid-slur "
+ "positioning-done "
"script-priority "
"script-stencil "
"slur "
(stencil . ,ly:text-interface::print)
(direction . ,ly:script-interface::calc-direction)
+ (positioning-done . ,ly:script-interface::calc-positioning-done)
(X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
(self-alignment-X . 0)
(script-priority . 100)
(stencil . ,ly:text-interface::print)
(direction . ,ly:script-interface::calc-direction)
+ (positioning-done . ,ly:script-interface::calc-positioning-done)
+
(text . ,fingering::calc-text)
(font-encoding . fetaNumber)
(font-size . -5) ; don't overlap when next to heads.
;; padding set in script definitions.
(staff-padding . 0.25)
- (X-offset . ,ly:self-alignment-interface::centered-on-x-parent)
+ (X-offset . ,script-interface::calc-x-offset)
(Y-offset . ,ly:side-position-interface::y-aligned-side)
(side-axis . ,Y)
(stencil . ,ly:script-interface::print)
(direction . ,ly:script-interface::calc-direction)
+ (positioning-done . ,ly:script-interface::calc-positioning-done)
(font-encoding . fetaMusic)
(cross-staff . ,ly:script-interface::calc-cross-staff)
(meta . ((class . Item)
(stencil . ,ly:text-interface::print)
(direction . ,ly:script-interface::calc-direction)
+ (positioning-done . ,ly:script-interface::calc-positioning-done)
(outside-staff-priority . 450)
(avoid-slur . around)
(grob-interpret-markup grob
(make-fret-diagram-verbose-markup
(string-frets->description string-frets string-count)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; scripts
+
+(define-public (script-interface::calc-x-offset grob)
+ (ly:grob-property grob 'positioning-done)
+ (ly:self-alignment-interface::centered-on-x-parent grob))