source file of the GNU LilyPond music typesetter
- (c) 2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ (c) 2006--2009 Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
#include "font-interface.hh"
#include "spanner.hh"
#include "stencil.hh"
+#include "item.hh"
class System_start_text
{
public:
static Stencil get_stencil (Grob *);
- static bool has_interface (Grob *);
+ DECLARE_GROB_INTERFACE ();
DECLARE_SCHEME_CALLBACK (print, (SCM));
};
SCM align_y = me_grob->get_property ("self-alignment-Y");
if (scm_is_number (align_y))
p->align_to (Y_AXIS, robust_scm2double (align_y, 0.0));
- return *p;
+
+ /* Horizontal alignment according to the self-alignment-X property
+ * and indent value. */
+ Output_def *layout = me_grob->layout ();
+ Real indent;
+ if (me->get_break_index () == 0)
+ indent = robust_scm2double (layout->c_variable ("indent"), 0);
+ else
+ indent = robust_scm2double (layout->c_variable ("short-indent"), 0);
+ Real align_x = robust_scm2double (me->get_property ("self-alignment-X"), 0);
+ Interval p_extent_x = p->extent (X_AXIS);
+ Interval padding (0.0, max (0.0, indent - p_extent_x.length ()));
+ Real right_padding = padding.length () - padding.linear_combination (align_x);
+ Box box (Interval (p_extent_x[LEFT], p_extent_x[RIGHT] + right_padding),
+ p->extent (Y_AXIS));
+ Stencil *aligned_p = new Stencil (box, p->expr ());
+ return *aligned_p;
}
- return Stencil();
+ return Stencil ();
}
{
Spanner *me = unsmob_spanner (smob);
- extract_grob_set (me, "elements", elts);
+ if (!me->get_bound (LEFT)->break_status_dir ())
+ {
+ me->suicide ();
+ return SCM_EOL;
+ }
+
+ extract_grob_set (me, "elements", all_elts);
+ vector<Grob*> elts;
+ for (vsize i = 0; i < all_elts.size (); i++)
+ if (all_elts[i]->is_live ())
+ elts.push_back (all_elts[i]);
+
+ if (!elts.size ())
+ {
+ me->suicide ();
+ return SCM_EOL;
+ }
+
Grob *common = common_refpoint_of_array (elts, me, Y_AXIS);
Interval ext;
}
Stencil m = get_stencil (me);
- m.translate_axis (ext.center (), Y_AXIS);
+ if (!ext.is_empty ())
+ m.translate_axis (ext.center (), Y_AXIS);
return m.smobbed_copy ();
}
ADD_INTERFACE (System_start_text,
- "system-start-text-interface",
"Text in front of the system.",
/* properties */
"text "
"long-text "
"self-alignment-Y "
+ "self-alignment-X "
);