From: Janek WarchoĊ‚ Date: Thu, 17 Oct 2013 10:49:19 +0000 (+0200) Subject: Improve formatting of PaperColumn debug info X-Git-Tag: release/2.17.95-1~4^2~21 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;ds=sidebyside;h=286dbb0272d7efb611619fa64004ab104338e7d8;p=lilypond.git Improve formatting of PaperColumn debug info Paper_column::print can be very helpful in debugging spacing information, but until now its output was not very readable. This patch: - decreases font-size of debugging info so that it doesn't collide and overlap everywhere, - makes it possible to override the size of the arrow values with font-size property, - makes both red and blue arrows point in the same direction (previous situation was confusing) - centers the spring and rod values on the arrows (previously it was hard to discern which number goes to which arrow), - prints debugging info always on top, - makes arrows and the distance between them scale with fontsize. --- diff --git a/lily/paper-column.cc b/lily/paper-column.cc index cdf3d595ca..d586058fa0 100644 --- a/lily/paper-column.cc +++ b/lily/paper-column.cc @@ -219,7 +219,17 @@ Paper_column::break_align_width (Grob *me, SCM align_sym) } /* - Print a vertical line and the rank number, to aid debugging. + Print a: + - vertical line, + - the rank number, + - rank moment, + - blue arrow representing ideal distance, + - red arrow representing minimum distance + to aid debugging. To turn this on, simply add + \override Score.PaperColumn #'stencil = #ly:paper-column::print + \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print + to your score. + Also, as of 2013-10-16 there's a switch in Frescobaldi that turns this on. */ MAKE_SCHEME_CALLBACK (Paper_column, print, 1); SCM @@ -234,7 +244,6 @@ Paper_column::print (SCM p) Font_metric *musfont = Font_interface::get_default_font (me); SCM properties = Font_interface::text_font_alist_chain (me); - SCM scm_mol = Text_interface::interpret_markup (me->layout ()->self_scm (), properties, ly_string2scm (r)); @@ -242,18 +251,22 @@ Paper_column::print (SCM p) properties, ly_string2scm (when)); Stencil t = *unsmob_stencil (scm_mol); + t.scale (1.2, 1.4); t.add_at_edge (Y_AXIS, DOWN, *unsmob_stencil (when_mol), 0.1); - t.align_to (X_AXIS, CENTER); + t.align_to (X_AXIS, LEFT); + // compensate for font serifs and half letter-distance + t.translate (Offset (-0.1, 0)); t.align_to (Y_AXIS, DOWN); - Stencil l = Lookup::filled_box (Box (Interval (-0.01, 0.01), - Interval (-2, -1))); + Stencil l = Lookup::filled_box (Box (Interval (0, 0.02), + Interval (-8, -1))); - SCM small_letters = scm_cons (scm_acons (ly_symbol2scm ("font-size"), - scm_from_int (-6), SCM_EOL), - properties); + Real small_pad = 0.15; + Real big_pad = 0.35; + // number of printed arrows from *both* loops int j = 0; + for (SCM s = me->get_object ("ideal-distances"); scm_is_pair (s); s = scm_cdr (s)) { @@ -263,7 +276,28 @@ Paper_column::print (SCM p) continue; j++; - Real y = -j * 1 - 3; + + Stencil arrowhead (musfont->find_by_name ("arrowheads.open.01")); + // initial scaling; it will also scale with font-size. + arrowhead.scale (1, 1.66); + Real head_len = arrowhead.extent (X_AXIS).length (); + + SCM stil = Text_interface::interpret_markup (me->layout ()->self_scm (), + properties, + ly_string2scm (String_convert::form_string ("%5.2lf", sp->distance ()))); + Stencil *number_stc = unsmob_stencil (stil); + number_stc->scale (1, 1.1); + Real num_height = number_stc->extent (Y_AXIS).length (); + Real num_len = number_stc->extent (X_AXIS).length (); + number_stc->align_to (Y_AXIS, DOWN); + + // arrow's y-coord relative to the top of l stencil: + Real y = -2.5; + y -= j * (num_height + small_pad + big_pad); + // horizontally center number on the arrow, excluding arrowhead. + Offset num_off = Offset ((sp->distance () - num_len - head_len) / 2, + y + small_pad); + vector pts; pts.push_back (Offset (0, y)); @@ -271,15 +305,10 @@ Paper_column::print (SCM p) pts.push_back (p2); Stencil id_stencil = Lookup::points_to_line_stencil (0.1, pts); - Stencil head (musfont->find_by_name ("arrowheads.open.01")); - - SCM distance_stc = Text_interface::interpret_markup (me->layout ()->self_scm (), - small_letters, - ly_string2scm (String_convert::form_string ("%5.2lf", sp->distance ()))); - - id_stencil.add_stencil (unsmob_stencil (distance_stc)->translated (Offset (sp->distance () / 3, y + 1))); - id_stencil.add_stencil (head.translated (p2)); - id_stencil = id_stencil.in_color (0, 0, 1); + id_stencil.add_stencil (arrowhead.translated (p2)); + id_stencil.add_stencil (number_stc->translated (num_off)); + // use a lighter shade of blue so it will remain legible on black background. + id_stencil = id_stencil.in_color (0.2, 0.4, 1); l.add_stencil (id_stencil); } @@ -293,7 +322,27 @@ Paper_column::print (SCM p) j++; - Real y = -j * 1.0 - 3.5; + Stencil arrowhead (musfont->find_by_name ("arrowheads.open.01")); + // initial scaling; it will also scale with font-size. + arrowhead.scale (1, 1.66); + Real head_len = arrowhead.extent (X_AXIS).length (); + + SCM stil = Text_interface::interpret_markup (me->layout ()->self_scm (), + properties, + ly_string2scm (String_convert::form_string ("%5.2lf", dist))); + Stencil *number_stc = unsmob_stencil (stil); + number_stc->scale (1, 1.1); + Real num_height = number_stc->extent (Y_AXIS).length (); + Real num_len = number_stc->extent (X_AXIS).length (); + number_stc->align_to (Y_AXIS, UP); + + // arrow's y-coord relative to the top of l stencil: + Real y = -3; + y -= j * (num_height + small_pad + big_pad); + // horizontally center number on the arrow, excluding arrowhead. + Offset num_off = Offset ((dist - num_len - head_len) / 2, + y - small_pad); + vector pts; pts.push_back (Offset (0, y)); @@ -301,18 +350,10 @@ Paper_column::print (SCM p) pts.push_back (p2); Stencil id_stencil = Lookup::points_to_line_stencil (0.1, pts); - Stencil head (musfont->find_by_name ("arrowheads.open.0M1")); - head.translate_axis (y, Y_AXIS); - id_stencil.add_stencil (head); - - SCM distance_stc = Text_interface::interpret_markup (me->layout ()->self_scm (), - small_letters, - ly_string2scm (String_convert::form_string ("%5.2lf", - dist))); - - id_stencil.add_stencil (unsmob_stencil (distance_stc)->translated (Offset (dist / 3, y - 1))); - - id_stencil = id_stencil.in_color (1, 0, 0); + id_stencil.add_stencil (arrowhead.translated (p2)); + id_stencil.add_stencil (number_stc->translated (num_off)); + // use a lighter shade of red so it will remain legible on black background. + id_stencil = id_stencil.in_color (1, 0.25, 0.25); l.add_stencil (id_stencil); } t.add_stencil (l); diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 08aa3b9bfe..b415cee9d6 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -1563,18 +1563,18 @@ (axes . (,X)) (before-line-breaking . ,ly:paper-column::before-line-breaking) (bound-alignment-interfaces . (break-alignment-interface)) + ;; used by Paper_column::print when debugging columns: + (font-size . -7.5) (full-measure-extra-space . 1.0) (horizontal-skylines . ,ly:separation-item::calc-skylines) ;; (stencil . ,ly:paper-column::print) (keep-inside-line . #t) + ;; used by Paper_column::print when debugging columns: + (layer . 1000) (line-break-permission . allow) (non-musical . #t) (page-break-permission . allow) - - ;; debugging stuff: print column number. - ;; (font-size . -6) (font-name . "sans") (Y-extent . #f) - (X-extent . ,ly:axis-group-interface::width) (meta . ((class . Paper_column) (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) @@ -1688,16 +1688,17 @@ (axes . (,X)) (before-line-breaking . ,ly:paper-column::before-line-breaking) (bound-alignment-interfaces . (note-column-interface)) + ;; used by Paper_column::print when debugging columns: + (font-size . -7.5) (horizontal-skylines . ,ly:separation-item::calc-skylines) (keep-inside-line . #t) + ;; used by Paper_column::print when debugging columns: + (layer . 1000) ;; 0.08 comes from spacing-horizontal-skyline.ly ;; allows double flat of F to be nestled over dots of C (skyline-vertical-padding . 0.08) ;; (stencil . ,ly:paper-column::print) (X-extent . ,ly:axis-group-interface::width) - - ;; debugging - ;; (font-size . -6) (font-name . "sans") (Y-extent . #f) (meta . ((class . Paper_column) (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common) (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))