2 system-start-delimiter.cc -- implement System_start_delimiter
4 source file of the GNU LilyPond music typesetter
6 (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
11 #include "system-start-delimiter.hh"
12 #include "paper-def.hh"
13 #include "molecule.hh"
14 #include "axis-group-interface.hh"
16 #include "all-font-metrics.hh"
19 System_start_delimiter::staff_bracket (Real height) const
21 Paper_def* p= paper_l ();
22 Real arc_height = p->get_var("bracket_arch_height");
23 SCM at = gh_list (ly_symbol2scm ("bracket"),
24 gh_double2scm (p->get_var("bracket_arch_angle")),
25 gh_double2scm (p->get_var("bracket_arch_width")),
26 gh_double2scm (arc_height),
27 gh_double2scm (p->get_var("bracket_width")),
28 gh_double2scm (height),
29 gh_double2scm (p->get_var("bracket_arch_thick")),
30 gh_double2scm (p->get_var("bracket_thick")),
33 Real staff_space = p->get_var ("interline");
34 Real h = height + 2 * arc_height;
35 Box b (Interval (0, 1.5 * staff_space), Interval (-h/2, h/2));
37 mol.align_to (X_AXIS, CENTER);
41 System_start_delimiter::System_start_delimiter (SCM s)
44 set_extent_callback (0, Y_AXIS);
45 Pointer_group_interface (this).set_interface();
49 System_start_delimiter::simple_bar (Real h) const
51 Real w = paper_l ()->get_var ("barthick_score");
52 return lookup_l ()->filledbox (Box (Interval(0,w), Interval(-h/2, h/2)));
56 System_start_delimiter::after_line_breaking ()
58 SCM gl = get_elt_property ("glyph");
60 if (scm_ilength (get_elt_pointer ("elements")) <= 1 && gl == ly_symbol2scm ("bar-line"))
66 MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(System_start_delimiter);
68 System_start_delimiter::do_brew_molecule ()const
70 Interval ext = Axis_group_interface::group_extent_callback (this, Y_AXIS);
71 Real l = ext.length ();
74 SCM s = get_elt_property ("collapse-height");
75 if (gh_number_p (s) && l < gh_scm2double (s))
77 System_start_delimiter * me = (System_start_delimiter*)this;
83 s = get_elt_property ("glyph");
87 if (s == ly_symbol2scm ("bracket"))
88 m = staff_bracket (l);
89 else if ( s == ly_symbol2scm ("brace"))
91 else if (s == ly_symbol2scm ("bar-line"))
95 m.translate_axis (ext.center (), Y_AXIS);
103 System_start_delimiter::staff_brace (Real y) const
105 Real staffht = paper_l ()->get_var ("staffheight");
106 int staff_size = int (rint (staffht ));
110 int minht = 2 * staff_size;
111 int maxht = 7 * minht;
112 int idx = int (((maxht - step) <? y - minht) / step);
115 SCM l = scm_eval (gh_list (ly_symbol2scm ("style-to-cmr"),
116 ly_str02scm ("brace"),
119 String nm = "feta-braces";
121 nm = ly_scm2string (gh_cdr (l));
122 nm += to_str (staff_size);
123 SCM e =gh_list (ly_symbol2scm ("char"), gh_int2scm (idx), SCM_UNDEFINED);
126 at = fontify_atom (find_font (nm), at);
128 Box b (Interval (0,0), Interval (-y/2, y/2));
130 return Molecule(b, at);