Reviewers: lemzwerg, carl.d.sorensen_gmail.com,
Message:
Hm, I think you’re right. I’m not sure how interface work but maybe this
is a case for the line-spanner-interface?
I just managed to do the same thing for VoltaBrackets but that did need
some code duplication so maybe there should be a new function in some
interface for that alignment … I’ll have a look at this in the next few
days.
Description:
add property label-alignments to OttavaBracket
Please review this at https://codereview.appspot.com/575330043/
Affected files (+23, -2 lines):
M lily/ottava-bracket.cc
M scm/define-grob-properties.scm
M scm/define-grobs.scm
Index: lily/ottava-bracket.cc
diff --git a/lily/ottava-bracket.cc b/lily/ottava-bracket.cc
index
f133071336947a118f7cc583d83c122330995b8b..c73149f3a7b34ae49a50942c0af6e1e0908e8fdf
100644
--- a/lily/ottava-bracket.cc
+++ b/lily/ottava-bracket.cc
@@ -176,9 +176,24 @@ Ottava_bracket::print (SCM smob)
b.translate_axis (bracket_span_points[LEFT], X_AXIS);
text.translate_axis (span_points[LEFT], X_AXIS);
- text.align_to (Y_AXIS, CENTER);
- b.add_stencil (text);
+ SCM la = SCM_EOL;
+ SCM label_alignments = me->get_property ("label-alignments");
+ if (scm_is_pair (label_alignments))
+ {
+ if (get_grob_direction (me) == DOWN)
+ la = SCM_CAR (label_alignments);
+ else
+ la = SCM_CDR (label_alignments);
+ }
+ if (!scm_is_number (la))
+ {
+ me->warning ("label-alignments should be a pair of numbers");
+ la = 0;
+ }
+ text.align_to (Y_AXIS, scm_to_double (la));
+
+ b.add_stencil (text);
b.translate_axis (- me->relative_coordinate (common, X_AXIS), X_AXIS);
return b.smobbed_copy ();
@@ -191,6 +206,7 @@ ADD_INTERFACE (Ottava_bracket,
"bracket-flare "
"dashed-edge "
"edge-height "
+ "label-alignments "
"minimum-length "
"shorten-pair "
);
Index: scm/define-grob-properties.scm
diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm
index
ce88925313194e622f00429419aa7f6da2572a88..19516a9963f9bf4acbe77efa71c49a82af3fdb00
100644
--- a/scm/define-grob-properties.scm
+++ b/scm/define-grob-properties.scm
@@ -570,6 +570,10 @@ will be positioned next to a kneed beam.")
;;;
;;; l
;;;
+ (label-alignments ,number-pair? "The vertical alignments of
OttavaBracket
+labels below and above the staff. The value @w{@code{-1}} means
bottom-aligned,
+@code{0}@tie{}centered, and @code{1}@tie{}top-aligned. Other numerical
values
+may also be specified - the unit is half the label height.")
(labels ,list? "List of labels (symbols) placed on a column.")
(layer ,integer? "An integer which determines the order of printing
objects. Objects with the lowest value of layer are drawn first, then
Index: scm/define-grobs.scm
diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm
index
b86e5a60505072b49eb313cc72689ed7aa378c6f..de539e8e713d230667f98e81ccf9d8dd3febe36d
100644
--- a/scm/define-grobs.scm
+++ b/scm/define-grobs.scm
@@ -1732,6 +1732,7 @@
(edge-height . (0 . 0.8))
(font-series . bold)
(font-shape . italic)
+ (label-alignments . (-0.5 . 0.5))
(minimum-length . 0.3)
(outside-staff-priority . 400)
(padding . 0.5)