X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fsystem-start-text.cc;h=c99f150fed06fa75d476799244a671d9823f4bc3;hb=e9724a76f3795833ab70a6fed852cf78eb344dcf;hp=a0a90b06c3fb0b52809cfeb3b6ab580380a351f7;hpb=2c8c61b3a5cddbb155786a1ca027528701c91ac9;p=lilypond.git diff --git a/lily/system-start-text.cc b/lily/system-start-text.cc index a0a90b06c3..c99f150fed 100644 --- a/lily/system-start-text.cc +++ b/lily/system-start-text.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 2006 Han-Wen Nienhuys + (c) 2006--2007 Han-Wen Nienhuys */ @@ -19,7 +19,7 @@ class System_start_text { public: static Stencil get_stencil (Grob *); - DECLARE_GROB_INTERFACE(); + DECLARE_GROB_INTERFACE (); DECLARE_SCHEME_CALLBACK (print, (SCM)); }; @@ -45,9 +45,25 @@ System_start_text::get_stencil (Grob *me_grob) 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 (); } @@ -101,4 +117,5 @@ ADD_INTERFACE (System_start_text, "text " "long-text " "self-alignment-Y " + "self-alignment-X " );