X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fvolta-bracket.cc;h=1127f2776aed3f41ef2274272482199c0db16d77;hb=c5d52711febce78e3beff59d635cc7669aa1da2f;hp=813bc1162fd1a515ab3a55a0725e54a344426dbe;hpb=05fabaaf86fd44f9bd903f282bb98d343a991e40;p=lilypond.git diff --git a/lily/volta-bracket.cc b/lily/volta-bracket.cc index 813bc1162f..1127f2776a 100644 --- a/lily/volta-bracket.cc +++ b/lily/volta-bracket.cc @@ -3,18 +3,16 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2004 Jan Nieuwenhuizen + (c) 1997--2005 Jan Nieuwenhuizen */ -#include +#include -#include "box.hh" #include "warn.hh" #include "font-interface.hh" #include "line-interface.hh" -#include "molecule.hh" #include "paper-column.hh" -#include "paper-def.hh" +#include "output-def.hh" #include "text-item.hh" #include "volta-bracket.hh" #include "group-interface.hh" @@ -29,56 +27,49 @@ -- * Should look for system_start_delim to find left edge of staff. - -*/ + */ -MAKE_SCHEME_CALLBACK (Volta_bracket_interface,print,1); +MAKE_SCHEME_CALLBACK (Volta_bracket_interface, print, 1); SCM -Volta_bracket_interface::print (SCM smob) +Volta_bracket_interface::print (SCM smob) { Grob *me = unsmob_grob (smob); - Link_array bars - = Pointer_group_interface__extract_grobs (me, (Item*)0, "bars"); - - if (!bars.size ()) - return SCM_EOL; + Spanner *orig_span = dynamic_cast (me->original_); - Spanner *orig_span = dynamic_cast (me->original_); + bool broken_first_bracket = orig_span && (orig_span->broken_intos_[0] == (Spanner *)me); - bool broken_first_bracket = orig_span && (orig_span->broken_intos_[0] == (Spanner*)me); - - bool broken_last_bracket = orig_span && (orig_span->broken_intos_.top () == (Spanner*)me); + bool broken_last_bracket = orig_span && (orig_span->broken_intos_.top () == (Spanner *)me); bool no_vertical_start = orig_span && !broken_first_bracket; bool no_vertical_end = orig_span && !broken_last_bracket; - SCM s = me->get_grob_property ("bars"); - Grob * endbar = unsmob_grob (ly_car (s)); - SCM glyph = endbar->get_grob_property("glyph"); - + SCM s = me->get_property ("bars"); + Grob *endbar = scm_is_pair (s) ? unsmob_grob (scm_car (s)) : 0; + SCM glyph = endbar ? endbar->get_property ("glyph") : SCM_EOL; + String str; - if (gh_string_p (glyph)) - str = ly_scm2string(glyph); + if (scm_is_string (glyph)) + str = ly_scm2string (glyph); else - return SCM_EOL; - - const char* cs = str.to_str0 (); - no_vertical_end |= - (strcmp(cs,":|")!=0 && strcmp(cs,"|:")!=0 && strcmp(cs,"|.")!=0 - && strcmp(cs,":|:")!=0 && strcmp(cs,".|")!=0); - - Paper_def * paper =me->get_paper (); + str = "|"; + + const char *cs = str.to_str0 (); + no_vertical_end + |= (strcmp (cs, ":|")!= 0 && strcmp (cs, "|:")!= 0 && strcmp (cs, "|.")!= 0 + && strcmp (cs, ":|:")!= 0 && strcmp (cs, ".|")!= 0); + + Output_def *layout = me->get_layout (); Real half_space = 0.5; - Item * bound = dynamic_cast (me)->get_bound (LEFT); + Item *bound = dynamic_cast (me)->get_bound (LEFT); /* not a start, but really broken in two */ - Real left =0.; + Real left = 0.; if (bound->break_status_dir () == RIGHT) { Paper_column *pc = bound->get_column (); - left = pc->extent (pc, X_AXIS)[RIGHT] - bound->relative_coordinate (pc, X_AXIS); + left = pc->extent (pc, X_AXIS)[RIGHT] - bound->relative_coordinate (pc, X_AXIS); } else { @@ -88,26 +79,26 @@ Volta_bracket_interface::print (SCM smob) */ } - Real w = dynamic_cast (me)->spanner_length () - left - half_space; - Real h = robust_scm2double (me->get_grob_property ("height"), 1); + Real w = dynamic_cast (me)->spanner_length () - left - half_space; + Real h = robust_scm2double (me->get_property ("height"), 1); - Molecule start,end ; + Stencil start, end; if (!no_vertical_start) - start = Line_interface::line (me, Offset (0,0), Offset (0, h)); - + start = Line_interface::line (me, Offset (0, 0), Offset (0, h)); + if (!no_vertical_end) - end = Line_interface::line (me, Offset (w, 0), Offset (w,h)); + end = Line_interface::line (me, Offset (w, 0), Offset (w, h)); - Molecule mol = Line_interface::line (me, Offset (0, h), Offset (w,h)); - mol.add_molecule (start); - mol.add_molecule (end); + Stencil mol = Line_interface::line (me, Offset (0, h), Offset (w, h)); + mol.add_stencil (start); + mol.add_stencil (end); if (!orig_span || broken_first_bracket) { - SCM text = me->get_grob_property ("text"); + SCM text = me->get_property ("text"); SCM properties = me->get_property_alist_chain (SCM_EOL); - SCM snum = Text_item::interpret_markup (paper->self_scm (), properties, text); - Molecule num = *unsmob_molecule (snum); + SCM snum = Text_interface::interpret_markup (layout->self_scm (), properties, text); + Stencil num = *unsmob_stencil (snum); mol.add_at_edge (X_AXIS, LEFT, num, - num.extent (X_AXIS).length () - 1.0, 0); @@ -116,22 +107,21 @@ Volta_bracket_interface::print (SCM smob) return mol.smobbed_copy (); } - void -Volta_bracket_interface::add_bar (Grob *me, Item* b) +Volta_bracket_interface::add_bar (Grob *me, Item *b) { Pointer_group_interface::add_grob (me, ly_symbol2scm ("bars"), b); - Side_position_interface::add_support (me,b); - add_bound_item (dynamic_cast (me), b); + Side_position_interface::add_support (me, b); + add_bound_item (dynamic_cast (me), b); } void -Volta_bracket_interface::add_column (Grob*me, Grob* c) +Volta_bracket_interface::add_column (Grob *me, Grob *c) { - Side_position_interface::add_support (me,c); + Side_position_interface::add_support (me, c); } -ADD_INTERFACE (Volta_bracket_interface,"volta-bracket-interface", +ADD_INTERFACE (Volta_bracket_interface, "volta-bracket-interface", "Volta bracket with number", "bars thickness height");