return Grob::stencil_height (smob);
}
+/* If this gets called before line breaking, we will return a non-trivial
+ width even if we belong to a tie and won't actually get printed. */
+MAKE_SCHEME_CALLBACK (Accidental_interface, width, 1);
+SCM
+Accidental_interface::width (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ Stencil *s = unsmob_stencil (get_stencil (me));
+
+ if (s)
+ return ly_interval2scm (s->extent (X_AXIS));
+ return ly_interval2scm (Interval ());
+}
+
MAKE_SCHEME_CALLBACK (Accidental_interface, pure_height, 3);
SCM
Accidental_interface::pure_height (SCM smob, SCM start_scm, SCM)
me->suicide ();
return SCM_EOL;
}
-
+
+ return get_stencil (me);
+}
+
+SCM
+Accidental_interface::get_stencil (Grob *me)
+{
Font_metric *fm = Font_interface::get_default_font (me);
SCM alist = me->get_property ("glyph-name-alist");
"elements "
"keep-fixed-while-stretching "
"max-stretch "
+ "no-alignment "
"pure-Y-common "
"pure-relevant-items "
"pure-relevant-spanners "
{
public:
DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_SCHEME_CALLBACK (calc_stencils, (SCM));
DECLARE_SCHEME_CALLBACK (height, (SCM));
+ DECLARE_SCHEME_CALLBACK (width, (SCM));
DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
DECLARE_GROB_INTERFACE();
static string get_fontcharname (string style, int alteration);
- static vector<Box> accurate_boxes (Grob *me,
- Grob **common);
+ static vector<Box> accurate_boxes (Grob *me, Grob **common);
+ static SCM get_stencil (Grob *me);
};
#endif
return sz > 0 && Axis_group_interface::has_interface (i.grob ())
&& !i.grob ()->get_parent (Y_AXIS)
+ && !to_boolean (i.grob ()->get_property ("no-alignment"))
&& Axis_group_interface::has_axis (i.grob (), Y_AXIS);
}
volta_bracket_->set_property ("text", start_string_);
if (!volta_spanner_)
- {
- volta_spanner_ = make_spanner ("VoltaBracketSpanner", SCM_EOL);
- /* ensure that we don't get spanned up by VerticalAlignment.
- ugh. this could cause problems if we get moved to Staff context */
- Axis_group_interface::add_element (unsmob_grob (get_property ("rootSystem")),
- volta_spanner_);
- }
+ volta_spanner_ = make_spanner ("VoltaBracketSpanner", SCM_EOL);
Axis_group_interface::add_element (volta_spanner_, volta_bracket_);
}
ADD_ACKNOWLEDGER (Volta_engraver, bar_line);
ADD_TRANSLATOR (Volta_engraver,
/* doc */ "Make volta brackets.",
- /* create */ "VoltaBracket",
+ /* create */ "VoltaBracket VoltaBracketSpanner",
/* read */ "repeatCommands voltaSpannerDuration stavesFound",
/* write */ "");
to flip the direction of custos stem.")
(next ,ly:grob? "Object that is next relation (e.g., the lyric
syllable following an extender.")
+ (no-alignment ,boolean? "If set, don't place this grob in a
+VerticalAlignment; rather, place it using its own Y-offset callback")
(no-ledgers ,boolean? "If set, don't draw ledger lines on this
object.")
(no-stem-extend ,boolean? "If set, notes with ledger lines do not
(alteration . ,accidental-interface::calc-alteration)
(stencil . ,ly:accidental-interface::print)
(Y-extent . ,ly:accidental-interface::height)
+ (X-extent . ,ly:accidental-interface::width)
(meta . ((class . Item)
(interfaces . (accidental-interface
font-interface))))))
(outside-staff-priority . 100)
(Y-extent . ,ly:axis-group-interface::height)
(X-extent . ,ly:axis-group-interface::width)
+ (no-alignment . ,#t)
(meta . ((class . Spanner)
(interfaces . (side-position-interface
axis-group-interface)))