X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fsystem-start-delimiter.cc;h=4977fa0ddce6ca27dc5ced3a3aefe75a04d1e5f4;hb=9458fa215af0294e9c38d62cc3a237a85fe50509;hp=1c68e112d4524fb116781a427a7322914217d317;hpb=a280a2653ee2b2eedaeed90865116ee5cdbc8590;p=lilypond.git diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc index 1c68e112d4..4977fa0ddc 100644 --- a/lily/system-start-delimiter.cc +++ b/lily/system-start-delimiter.cc @@ -3,33 +3,33 @@ source file of the GNU LilyPond music typesetter - (c) 2000--2003 Han-Wen Nienhuys + (c) 2000--2004 Han-Wen Nienhuys */ #include #include "axis-group-interface.hh" #include "system-start-delimiter.hh" -#include "paper-def.hh" -#include "molecule.hh" +#include "output-def.hh" +#include "stencil.hh" #include "font-interface.hh" #include "all-font-metrics.hh" #include "grob.hh" #include "staff-symbol-referencer.hh" #include "lookup.hh" -Molecule +Stencil System_start_delimiter::staff_bracket (Grob*me,Real height) { - Real arc_height = gh_scm2double (me->get_grob_property ("arch-height")) ; + Real arc_height = ly_scm2double (me->get_property ("arch-height")) ; SCM at = scm_list_n (ly_symbol2scm ("bracket"), - me->get_grob_property ("arch-angle"), - me->get_grob_property ("arch-width"), - gh_double2scm (arc_height), - gh_double2scm (height), - me->get_grob_property ("arch-thick"), - me->get_grob_property ("thickness"), + me->get_property ("arch-angle"), + me->get_property ("arch-width"), + scm_make_real (arc_height), + scm_make_real (height), + me->get_property ("arch-thick"), + me->get_property ("thickness"), SCM_UNDEFINED); /* @@ -52,19 +52,20 @@ Will not fix it since I'm not sure. Real h = height + 2 * arc_height; Box b (Interval (0, 1.5), Interval (-h/2, h/2)); - Molecule mol (b, at); + Stencil mol (b, at); mol.align_to (X_AXIS, CENTER); return mol; } -Molecule +Stencil System_start_delimiter::simple_bar (Grob*me,Real h) { - Real w = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness")) * - gh_scm2double (me->get_grob_property ("thickness")); - return Lookup::filledbox (Box (Interval (0,w), Interval (-h/2, h/2))); + Real lt =me->get_paper ()->get_dimension (ly_symbol2scm ("linethickness")) ; + Real w = lt * robust_scm2double (me->get_property ("thickness"), 1); + return Lookup::round_filled_box (Box (Interval (0,w), Interval (-h/2, h/2)), + lt); } MAKE_SCHEME_CALLBACK (System_start_delimiter,after_line_breaking,1); @@ -73,21 +74,21 @@ SCM System_start_delimiter::after_line_breaking (SCM smob) { Grob * me = unsmob_grob (smob); - SCM gl = me->get_grob_property ("glyph"); - if (gh_equal_p (gl,scm_makfrom0str ("bar-line"))) + SCM gl = me->get_property ("glyph"); + if (ly_c_equal_p (gl,scm_makfrom0str ("bar-line"))) { int count = 0; /* Get all coordinates, to trigger Hara kiri. */ - SCM elts = me->get_grob_property ("elements"); + SCM elts = me->get_property ("elements"); Grob *common = common_refpoint_of_list (elts, me, Y_AXIS); - for (SCM s = elts; gh_pair_p (s); s = gh_cdr (s)) + for (SCM s = elts; ly_c_pair_p (s); s = ly_cdr (s)) { - Interval v = unsmob_grob (gh_car (s))->extent (common, Y_AXIS); + Interval v = unsmob_grob (ly_car (s))->extent (common, Y_AXIS); - if (!v.empty_b ()) + if (!v.is_empty ()) count ++; } @@ -101,31 +102,30 @@ System_start_delimiter::after_line_breaking (SCM smob) } -MAKE_SCHEME_CALLBACK (System_start_delimiter,brew_molecule,1); +MAKE_SCHEME_CALLBACK (System_start_delimiter,print,1); SCM -System_start_delimiter::brew_molecule (SCM smob) +System_start_delimiter::print (SCM smob) { Grob * me = unsmob_grob (smob); - SCM s = me->get_grob_property ("glyph"); - if (!gh_string_p (s)) + SCM s = me->get_property ("glyph"); + if (!ly_c_string_p (s)) return SCM_EOL; SCM gsym = scm_string_to_symbol (s) ; - SCM c = me->get_grob_property ("collapse-height"); Real staff_space = Staff_symbol_referencer::staff_space (me); Interval ext = ly_scm2interval (Axis_group_interface::group_extent_callback - (me->self_scm (), gh_int2scm (Y_AXIS))); + (me->self_scm (), scm_int2num (Y_AXIS))); Real l = ext.length () / staff_space; - if (ext.empty_b () - || (gh_number_p (c) && l <= gh_scm2double (c))) + if (ext.is_empty () + || (robust_scm2double (me->get_property ("collapse-height"), 0.0) >= l)) { me->suicide (); return SCM_EOL; } - Molecule m; + Stencil m; if (gsym== ly_symbol2scm ("bracket")) m = staff_bracket (me,l); @@ -138,7 +138,7 @@ System_start_delimiter::brew_molecule (SCM smob) return m.smobbed_copy (); } -Molecule +Stencil System_start_delimiter::staff_brace (Grob*me, Real y) { Font_metric *fm = 0; @@ -147,11 +147,9 @@ System_start_delimiter::staff_brace (Grob*me, Real y) name. This is better than using find_font directly, esp. because that triggers mktextfm for non-existent fonts. */ - SCM br = ly_symbol2scm ("braces"); - SCM fam = gh_cons (ly_symbol2scm ("font-family"), br); - SCM sz = gh_cons (ly_symbol2scm ("font-relative-size"), ly_symbol2scm ("*")); + SCM fam = scm_cons (ly_symbol2scm ("font-encoding"), ly_symbol2scm ("fetaBraces")); - SCM alist = scm_list_n (fam, sz, SCM_UNDEFINED); + SCM alist = scm_list_n (fam, SCM_UNDEFINED); fm = select_font (me->get_paper (), scm_list_n (alist, SCM_UNDEFINED)); @@ -165,23 +163,27 @@ System_start_delimiter::staff_brace (Grob*me, Real y) { int cmp = (lo + hi) / 2; b = fm->get_indexed_char (cmp); - if (b[Y_AXIS].empty_b () || b[Y_AXIS].length () > y) + if (b[Y_AXIS].is_empty () || b[Y_AXIS].length () > y) hi = cmp; else lo = cmp; } while (hi - lo > 1); - - Molecule m (fm->get_indexed_char_molecule (lo)); // ugh. ascii? - b=m.extent_box(); - b[X_AXIS] = Interval (0,0); - return Molecule (b, m.get_expr()); + /* FIXME: ascii? */ + Stencil stil (fm->get_indexed_char_stencil (lo)); + b = stil.extent_box (); + b[X_AXIS] = Interval (0, 0); + + return Stencil (b, stil.expr ()); } ADD_INTERFACE (System_start_delimiter,"system-start-delimiter-interface", - "#'style can be bar-line, bracket or brace", - "collapse-height thickness arch-height arch-angle arch-thick arch-width bracket-thick glyph"); + "The brace, bracket or bar in front of the system. " + "It is implemented as a spanner." + , + "collapse-height thickness " + "arch-height arch-angle arch-thick arch-width bracket-thick glyph");