+2006-02-19 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * lily/enclosing-bracket.cc (width): new function.
+
+ * lily/align-interface.cc (align_elements_to_extents): reinstate
+ warning.
+
2006-02-18 Heikki Junes <hjunes@cc.hut.fi>
* Documentation/index.html.in: fix spelling: thankyous.
#include "pointer-group-interface.hh"
#include "hara-kiri-group-spanner.hh"
#include "grob-array.hh"
+#include "international.hh"
/*
TODO: for vertical spacing, should also include a rod & spring
{
Grob *me = unsmob_grob (smob);
SCM axis = scm_car (me->get_property ("axes"));
- Axis ax = (Axis)scm_to_int (axis);
+ Axis ax = Axis (scm_to_int (axis));
SCM force = me->get_property ("forced-distance");
if (scm_is_number (force))
SCM line_break_details = SCM_EOL;
if (a == Y_AXIS && me_spanner)
- line_break_details = me_spanner->get_bound (LEFT)->get_property ("line-break-system-details");
+ {
+ line_break_details = me_spanner->get_bound (LEFT)->get_property ("line-break-system-details");
+
+ if (!me->get_system ())
+ me->warning (_ ("vertical alignment called before line-breaking.\n"
+ "Only do cross-staff spanners with PianoStaff."));
+
+ }
Direction stacking_dir = robust_scm2dir (me->get_property ("stacking-dir"),
DOWN);
public:
DECLARE_SCHEME_CALLBACK(print, (SCM));
+ DECLARE_SCHEME_CALLBACK(width, (SCM));
};
ADD_INTERFACE(Enclosing_bracket,
"enclosing-bracket-interface",
+
"Brackets alongside bass figures.",
/* props */
"bracket-flare "
- "shorten-pair "
"edge-height "
+ "elements "
"padding "
+ "shorten-pair "
"thickness "
- "elements "
);
/* ugh: should make bracket interface. */
+MAKE_SCHEME_CALLBACK (Enclosing_bracket, width, 1);
+SCM
+Enclosing_bracket::width (SCM grob)
+{
+ /*
+ UGH. cut & paste code.
+ */
+ Grob *me = unsmob_grob (grob);
+ extract_grob_set (me, "elements", elements);
+ if (elements.empty ())
+ {
+ me->suicide ();
+ return SCM_EOL;
+ }
+
+ Grob *common_x = common_refpoint_of_array (elements, me, X_AXIS);
+ Interval xext = Axis_group_interface::relative_group_extent (elements, common_x, X_AXIS);
+
+ Stencil left_br = Horizontal_bracket::make_bracket (me, 10.0, Y_AXIS, LEFT);
+ Stencil right_br = Horizontal_bracket::make_bracket (me, 10.0, Y_AXIS, LEFT);
+
+
+ xext.widen (robust_scm2double (me->get_property ("padding"), 0.25));
+ left_br.translate_axis (xext[LEFT], X_AXIS);
+ right_br.translate_axis (xext[RIGHT], X_AXIS);
+
+ left_br.add_stencil (right_br);
+ left_br.translate_axis (-me->relative_coordinate (common_x, X_AXIS), X_AXIS);
+
+ return ly_interval2scm (left_br.extent (X_AXIS));
+}
+
MAKE_SCHEME_CALLBACK (Enclosing_bracket, print, 1);
SCM
Enclosing_bracket::print (SCM grob)
"A horizontal bracket encompassing notes.",
/* props */
- "columns "
"bracket-flare "
+ "columns "
+ "edge-height "
"shorten-pair "
- "edge-height");
+ );
font-interface))))))
(BassFigureBracket
. (
- ;
(stencil . ,ly:enclosing-bracket::print)
-
+ (X-extent . ,ly:enclosing-bracket::width)
(edge-height . (0.2 . 0.2))
(meta . ((class . Item)
(interfaces . (enclosing-bracket-interface)) ))
))
(BassFigureContinuation
. (
-
(stencil . ,ly:figured-bass-continuation::print)
-
(Y-offset . ,ly:figured-bass-continuation::center-on-figures)
(meta . ((class . Spanner)
(interfaces . (figured-bass-continuation-interface))
(BassFigureLine
. (
(axes . (,Y))
-
(Y-extent . ,ly:axis-group-interface::height)
-
(meta . ((class . Spanner)
(interfaces . (axis-group-interface
))))))
. (
(axes . (,Y))
(threshold . (2 . 1000))
-
(positioning-done . ,ly:align-interface::calc-positioning-done)
(Y-extent . ,ly:axis-group-interface::height)
-
(stacking-dir . -1)
(meta . ((class . Spanner)
(interfaces . (align-interface