From: Jan Nieuwenhuizen Date: Sun, 24 Mar 2002 21:07:04 +0000 (+0100) Subject: partial: 1.5.47.jcn X-Git-Tag: release/1.5.47~1 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=f6f0c7e718f866de8084e1221cc3e027c831fe35;p=lilypond.git partial: 1.5.47.jcn --- diff --git a/lily/include/tuplet-bracket.hh b/lily/include/tuplet-bracket.hh new file mode 100644 index 0000000000..b50780aba6 --- /dev/null +++ b/lily/include/tuplet-bracket.hh @@ -0,0 +1,38 @@ + +/* + tuplet-bracket.hh -- part of GNU LilyPond + + (c) 1997--2002 Jan Nieuwenhuizen +*/ + +#ifndef Tuplet_bracket_HH +#define Tuplet_bracket_HH + +#include "lily-guile.hh" + +/* + + TODO: quantise, we don't want to collide with staff lines. + (or should we be above staff?) + + todo: handle breaking elegantly. +*/ +class Tuplet_bracket +{ +public: + DECLARE_SCHEME_CALLBACK (brew_molecule, (SCM )); + static bool has_interface (Grob*); + + static void add_column (Grob*me,Item*); + static void add_beam (Grob*me,Grob*); + + static void calc_dy (Grob*,Real *) ; + static void calc_position_and_height (Grob*,Real*,Real *dy); + + DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM )); + + static Direction get_default_dir (Grob*); +}; + +#endif // Tuplet_bracket_HH + diff --git a/lily/include/tuplet-spanner.hh b/lily/include/tuplet-spanner.hh index 661bd3aaa4..65296f8106 100644 --- a/lily/include/tuplet-spanner.hh +++ b/lily/include/tuplet-spanner.hh @@ -1,38 +1,2 @@ -/* - plet-spanner.hh -- part of GNU LilyPond - - (c) 1997--2002 Jan Nieuwenhuizen -*/ - -#ifndef Tuplet_bracket_HH -#define Tuplet_bracket_HH - -#include "lily-guile.hh" - -/* - - TODO: quantise, we don't want to collide with staff lines. - (or should we be above staff?) - - todo: handle breaking elegantly. -*/ -class Tuplet_bracket -{ -public: - DECLARE_SCHEME_CALLBACK (brew_molecule, (SCM )); - static void set_interface (Grob*); - static bool has_interface (Grob*); - - static void add_column (Grob*me,Item*); - static void add_beam (Grob*me,Grob*); - - static void calc_dy (Grob*,Real *) ; - static void calc_position_and_height (Grob*,Real*,Real *dy); - - DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM )); - - static Direction get_default_dir (Grob*); -}; - -#endif // Tuplet_bracket_HH +#error diff --git a/lily/include/volta-bracket.hh b/lily/include/volta-bracket.hh new file mode 100644 index 0000000000..fda29658e8 --- /dev/null +++ b/lily/include/volta-bracket.hh @@ -0,0 +1,26 @@ + +/* + volta-spanner.hh -- part of GNU LilyPond + + (c) 1997--2002 Jan Nieuwenhuizen +*/ + +#ifndef VOLTA_SPANNER_HH +#define VOLTA_SPANNER_HH + + +#include "spanner.hh" + +class Volta_bracket_interface +{ +public: + static void set_interface (Grob*); + static bool has_interface (Grob*); + + DECLARE_SCHEME_CALLBACK (brew_molecule, (SCM )); + static void add_column (Grob*, Grob*col); + static void add_bar (Grob*me, Item*bar); +}; + +#endif // VOLTA_SPANNER_HH + diff --git a/lily/include/volta-spanner.hh b/lily/include/volta-spanner.hh deleted file mode 100644 index 874a62f258..0000000000 --- a/lily/include/volta-spanner.hh +++ /dev/null @@ -1,27 +0,0 @@ -/* - volta-spanner.hh -- part of GNU LilyPond - - (c) 1997--2002 Jan Nieuwenhuizen -*/ - -#ifndef VOLTA_SPANNER_HH -#define VOLTA_SPANNER_HH - - -#include "spanner.hh" - -/** -*/ - -class Volta_spanner -{ -public: - static void set_interface (Grob*); - static bool has_interface (Grob*); - DECLARE_SCHEME_CALLBACK (brew_molecule, (SCM )); - static void add_column (Grob*, Grob*col); - static void add_bar (Grob*me, Item*bar); -}; - -#endif // VOLTA_SPANNER_HH - diff --git a/lily/volta-bracket.cc b/lily/volta-bracket.cc new file mode 100644 index 0000000000..1705fbf24b --- /dev/null +++ b/lily/volta-bracket.cc @@ -0,0 +1,130 @@ +/* + volta-bracket.cc -- implement Volta_bracket_interface + + source file of the GNU LilyPond music typesetter + + (c) 1997--2002 Jan Nieuwenhuizen +*/ + +#include + +#include "box.hh" +#include "debug.hh" +#include "font-interface.hh" +#include "molecule.hh" +#include "paper-column.hh" +#include "paper-def.hh" +#include "text-item.hh" +#include "volta-bracket.hh" +#include "group-interface.hh" +#include "side-position-interface.hh" +#include "directional-element-interface.hh" + + +/* + this is too complicated. Yet another version of side-positioning, + badly implemented. + + -- + + * Should look for system_start_delim to find left edge of staff. + +*/ + +MAKE_SCHEME_CALLBACK (Volta_bracket_interface,brew_molecule,1); +SCM +Volta_bracket_interface::brew_molecule (SCM smob) +{ + Grob *me = unsmob_grob (smob); + Link_array bar_arr + = Pointer_group_interface__extract_grobs (me, (Item*)0, "bars"); + + if (!bar_arr.size ()) + return SCM_EOL; + + Spanner *orig_span = dynamic_cast (me->original_l_); + + bool first_bracket = orig_span && (orig_span->broken_into_l_arr_[0] == (Spanner*)me); + + bool last_bracket = orig_span && (orig_span->broken_into_l_arr_.top () == (Spanner*)me); + + bool no_vertical_start = orig_span && !first_bracket; + bool no_vertical_end = orig_span && !last_bracket; + SCM bars = me->get_grob_property ("bars"); + Grob * endbar = unsmob_grob (ly_car (bars)); + SCM glyph = endbar->get_grob_property("glyph"); + String str = ly_scm2string(glyph); + const char* cs = str.ch_C(); + no_vertical_end |= + (strcmp(cs,":|")!=0 && strcmp(cs,"|:")!=0 && strcmp(cs,"|.")!=0 + && strcmp(cs,":|:")!=0 && strcmp(cs,".|")!=0); + + Real staff_thick = me->paper_l ()->get_var ("stafflinethickness"); + Real half_space = 0.5; + + Item * bound = dynamic_cast (me)->get_bound (LEFT); + + /* + not a start, but really broken in two + */ + Real left =0.; + if (bound->break_status_dir () == RIGHT) + { + Paper_column *pc = bound->column_l (); + left = pc->extent (pc, X_AXIS)[RIGHT] - bound->relative_coordinate (pc, X_AXIS); + } + else + { + /* + the volta spanner is attached to the bar-line, which is moved + to the right. We don't need to compensate for the left edge. + */ + } + + Real w = dynamic_cast (me)->spanner_length () - left - half_space; + Real h = gh_scm2double (me->get_grob_property ("height")); + Real t = staff_thick * gh_scm2double (me->get_grob_property ("thickness")); + + /* + ugh: should build from line segments. + */ + SCM at = (scm_list_n (ly_symbol2scm ("volta"), + gh_double2scm (h), + gh_double2scm (w), + gh_double2scm (t), + gh_int2scm (no_vertical_start), + gh_int2scm (no_vertical_end), + SCM_UNDEFINED)); + + Box b (Interval (0, w), Interval (0, h)); + Molecule mol (b, at); + SCM text = me->get_grob_property ("text"); + SCM properties = scm_list_n (me->mutable_property_alist_, + me->immutable_property_alist_,SCM_UNDEFINED); + Molecule num = Text_item::text2molecule (me, text, properties); + + mol.add_at_edge (X_AXIS, LEFT, num, - num.extent (X_AXIS).length () + - 1.0); + mol.translate_axis (left, X_AXIS); + return mol.smobbed_copy (); +} + + +void +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); +} + +void +Volta_bracket_interface::add_column (Grob*me, Grob* c) +{ + Side_position_interface::add_support (me,c); +} + +ADD_INTERFACE (Volta_bracket_interface,"volta-bracket-interface", + "Volta bracket with number", + "bars thickness height"); + diff --git a/lily/volta-spanner.cc b/lily/volta-spanner.cc deleted file mode 100644 index 8b3faa777b..0000000000 --- a/lily/volta-spanner.cc +++ /dev/null @@ -1,129 +0,0 @@ -/* - volta-spanner.cc -- implement Volta_spanner - - source file of the GNU LilyPond music typesetter - - (c) 1997--2002 Jan Nieuwenhuizen -*/ - -#include - -#include "box.hh" -#include "debug.hh" -#include "font-interface.hh" -#include "molecule.hh" -#include "paper-column.hh" -#include "paper-def.hh" -#include "text-item.hh" -#include "volta-spanner.hh" -#include "group-interface.hh" -#include "side-position-interface.hh" -#include "directional-element-interface.hh" - - -void -Volta_spanner::set_interface (Grob*) -{ -} - -/* - this is too complicated. Yet another version of side-positioning, - badly implemented. - - -- - - * Should look for system_start_delim to find left edge of staff. - -*/ - -MAKE_SCHEME_CALLBACK (Volta_spanner,brew_molecule,1); -SCM -Volta_spanner::brew_molecule (SCM smob) -{ - Grob *me = unsmob_grob (smob); - Link_array bar_arr - = Pointer_group_interface__extract_grobs (me, (Item*)0, "bars"); - - if (!bar_arr.size ()) - return SCM_EOL; - - Spanner *orig_span = dynamic_cast (me->original_l_); - - bool first_bracket = orig_span && (orig_span->broken_into_l_arr_[0] == (Spanner*)me); - - bool last_bracket = orig_span && (orig_span->broken_into_l_arr_.top () == (Spanner*)me); - - bool no_vertical_start = orig_span && !first_bracket; - bool no_vertical_end = orig_span && !last_bracket; - SCM bars = me->get_grob_property ("bars"); - Grob * endbar = unsmob_grob (ly_car (bars)); - SCM glyph = endbar->get_grob_property("glyph"); - String str = ly_scm2string(glyph); - const char* cs = str.ch_C(); - no_vertical_end |= - (strcmp(cs,":|")!=0 && strcmp(cs,"|:")!=0 && strcmp(cs,"|.")!=0 - && strcmp(cs,":|:")!=0 && strcmp(cs,".|")!=0); - - Real staff_thick = me->paper_l ()->get_var ("stafflinethickness"); - Real half_space = 0.5; - - Item * bound = dynamic_cast (me)->get_bound (LEFT); - - /* - not a start, but really broken in two - */ - Real left =0.; - if (bound->break_status_dir () == RIGHT) - { - Paper_column *pc = bound->column_l (); - left = pc->extent (pc, X_AXIS)[RIGHT] - bound->relative_coordinate (pc, X_AXIS); - } - else - { - /* - the volta spanner is attached to the bar-line, which is moved - to the right. We don't need to compensate for the left edge. - */ - } - - Real w = dynamic_cast (me)->spanner_length () - left - half_space; - Real h = gh_scm2double (me->get_grob_property ("height")); - Real t = staff_thick * gh_scm2double (me->get_grob_property ("thickness")); - - /* - ugh: should build from line segments. - */ - SCM at = (scm_list_n (ly_symbol2scm ("volta"), - gh_double2scm (h), - gh_double2scm (w), - gh_double2scm (t), - gh_int2scm (no_vertical_start), - gh_int2scm (no_vertical_end), - SCM_UNDEFINED)); - - Box b (Interval (0, w), Interval (0, h)); - Molecule mol (b, at); - SCM text = me->get_grob_property ("text"); - SCM properties = scm_list_n (me->mutable_property_alist_, me->immutable_property_alist_,SCM_UNDEFINED); - Molecule num = Text_item::text2molecule (me, text, properties); - - mol.add_at_edge (X_AXIS, LEFT, num, - num.extent (X_AXIS).length () - - 1.0); - mol.translate_axis (left, X_AXIS); - return mol.smobbed_copy (); -} - - -void -Volta_spanner::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); -} - -void -Volta_spanner::add_column (Grob*me, Grob* c) -{ - Side_position_interface::add_support (me,c); -}